无论是单元测试、API测试还是功能性测试,最终都是调用了产品的代码;如何评价这些测试的效率,是否真正全部或者大部分覆盖了产品的代码,这个时候,代码覆盖率(code coverage)就是一个比较有价值的参考指标了。
通常,代码覆盖率用在如下几个方面
- 找出程序中没有被测试代码执行到的地方;
- 增加新的测试代码,以提高代码覆盖率;
- 分析测试代码的效率,以便设计出更有效的测试代码或测试用例
代码覆盖率常用的指标
语句覆盖(statement coverage):语句覆盖是指程序的每一行代码是否都被覆盖到;语句覆盖是最常用的一种代码覆盖率指标,也非常简单。但是对一些控制结构的代码而言,它不能真正表示是否完全覆盖到,如下代码:
int* p=NULL;
if(condition)
p=&variable;
*p=123;
在以上代码中,如果condition为true,这时,语句覆盖率就为100%。而其实当condtion为false,会导致空指针被赋值的运行时错误。
决策覆盖(decision coverage):决策覆盖是指在控制结构的代码块,如if, while中的整个bool表达式是否在false和true条件下,各被执行一次。决策覆盖不考虑组成该条件表达式的各个子条件是否被完全覆盖到。于是