简单的循环复杂度计算

时间:2014-01-29 19:47:20

标签: cyclomatic-complexity

我找到了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;
}

}

1 个答案:

答案 0 :(得分:2)

循环复杂度是通过程序的线性独立路径的数量。换一种说法 从入口点到出口点有多少条不同的路径。这反过来又是一个指标 至于底层程序有多复杂,并给出了你需要填满的测试用例数量的下限 模块的路径覆盖(这里完整路径覆盖意味着至少执行一行代码)。

计算通过程序的路径数有几种方法,大多数是基于图论。其中许多都有 已被归纳为简单的计数规则,例如您正在使用的规则。

现在回答您的具体问题。你的程序的圈复杂度是多少?考虑程序结构图:

enter image description here

此图表中有多少条路径?使用边数我们有以下路径:

  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。