编程变异测试介绍
1. 变异测试基础概念
在软件测试中,并非所有设计的变异(更改)都会导致可观察到的失败。在变异测试里,那些行为与原始设计等价的变异体被称为等价变异体。严格来讲,等价变异体并非完全在观察上等价,应更准确地称为细化变异体。例如,它们可能会在原始设计的前置条件之外产生额外的观察结果,但由于我们会忽略原始设计前置条件之外的测试用例,所以这些额外行为无法通过测试检测到。
这里有几个相关的练习:
- 练习 7:证明包含两个相互矛盾测试用例的测试套件等价于一个不可行的测试用例,即 (T(i, o1) ⊔T(i, o2) = T∅(i))(前提是 (o1 ≠ o2))。
- 练习 8:假设 Tri 是某个三角形的规范,在 UTP 中证明 (result := equilateral ⊑(a, b, c := 5, 5, 5); Tri)。
- 练习 9:将示例 1 的测试用例形式化为一个测试套件,并证明三角形规范(见练习 5)是该测试套件的细化。
- 练习 10:证明示例 1 的变异体是一个有缺陷的设计。
2. 测试用例设计
软件的全面测试通常难以实现,因此测试的关键问题在于选择合适的测试用例。而“合适”的定义高度依赖于所做的假设,即测试假设。常见的测试假设类型有规则性假设和均匀性假设。规则性假设的例子如:如果一个排序算法对长度不超过 10 的序列有效,那么它对更长的序列也有效;均匀性假设的例子是:某些输入(或输出)域可以形成等价分区,因此每个分区只需一个测试用例即可。一般来说,假设越强,所需的测试用例就越少。
测试假设与测试覆盖密切相关,它定义了一种基于测试假设来衡量一组测试用例充分性的单位。
超级会员免费看
订阅专栏 解锁全文
2340

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



