变异测试 Mutation Testing
测试充分性 Test Adequacy:
- 一个测试足够好吗?
- 程序被完全测试了吗?
- 测试充分吗?
程序变异 program mutation:
- 衡量测试充分性最有效的指标
- mutation 是进行在程序 P 上的操作 P → P’(P 的 mutant)
- mutation 是模拟错误的过程
- 测试 t 使得 P(t) ≠ P’(t),则说 t 可以分辨 P’ 和 P,t 杀死了 P’
- 希望测试用例都能杀死模拟出的错误,也就能发现真实的错误
- live mutant:不能杀死的
- 等价变异体:测试用例都不能区分 P 和 P’(有害)(20220527 考)
- 已知不等价变异体,测试用例依然不能区分,则是不充分的
- 不等价且存活的变异体,可以给测试者生成新测试用例的机会,这样就增强了测试
使用变异度量测试的充分性:
- 程序 P、测试集 T、测试需求 R
- 步骤 1:P 的变异体集合 M(k 个)
- 步骤 2:对每个变异体,看看有没有测试 t 可以杀死它,如果有就不考虑这个变异体
- 如果全杀死了,则是充分的
- 如果有存活的 k-k1 个变异体,到步骤 3