1 背景
对目标逻辑进行用例覆盖时,除了常见的判定覆盖、MC/DC覆盖之外,还有一种路径覆盖。实现判定覆盖和MC/DC覆盖,并不能保证实现了路径覆盖。
对逻辑进行全路径覆盖,对分析逻辑的各种属性极有帮助;然而,全路径覆盖所固有的“路径爆炸”(path explosion)问题,又需要在实际中对如何应用路径覆盖进行权衡。线性无关路径覆盖是一种很有实际应用价值、较为理想的替代方案。
2 全路径覆盖
2.1 基本示例
以如下简单逻辑举例。
If a:
x = 1
if b:
x = 2
它的控制流图(CFG)如下。
![](https://img-blog.csdnimg.cn/img_convert/af887d7a90edc860a754fd18f65cfbd0.png)
对其进行全路径覆盖,则共有4条,即:abcef、adef、abcg、adg。
2.2 路径爆炸
如果逻辑中存在循环、多层分支,在进行全路径分析时,极可能会因为路径爆炸(path explosion)问题,使得全路径分析在实际上不可行。
![](https://img-blog.csdnimg.cn/img_convert/3c94d5b9b87483f6a12be467621ad103.png)
以上述逻辑图包含的4个分支结构为例,进行全路径分析,可获得如下的全路径覆盖树,共有16条路径。
![](https://img-blog.csdnimg.cn/img_convert/19c57dcf600b723c1d8bd4d0cd47b45f.png)
即使没有循环结构,上述简单分支结构如果达到50层,则有:
路径数 = 2^50 = 1,125,899,906,842,624 ≈ 10^15。
假设一个路径占用1个字节的存储空间,仅把这些路径保存下来,就需要1024TB的空间。
所以,对于稍具规模的逻辑,全路径覆盖往往是不可行的。
3 线性无关路径覆盖
为解决全路径覆盖存在的路径爆炸问题&#