循環復雜度
編輯循環復雜度(也稱為圈復雜度 - 圈復雜度)是一種軟件度量,可用于衡量軟件模塊(功能、過程或通常是一段源代碼)的復雜性。
McCabe 的軟件指標基于這樣的想法,即在一定程度的復雜性之上,模塊不再為人類所理解。 圈復雜度定義為模塊控制流圖上線性獨立路徑的數量。 這個數字是實現控制流圖的完全分支覆蓋所需的最小測試用例數的上限。
計算
編輯有兩種方法可以計算 McCabe 的圈復雜度 - 即控制流中的線性獨立路徑 - 取決于二進制分支的數量或取決于控制流圖中節點和邊緣的數量。
按二進制分支數計算
根據 McCabe M 的復雜性度量等于二進制分支的數量 b 加 1。當考慮多個控制流圖(即 p > 1 {\displaystyle p>1} )時, M = b + p 適用 {\displaystyle M=b+p} 其中
b:二進制分支的數量,即恰好有兩個分支的條件指令,例如 B. IF 語句 andp:單個控制流圖的數量(每個函數/過程一個圖)。
具有兩個以上分支的分支可以分解為二元分支。 這里 b = z ? 1 也適用
z:分支數。
按節點數和邊數計算
或者,可以使用控制流圖中的節點和邊的數量來計算復雜度度量。 在這種情況下,麥凱布數定義為 M = e ? n + 2 p 其中
e:圖中的邊數,n:圖中的節點數,p:圖中的連通分量數。
指標解釋
編輯根據 McCabe 的說法,一個自包含子程序的圈數不應高于 10,否則程序將過于復雜且難以測試。 然而,這條規則是有爭議的,因為圈數只有在插入分支指令(如 IF)時才會增加,而在插入其他指令(例如屏幕輸出)時不會增加。 因此,只能對測試工作做出聲明(要測試的獨立程序路徑的數量)。
批評
編輯復雜性度量有時對人們來說并不直觀,尤其是 switch 語句通常被認為不如其復雜性數字所暗示的那么復雜。 在下面的示例中,人們不會有混淆的問題,但是復雜度為 8 時,它獲得了非常高的值。
在實踐中,switch 結構通常用于這種類型的查找。 “工作日名稱”函數包括8個控制流路和8個出口點,對應的復雜度數為8,仍然很容易被人考察。 然而,該結構存在危險,即可能將副作用納入個別案例陳述中。
同一示例的以下實現明顯沒有那么復雜,因為不能為這八種情況編寫副作用,每種情況都有自己的返回語句,并且彼此之間也沒有分開。然而,重組后的代碼包含更多容易出錯的地方(使用運算符sizeof、數組標簽的范圍檢查和索引的顯式計算)。
內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/363641/