4

我们刚刚看到白皮书 “观察驱动测试:是的,代码正在做你想做的事。顺便说一句,它还在做什么?” ,并且很感兴趣。

然而,谷歌似乎并没有透露太多关于它在实践中是如何工作的(12)。那里的一切似乎都来自供应商Agitar

是否有人将 ODT 作为 TDD 和 CI 的补充流程实施?

如果是这样,请分享您遇到的一些好处陷阱……我们很乐意从您的智慧中受益。

4

1 回答 1

3

观察驱动测试或多或少是 Agitar 使用其产品的术语。几年前我评估了 Agitar 的产品。它不会取代正常的单元测试,而是与它一起工作。尽管使用它有一个过程,就像所有事物一样,我不会认为它是 TDD 或 CI 或 CD 级别的过程——它就像使用静态分析工具一样,就像测试一样。尽管如此,它非常强大和有趣。

它的核心功能是不变检测,Agitar 称之为搅拌。它查找代码中的所有方法,并使用一组自动确定的参数值执行每个方法。它在如何选择参数值方面非常复杂:它执行相对明显的操作,例如对 int 使用 MIN_VALUE、-1、0、1 和 MAX_VALUE,但它也能够观察现有测试代码的运行并在搅拌时收集有趣的值以供使用。它明确支持具有外部依赖关系的对象,例如 JDBC 连接。

在使用所选参数值运行类的所有方法后,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似乎实现了一个类似但更简单的过程。

于 2014-05-26T05:20:59.793 回答