本文整理常见的代码覆盖率概念。关于如何编写测试用例,参见
自动化测试用例。
覆盖率
- 白盒覆盖率:语句、判定、条件、路径等等;
- 灰盒覆盖率:接口相关;
- 黑盒覆盖率:功能、性能测试;
白盒测试中的覆盖率
void fun(bool a, bool b, bool c, bool d)
{
printf("x\n"); // 语句 1
if ((a == true) && (b == true)) // 判断
printf("y\n"); // 语句 2
if ((c == true) && (d == true)) // 判断
printf("z\n"); // 语句 3
}
- 一共有 4 条执行路线 [x] [xy] [xz] [xyz]
白盒测试中常用逻辑覆盖率,也称代码覆盖率或结构化覆盖率。
语句覆盖
- 在测试时运行被测程序后,程序中被执行到的可执行语句的比率
语句覆盖率 = (至少被执行一次的语句数量) / (可执行的语句总数)
| 参数 | 覆盖率 |
|---|
| TTTT | 3 / 3 |
| FTTT | 2 / 3 |
| FFFF | 1 / 3 |
判定覆盖率 / 分支覆盖
- 在测试时运行被测试程序后,程序中所有判定语句的取真分支和取假被执行到的比率
判定覆盖率 = (至少执行一次的判定结果数) / (判定结果总数)
- 两个判断, 每个判断有 T 或者 F 两种情况, 一共 4 种情况
| 参数 | 覆盖率 |
|---|
| TTTT | 2 / 4 |
| FTTT | 2 / 4 |
| TTTT + FFTT | 3 / 4 |
条件覆盖率
- 在测试时运行被测程序后,所有的判断语句中每个条件的可能取值(真和假)出现过的比率
条件覆盖率 = (条件操作数值至少被评价一次的数量) / (条件操作数的总数)
- 案例中有两条判断语句,每个 if 有两个条件,即 4 个条件,每个条件有两个取值,所以条件操作数值的总数为8个
| 参数 | 覆盖率 |
|---|
| TTTT | 4 / 8 |
| FTTT + FFFF | 7 / 8 |
| FFFF + TTTT | 8 / 8 |
路径覆盖
- 指在测试时运行被测程序后, 程序中所有可能的路径被执行过的比率。
路径覆盖率 = (至少被执行到一次的路径数) / (总的路径数)