Unit testing 使用随机输入测试最佳实践
注意:我将以下几段作为背景。如果你只是想要一个TL;博士,请随意跳到编号的问题,因为它们只与此信息间接相关 我目前正在编写一个python脚本,该脚本可以处理POSIX日期(以及其他内容)。不过,单元测试似乎有点困难,因为可能会遇到如此广泛的日期和时间 当然,对我来说,尝试测试每一个可能的日期/时间组合是不切实际的,所以我想我将尝试一个单元测试,将输入随机化,然后在测试失败时报告输入是什么。从统计学上讲,我认为如果我试着考虑所有潜在的问题区域(由于缺少内容)或测试所有案例(由于完全不可行),假设我运行了足够的时间,那么我可以实现比我所能实现的更完整的测试 因此,这里有几个问题(主要与上述间接相关):Unit testing 使用随机输入测试最佳实践,unit-testing,language-agnostic,Unit Testing,Language Agnostic,注意:我将以下几段作为背景。如果你只是想要一个TL;博士,请随意跳到编号的问题,因为它们只与此信息间接相关 我目前正在编写一个python脚本,该脚本可以处理POSIX日期(以及其他内容)。不过,单元测试似乎有点困难,因为可能会遇到如此广泛的日期和时间 当然,对我来说,尝试测试每一个可能的日期/时间组合是不切实际的,所以我想我将尝试一个单元测试,将输入随机化,然后在测试失败时报告输入是什么。从统计学上讲,我认为如果我试着考虑所有潜在的问题区域(由于缺少内容)或测试所有案例(由于完全不可行),假设
- 如何确定使用随机输入运行代码的次数?我问这个问题是因为我想有一个足够大的样本来确定任何bug,但我不想等待一周才能得到结果
- 这些类型的测试是否非常适合于单元测试,或者是否有其他类型的测试可以配合使用
- 做这类事情还有其他的最佳实践吗
- 随机测试总是一种很好的建立信心的活动,尽管正如您所提到的,它最适合于某些类型的代码
- 这是一种很好的方法,可以对任何性能可能与执行次数或输入顺序有关的代码进行压力测试
- 对于相当简单的代码,或者需要有限类型输入的代码,我更喜欢系统测试,它明确地覆盖所有可能的情况、每个不可能的或病理性的情况的样本以及所有边界条件
- 确保在1900年到2100年之间的每个月的开始、中间和结束都有测试(当然,如果这些测试适合您的代码)
- 使用多种文化,或“所有文化”,如果已知的话
- 尝试“第0天”和“每个月底后的一天”等
- 使用随机测试,您无法真正判断一段代码有多好,但可以判断它有多差
- 随机测试更适合于具有随机输入的东西——一个主要的例子是向用户公开的任何东西。因此,例如,在你的应用程序(或操作系统)上随机点击和键入的东西是对总体健壮性的一个很好的测试
- 同样,开发人员也算作用户。因此,从您的框架中随机组装GUI的东西是另一个很好的选择
- 同样,你不会以这种方式找到所有的bug——你要寻找的是“如果我做了一百万件古怪的事情,它们中的任何一件会导致系统损坏吗?”如果不是,你会感到某种程度的自信,你的应用程序/OS/SDK/任何东西可能会在几天内暴露给用户
- …但更重要的是
if (a > 0) // Do Foo else (if b < 0) // Do Bar else // Do Foobar