我找到了this site claiming that Cyclomatic Complexity = ( 2 + ifs + loops +cases - return )
,我也发现Cyclomatic Complexity可以通过条件语句+ 1的数量来计算,它基本上是相同的。
现在上面说明,对于开关中的每个案例,为Cyclomatic Complexity添加+1,如果我在每种情况下都有一个return语句会怎样?
例如,以下代码的CC是4还是2?
function(someVal) {
switch (someVal) {
case 1: return something;
case 2: return something;
case 3: return something;
doSomething();
break;
default:
doSomethingElse();
break;
}
}
答案 0 :(得分:2)
循环复杂度是通过程序的线性独立路径的数量。换一种说法 从入口点到出口点有多少条不同的路径。这反过来又是一个指标 至于底层程序有多复杂,并给出了你需要填满的测试用例数量的下限 模块的路径覆盖(这里完整路径覆盖意味着至少执行一行代码)。
计算通过程序的路径数有几种方法,大多数是基于图论。其中许多都有 已被归纳为简单的计数规则,例如您正在使用的规则。
现在回答您的具体问题。你的程序的圈复杂度是多少?考虑程序结构图:
此图表中有多少条路径?使用边数我们有以下路径:
1, 2
1, 3, 4
1, 3, 5, 6, 7
1, 3, 5, 8, 9
该程序有4条线性独立路径。圈复杂度为4。
假设结构化程序(结构图中没有交叉线),还有其他方法可以得出相同的结果:
edges - nodes + 2 = 9 - 7 + 2 = 4
Number of enclosed spaces in the structure chart plus 1 (3 + 1 = 4)
Cyclomatic复杂性的原始定义是:v(G)= E - N + 2P。其中E =边,N =节点,P =模块数(图)。以来 我们通常将Cyclomatic复杂性应用于单个模块,P几乎总是1。