线性独立路径(linearlyindependentpath):指程序的一个执行路径(即有向图中初始节点到终止节点的一条路径),并且至少拥有一条以上其它线性独立路径中没有的边。该定义来自RajibMall:FundamentalsofSoftwareEngineering
圈复杂度(cyclomaticcomplexity):M=E?N+2P
E:边的数量
N:节点的数量
P:连通分量的数量
圈数(cyclomaticnumber):M=E?N+P
E,N,P参数同上
圈复杂度和圈数之间的关系为:
对有向图A,将A的每个出口(exit)与相应的入口(entrance)相连得到有向图B,则A的圈复杂度与B的圈数相等
圈复杂度又叫做CC复杂度,也可能被称为循环复杂度,它表达的是if..then..else..,swith..case..,循环语句等分支语句造成的程序控制流复杂程度
例如下图示例一个单入口、单出口的程序图(不是结构化程序图),其圈复杂度为10-7+2=5:
从节点G到A添加一条有向边,则成为一个强连通有向图(该方法对其它结构化程序图同样适用),其圈数为11-7+1=5,与上图的圈复杂度相同:
图2的圈数5就是其线性独立环数量,去掉添加的那条边,也就是图1的线性独立路径数量。这个线性独立路径即对应程序的基路径数量,例如这个示例的5个基路径分别为:
p1:A,B,C,G
p2:A,B,C,B,C,G
p3:A,B,E,F,G
p4:A,D,E,F,G
p5:A,D,F,G
在这个基础上,结合向量空间的运算特性,McCabe开发了BaselineMethod用来确定基路径集合,这个基路径集合即可作为测试依据
功能性测试存在冗余,并且忽略了代码实现,存在漏洞;而结构性测试的路径测试方法则忽略了可行路径和不可行路径的差别,在另一个方向上走得太远。数据流测试则部分意义上弥补了这两种测试方法的缺陷