軟件度量之圈複雜度

軟件度量之圈複雜度
一種代碼複雜度的衡量標準,中文名稱叫做圈複雜度。在軟件測試的概念裏,圈複雜度“用來衡量一個模塊判定結構的複雜程度,數量上表現爲獨立現行路徑條數,即合理的預防錯誤所需測試的最少路徑條數,圈複雜度大說明程序代碼可能質量低且難於測試和維護,根據經驗,程序的可能錯誤和高的圈複雜度有着很大關係”。

控制流圖是McCabe複雜度計算的基礎,McCabe度量標準是將軟件的流程圖轉化爲有向圖,然後以圖論的知識和計算方法來衡量軟件的質量。 McCabe複雜度包括圈複雜度(Cyclomatic complexity)、基本複雜度、模塊涉及複雜度、設計複雜度和集成複雜度等。控制流程圖分析是一個靜態的分析過程,它提供靜態的度量標準技術,一般主要運用在白盒測試的方法中。

控制流圖的一個重要性質是它的可規約性(reducibility)。如果程序中不存在從循環外跳到循環內的goto語句,那麼這個程序對應的控制流圖是可規約的(reducible),反之這個控制流圖就是不可規約的(irreducible)。因此,模塊符合結構化程序設計的準則是控制流圖可規約的基礎。

程序環路複雜性也即爲McCabe複雜性度量,它一般常用圈複雜度來描述,記錄爲V(G)。它用來衡量一個程序模塊所包含的判定結構的複雜程度,數量上表現爲獨立路徑的條數,即合理地預防錯誤所需測試的最少路徑條數,圈複雜度大的程序,說明其代碼可能質量低且難於測試和維護。經驗表明,程序的可能存在的 Bug數和圈複雜度有着很大的相關性

圈複雜度的計算方法很簡單,計算公式爲:V(G)=e-n+2。其中,e表示控制流圖中邊的數量,n表示控制流圖中節點的數量。其實,圈複雜度的計算還有更直觀的方法,因爲圈複雜度所反映的是“判定條件”的數量,所以圈複雜度實際上就是等於判定節點的數量再加上1,也即控制流圖的區域數,對應的計算公式爲:V(G)=區域數=判定節點數+1。

對於多分支的CASE結構或IF-ELSEIF-ELSE結構,統計判定節點的個數時需要特別注意一點,要求必須統計全部實際的判定節點數,也即每個 ELSEIF語句,以及每個CASE語句,都應該算爲一個判定節點。判定節點在模塊的控制流圖中很容易被識別出來,所以,針對程序的控制流圖計算圈複雜度 V(G)時,最好還是採用第一個公式,也即V(G)=e-n+2;而針對模塊的控制流圖時,可以直接統計判定節點數,這樣更爲簡單。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章