Closed. This question is opinion-based。它当前不接受答案。
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
5年前关闭。
Improve this question
Quickcheck及其变体(即使Java中也有一个)似乎很有趣。但是,除了学术兴趣之外,它在实际的应用程序测试中是否真的有用(例如GUI应用程序或Client/Server甚至是StackOverflow本身)?您使用类似的测试生成器所获得的任何经验都将受到赞赏。
这是使用称为规格的QuickCheck进行测试的绝佳属性,其结果令人惊讶。
Pex很不错,但是不像QuickCheck那样酷,Pex简化了事情,QuickCheck做到了,但是编写一个良好的规范需要大量的精力。
QuickCheck的功能在于,当它发生故障时,它将导致测试失败的输入减少到最小的形式。向您详细说明什么状态进展会导致测试失败。与其他测试框架相比,它们只是试图以蛮力方式破坏您的代码。
由于您编写测试规范的方式,这使之成为可能。 QuickCheck依靠伪随机性来发明输入,正因为如此,它能够回溯并找到很小的输入而无法通过您的测试。
编写QuickCheck属性需要做很多工作,但是最终结果是更好的测试。就像约翰本人所说的那样,70%的错误是通过单元测试捕获的,但这是另外30%的错误导致您的程序崩溃。 QuickCheck正在测试最后30%的那部分。
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
5年前关闭。
Improve this question
Quickcheck及其变体(即使Java中也有一个)似乎很有趣。但是,除了学术兴趣之外,它在实际的应用程序测试中是否真的有用(例如GUI应用程序或Client/Server甚至是StackOverflow本身)?您使用类似的测试生成器所获得的任何经验都将受到赞赏。
最佳答案
好吧。其实没有,但是我是在最初开发QuickCheck的那个人的带领下学习的,他是一个非常有趣的人。
早在2004年,我们就被迫使用QuickCheck来测试我们的Haskell程序,这是好事与坏事的结合。主要是因为Haskell有点令人生畏,但当您开始工作时,它的精彩程度从未如此出色。
从那时起,John完善了自己几年前写的内容,并实际上帮助Ericssion测试了其复杂的电信硬件,并且他在2000万左右的代码行中发现了错误,通过他的方法,将错误减少到仅三个步骤。他是一位出色的演讲者,所以听他介绍他的出色表现总是很高兴,但是总而言之,他对QuickCheck所做的一切对我来说都是新的。所以我问他,他的兴趣是将其推向市场。他对这个想法持开放态度,但是当时他的业务(基于QuickCheck)相对较新,因此他还需要关注其他 Realm 。现在是2007年。我的意思是,即使您最终不会使用它,也可以向QuickCheck学习。
但是什么是QuickCheck?这是一个组合测试框架,也是一种测试程序的有趣方式。微软研究院的人们已经建立了Pex,它有点类似。 Pex通过检查您的IL自动生成测试。但是,John会为函数的可能输入和测试属性编写生成器。属性是可以轻松测试的东西,它更加正式。例如倒转 list ?好吧,反转列表与将列表分成两半,分别将它们分别反转,然后以相反的顺序串联两个反转相同。
1,2,3,4 // original
1,2 3,4 // split into A and B
2,1 4,3 // reverse A and B
4,3,2,1 // concat B and A
这是使用称为规格的QuickCheck进行测试的绝佳属性,其结果令人惊讶。
Pex很不错,但是不像QuickCheck那样酷,Pex简化了事情,QuickCheck做到了,但是编写一个良好的规范需要大量的精力。
QuickCheck的功能在于,当它发生故障时,它将导致测试失败的输入减少到最小的形式。向您详细说明什么状态进展会导致测试失败。与其他测试框架相比,它们只是试图以蛮力方式破坏您的代码。
由于您编写测试规范的方式,这使之成为可能。 QuickCheck依靠伪随机性来发明输入,正因为如此,它能够回溯并找到很小的输入而无法通过您的测试。
编写QuickCheck属性需要做很多工作,但是最终结果是更好的测试。就像约翰本人所说的那样,70%的错误是通过单元测试捕获的,但这是另外30%的错误导致您的程序崩溃。 QuickCheck正在测试最后30%的那部分。
10-08 20:25