基于模型的组合测试套件过滤
1. 引言
组合测试是生成大型测试套件的有效方法。基本形式的组合测试会为函数调用的每个参数确定一组相关值,然后生成这些参数值的所有组合来实例化函数调用。像 JMLUnit 就是基于这种技术的简单高效工具,它使用 JML 断言作为测试预言。
扩展形式的组合测试允许对操作序列进行测试,每个操作都关联一组相关的参数值,这样能生成更复杂的测试用例,适用于测试具有内部状态且行为依赖于先前交互的系统。Tobias 就是这样一个组合测试生成工具,它已成功应用于多个案例研究,并启发了一些新的组合测试工具。
Tobias 以测试模式作为输入,将其组合展开为大量的测试用例。不过,需要额外的预言技术来判断测试执行是否成功。过去主要使用 JML 断言的运行时评估作为测试预言,但该工具也可用于 Java/JML 之外的环境。本文采用基于模型的测试方法,先在被测系统的 UML/OCL 规范上运行测试。
组合测试容易导致组合爆炸。尽管这最初被视为这类工具的优势,因为能从测试模式生成大量测试用例,有助于系统地测试系统,但将这些测试用例转换为目标技术(如 JUnit)、编译生成的文件并执行,通常需要大量的计算资源。因此,实际中测试套件的大小通常需要限制在 10000 到 100000 个测试用例之间。
为了限制组合爆炸,有几种技术可供采用:
- 成对测试技术 :只覆盖参数值的所有对,而不是所有组合。这种技术能有效减少测试用例数量,但基于故障由两个参数组合导致的假设,可能会遗漏由三个或更多参数组合导致的故障。
- 测试套件缩减技术 :选择一个与原始测试套
超级会员免费看
订阅专栏 解锁全文
1075

被折叠的 条评论
为什么被折叠?



