我们只是遇到了whitepaper“观察驱动测试:是的,代码正在执行您想要的操作。顺便说一下,它还在做什么?”,并对此产生了兴趣。

但是,Google似乎并未透露有关其实际工作方式的很多信息(12)。那里的所有内容似乎都来自供应商Agitar

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

如果是这样,请分享您在使用它时遇到的一些好处和陷阱...我们很乐意从您的智慧中受益。

最佳答案

观察驱动测试或多或少是Agitar使用其产品的术语。几年前,我评估了Agitar的产品。它不能代替普通的单元测试,但可以与之并行工作。尽管有使用它的过程,但对所有事物来说,我都不会认为它是TDD或CI或CD级别的过程-这就像使用静态分析工具一样,就像测试一样。但是,它非常强大且有趣。

它的核心功能是不变检测,即Agitar称为搅动。它在代码中找到所有方法,并使用一组自动确定的参数值执行每个方法。它在选择参数值方面非常复杂:它做相对明显的事情,例如对int使用MIN_VALUE,-1、0、1和MAX_VALUE,但它也可以监视现有的测试代码运行并收集有趣的值以在搅动时使用。它对具有外部依赖性的对象(如JDBC连接)具有显式支持。

使用选定的参数值运行类的所有方法后,Agitar会对参数值,方法返回值和字段值进行观察(候选不变量)。它将它们呈现给用户,用户可以将其提升为不变量,然后在以后的搅拌运行中对其进行测试,或者更改代码以使观察变得不可能。例如,Agitar可能会观察到,调用一个参数为null的方法会导致该方法抛出NullPointerException。更改代码以处理空值将消除以后的运行情况。

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似乎实现了一个类似的过程,但过程要简单得多。

10-08 04:56