一般来说,语句覆盖率和分支覆盖率、MCDC覆盖率以及循环覆盖率并不关心你是如何到达某个地方的,只要你以满足条件(Condition)的方式执行代码即可。而路径覆盖率关注的是你如何到达某个地方:
例如:
void foo (int x, bool y )
{
for i in range (x)
something()
if y:
somethingElse()
}
case1:x=0, y为真,执行路径为:
somethingElse(); // something执行0次,somethingElse执行1次
case2: x=1, y 为真,执行路径为:
something();
somethingElse(); // something执行1次,somethingElse执行1次
case3:x=2, y为真,执行路径为:
something();
something();
somethingElse(); // something执行2次,somethingElse执行1次
对于y为假的情况,x=0, 咱跳过这些步骤,这也是一个路径;
.....
实际上,随着x无限扩大, 这段代码包含了2^n的无穷多条路径,100%路径覆盖率是我们测试想要达到的理想状态,但实际上无法真正实现。怎么办?使用主路径覆盖(PPC)方法来确保复杂逻辑和循环结构得到充分测试:
- 简单路径 (Simple Path):一条路径中除了起点和终点可以相同外,其他节点均不重复。简单路径内部没有环。
- 主路径 (Prime Path):是一条简单路径,且不能被其他更长的简单路径包含(即不作为其他简单路径的子路径)。
- PPC 的定义:测试用例集合需覆盖程序图中所有的主路径
优势: 主路径覆盖能够发现由于循环(Loops)不当或逻辑跳转导致的隐蔽 Bug。它比普通的路径覆盖更具操作性,因为它解决了无限循环导致的路径爆炸问题(通过限制为"简单路径")。