2014-01-29 142 views
0

我发现this site claiming thatCyclomatic Complexity = (2 + ifs + loops +cases - return)我也发现可以通过基本上相同的条件语句+ 1的数目来计算环复杂性。简单的环状复杂度计算

现在上面说的是,对于开关中的每种情况,给循环复杂度增加+1,如果在每种情况下都有返回语句会发生什么?

例如,下面的代码的CC仍然是4或2?

function(someVal) { 
switch (someVal) { 
    case 1: return something; 
    case 2: return something; 
    case 3: return something; 
     doSomething(); 
     break; 
    default: 
     doSomethingElse(); 
     break; 
} 

}

回答

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) 

的圈复杂的原始定义为:V (G)= E - N + 2P。其中E =边缘,N =节点,P =模块数量(图形)。由于 我们基本上适用于Cyclops复杂度到单个模块,P几乎总是1.