我知道两种财产检查方法:
随机方法(如在QuickCheck中)使您可以为类型定义随机值的生成器,然后为大量随机生成的案例中的每一个验证不变量。例如,如果是向量空间ℤⁿ(定义为[Word]
),它将生成任意长度和方向的向量。
确定性方法(如在SmallCheck中)的工作原理相同,只是它从简单的小到更复杂和广泛的确定性生成价值,涵盖(据我所知)的一小部分域紧。例如,在与上述相同的情况下,它将生成零向量,然后生成长度<= 1的所有向量,然后是长度<= 2的所有向量,依此类推,最终覆盖所有有趣的值(例如单位向量),可能会出现无法预见的破坏不变量的角落情况。
我说得对吗?这两种方法的好处和缺点是什么?两者的首选用例是什么?也许,为了获得最佳效果,两种方法应该结合起来,比如说,覆盖一些中等规模的基地&#34;用确定性检查器然后用随机样本随机抽样?
我正在寻找一些坚实的,有动力的最佳实践,每天使用并从现在开始。
P.S。这个问题无意引发讨论。我具体要问的是,对于财产检查而言,任何一种方法的好处都是事实上的,而不是更好,更容易使用或更好的任何其他可被视为品味的措施。答案将提供对所提出问题的批评,对任何一种财产检查方法的性质进行有意识的数学观察,或者对某种方法中的一种方法进行合理的案例/经验报告。最后,我打算在这个问题上生成一组标准,以帮助确定哪种测试方法可以捕获更多的编程错误。按照这种方式,我不知道如the rules所述,这个问题如何被认为是主观的,而不是好的。有一个companion reddit thread提供了一个更自由的沟通渠道。