分支覆盖与变异测试
- 本文内容如题,是为了配合开发者测试Competition所做出的一些学习记录。我个人对测试的态度还是比较看好的,身为一个开发者具有测试思维,能够管理好自己的代码的结构,减小代码出错的机率。熟悉简单的单元测试、接口测试和集成测试也是一个优秀开发者应该具备的基本素质。
分支覆盖
- 分支覆盖要求程序中每个条件判定语句的真值结果和假值结果都至 少出现一次。
- 分支覆盖不仅考虑了各个条件判定语句的覆盖需求,还考虑了这些 语句分支的覆盖需求,因而较语句覆盖测试强度更高。
那么如下,对于程序来说,条件语句的真假分支至少被执行一次。
变异测试
- 程序变异是指基于预先定义的基本操作对程序进行修改,进而得到源程序变异程序的过程。
- 当源程序与变异程序存在执行差异时,则认为测试检测到变异程序中的错误,变异程序被杀死。
- 变异测试是一种对测试集的充分性进行评估的技术,以创建更有效的测试集。
- 变异测试可以度量测试用例缺陷检测能力。
若有代码:
if(a && b) c = 1;
else c = 0; 条件运算符如果用||来替换&&,就会产生以下变异:
if(a || b) c = 1;
else c = 0;
为了杀死这个突变,需要满足以下条件:
- 测试数据必须对突变和原始程序引起的不同状态覆盖。如:a=1,b=0可以达到目的。
- c的值应该传播到程序输出,并被测试检查。
弱突变覆盖需满足1,强突变覆盖需同时满足1,2。
以下是两个变异算子表:
- 面向过程
- 面向对象
- 分支覆盖得分: branch score
- 变异覆盖得分: mutation score