What?
先说说什么是代码覆盖率: 它是反映测试用例对被测软件覆盖程度的重要指标,也是衡量测试工作进展情况的重要指标。它是对测试工作进行量化的重要指标之一。
我们平时所说的测试覆盖率分为三大类:
1、行覆盖率度量被测代码中每个可执行语句是否被执行到
intfoo(inta,intb) { return a / b; } |
测试用例:
TeseCase: a = 10, b = 5 |
2、分支覆盖率:度量程序中每一个判定的分支是否都被测试到
3、条件覆盖率:度量判定中的每个子表达式结果true和false是否被测试到
intfoo(inta,intb) { if(a < 10 || b < 10)// 判定 { return0;// 分支一 } else { return1;// 分支二 } } |
分支覆盖率100%
TestCaes1: a = 5, b = 任意数字 覆盖了分支一 TestCaes2: a = 15, b = 15 覆盖了分支二 |
条件覆盖率100%
TestCase1: a = 5, b = 5 true, true TestCase2: a = 15, b = 15 false,false |
我想这里,大家可能会问这样的几个问题。100%的行覆盖率能证明代码是正确的吗?
100%的条件覆盖能否代表100%的分支覆盖?
当然,答案非常明显,测试覆盖率仅仅能够告诉我们什么没有被测试,根本就回答不了软件是否经过了有效测试!上面条件覆盖的例子都只覆盖率分支一,对于分支二都没有涉及到。
WHY
为什么我们要做覆盖率统计?
既然测试覆盖率不能证明代码是正确的,那么它存在又有什么意义了?有过开发,测试经验的同学都能体会到,覆盖率能够帮助我们发现代码的一些问题,如下:
1、被测系统中有没有存在代码,没有被当前的测试用例集所覆盖的
2、找出冗余的代码,提高开发质量
3、可以及时反馈当前系统的测试质量,间接衡量测试的质量。