複製鏈接
請複製以下鏈接發送給好友

圈複雜度

鎖定
圈複雜度(Cyclomatic complexity)是一種代碼複雜度的衡量標準,在1976年由Thomas J. McCabe, Sr. 提出。
軟件測試的概念裏,圈複雜度用來衡量一個模塊判定結構的複雜程度,數量上表現為線性無關的路徑條數,即合理的預防錯誤所需測試的最少路徑條數。圈複雜度大説明程序代碼可能質量低且難於測試和維護,根據經驗,程序的可能錯誤和高的圈複雜度有着很大關係。
中文名
圈複雜度
外文名
Cyclomatic complexity
屬    性
一種代碼複雜度的衡量標準
計算公式
V(G)=e-n+2p

目錄

圈複雜度定義

軟件源碼某部分的圈複雜度就是這部分代碼中線性無關路徑的數量。

圈複雜度舉例

如果一段源碼中不包含控制流語句(條件或決策點),那麼這段代碼的圈複雜度為1,因為這段代碼中只會有一條路徑;如果一段代碼中僅包含一個if語句,且if語句僅有一個條件,那麼這段代碼的圈複雜度為2;包含兩個嵌套的if語句,或是一個if語句有兩個條件的代碼塊的圈複雜度為3。

圈複雜度計算

它的計算方法很簡單:
計算公式1:V(G)=e-n+2p。其中,e表示控制流圖中邊的數量,n表示控制流圖中節點的數量,p圖的連接組件數目(圖的組件數是相連節點的最大集合)。因為控制流圖都是連通的,所以p為1.
圈複雜度 圈複雜度
計算公式2:V(G)=區域數=判定節點數+1。其實,圈複雜度的計算還有更直觀的方法,因為圈複雜度所反映的是“判定條件”的數量,所以圈複雜度實際上就是等於判定節點的數量再加上1,也即控制流圖的區域數。
對於多分支的CASE結構或IF-ELSEIF-ELSE結構,統計判定節點的個數時需要特別注意一點,要求必須統計全部實際的判定節點數,也即每個ELSEIF語句,以及每個CASE語句,都應該算為一個判定節點。
圈複雜度 圈複雜度
計算公式3:V(G)=R。其中R代表平面被控制流圖劃分成的區域數。
圈複雜度 圈複雜度
針對程序的控制流圖計算圈複雜度V(G)時,最好還是採用第一個公式,也即V(G)=e-n+2;而針對模塊的控制流圖時,可以直接統計判定節點數,這樣更為簡單;針對複雜的控制流圖是,使用區域計算公式V(G)=R更為簡單。