我们刚刚看到whitepaper “观察驱动的测试:是的,代码正在做你想要的。顺便说一下,它还做了什么?”,并且很感兴趣
然而,谷歌似乎并没有透露它在实践中的运作方式(1,2)。那里的所有东西似乎来自供应商,Agitar。
有没有人将ODT作为TDD和CI的补充流程实施?
如果是这样,请分享您遇到的一些好处和陷阱 ...我们希望从您的智慧中受益。
答案 0 :(得分:2)
观察驱动测试或多或少是Agitar使用其产品的术语。几年前我评估过Agitar的产品。它不能取代正常的单元测试,而是与它一起工作。虽然有一个使用它的过程,就像所有事情一样,我不认为它是TDD或CI或CD级别的过程 - 它就像使用静态分析工具一样,就像测试一样。尽管如此,它非常强大而有趣。
其核心功能是不变检测,Agitar称之为激动。它找到代码中的所有方法,并使用自动确定的参数值集执行每个方法。它在如何选择参数值方面很复杂:它使用MIN_VALUE,-1,0,1和MAX_VALUE来表示相对明显的事情,但它也能够观察现有的测试代码运行并收集有趣的值以便在搅拌时使用。它明确支持具有外部依赖性的对象,如JDBC Connections。
在使用所选参数值运行所有类的方法之后,Agitar对参数值,方法返回值和字段值进行观察(候选不变量)。它将它们呈现给用户,用户可以将它们提升为不变量,将在未来的搅拌运行中进行测试,或者更改代码以使观察变得不可能。例如,Agitar可能会发现调用一个参数为null的方法会导致该方法抛出NullPointerException
。更改代码以处理null将在将来的运行中消除该观察结果。
Agitar可以根据其观察结果生成JUnit测试。我不知道在Agitar的工具中保持不变量的任何优势。
我没有购买Agitar的产品,但我仍然非常尊重我所看到的并且会在合适的环境中再次考虑它(Java,强大的商业需要防弹代码)。它发现了我用TDD开发的代码中的错误,它有近100%的线和分支覆盖率。更好的是,观察它的工作改善了我对单元测试的看法!
关于陷阱:它特定于Java,专有且昂贵。此外,由于它是如此彻底的工具,并且其观察结果与实现细节相结合,因此需要花费大量精力来维护Agitar对正在积极开发的程序的看法(不仅仅是维护接受/集成/单元测试套件)
这是我发现的最好的鼓动快速介绍:http://www.agitar.com/downloads/demos/agi_demo/agiDemo.html。这里有前人和相关系统的有趣读物:http://plse.cs.washington.edu/daikon/pubs/。此外,ScalaCheck似乎实现了类似但更简单的过程。