2014-01-29 140 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.