0

我发现这个网站声称, Cyclomatic Complexity = ( 2 + ifs + loops +cases - return )我还发现循环复杂度可以通过条件语句的数量 + 1 来计算,这基本上是相同的。

现在上面指出,对于 switch 中的每种情况,将 +1 添加到 Cyclomatic Complexity,如果我在每种情况下都有一个 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;
}

}

4

1 回答 1

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)

圈复杂度的原始定义是:v(G) = E - N + 2P。其中 E = 边,N = 节点,P = 模块数(图)。由于我们通常将圈复杂度应用于单个模块,因此 P 几乎总是 1。

于 2014-01-30T15:41:23.713 回答