摘要
为了发现软件中的缺陷,需要系统地执行软件的测试用例以及需要在运行这些测试用例时评估观察到的行为正确性的结果参照物。本文介绍了 EvoSuite,它是一种工具,该工具自动使用 Java 代码编写的类的断言生成测试用例。为了实现这一目标,EvoSuite 应用了一种新颖的混合方法,该方法可以生成并优化整个测试套件以满足覆盖标准。对于产生的测试套件,EvoSuite 通过添加少量有效的断言来简要总结当前行为从而提出可能的结果参照物。这些断言允许开发人员检测与预期行为的偏差并捕获当前行为,以防止将来出现破坏该行为的缺陷。
关键词
测试用例生成,断言生成,基于搜索的软件测试
1 介绍
当使用诸如 Java 之类的面向对象的语言编写程序时,通常会执行单元测试以识别软件中的缺陷并捕获当前行为,从而检测到破坏行为的未来缺陷。
测试用例可以自动生成,但是存在一些结果参照物的问题,即如何验证测试用例的输出是否为预期的输出。如果故障导致程序崩溃、死锁或违反正式规范,则有时可以自动检测到故障。但是在许多情况下,没有正式的规范,并且这些错误不会导致程序崩溃或死锁 因此,需要为用户提供可以手动验证的小型测试套件(就测试数据和断言而言),即判读断言语句是否与程序的语义一致。
图 1: EvoSuite 可以用作命令行工具或 Eclipse 插件以完全自动化地为 Java 类生成覆盖测试套件
EvoSuite 可通过系统地生成可尽可能小地实现高代码覆盖率并提供断言的测试套件来自动完成此任务(请参见图 1)。EvoSuite 使用基于搜索的方法并结合了最新技术,例如混合搜索、动态符号执行和可测试性转换。此外,EvoSuite 实施了几种新颖的技术来有效地实现其目标:
整个测试套件的生成:EvoSuite 使用一种演化搜索方法,可以同时针对全部的覆盖标准对整个测试套件进行演化。关于对覆盖标准而不是对单个覆盖目标的优化实现了结果既不会受到顺序的不利影响,也不会受到单个覆盖目标的困难性或不可行性的不利影响。
基于变异的断言生成:EvoSuite 使用变异测试来生成缩小的断言集,从而