Visual Studio 2008中代碼分析中代碼度量功能

翻譯自:

http://blogs.msdn.com/fxcop/archive/2007/10/03/new-for-visual-studio-2008-code-metrics.aspx

Visual Studio 2008 引入了一項新的功能,代碼度量(Code Metrics),來幫助程序員找出那些複雜而不可維護的代碼。

下面是針對一個虛構的應用程序做的代碼度量:

從上面的運行結果可以看出,主要有五方面的度量指標,下面來分別講解。

類型間耦合度(Class Coupling)

針對左邊的每一個層次,這個度量值表示這個層次的項依賴於其他類型的個數。統計數量排除了基本數據類型和其他內建類型,比如Int32, String或者Object。

數值越高,這個項受其他依賴項的變化影響越大。數值越低,表明本項被重用的可能性越大。下圖表示如何計算耦合度數值:

如圖所示,Account與另外兩個類型耦合,Address和Order,所以耦合度是2.但是, Country不依賴於任何其他類型,所以耦合度是0.

繼承的深度(Depth of Inheritance)

在類型這個層次,繼承的深度表明在繼承樹上,有多少個類型在這個類型之上。比如,一個類型直接從Object派生,則繼承深度爲1。

在命名空間和項目層次上,繼承深度是它所包含的所有類型中繼承深度的最大值。繼承深度不考慮接口的實現深度。

繼承深度越大,可能帶來“過度設計”的問題,測試和維護的難度都會加大。

下面是繼承深度的計算方法:

如圖所示,在上面的繼承關係中,ListControl和Label的繼承深度爲3,而Component的繼承深度爲1.

圈複雜度(Cyclomatic Complexity)

針對每個層次,本度量值表示代碼中獨立路徑的總數。統計方法就是簡單地計算決策點的數量,決策點包括if代碼塊,switch的case語句,do, while, foreach 和for loops。

這個度量值也很好的表明了要達到全覆蓋測試時,需要的單元測試的數量。 

通常來說,這個度量值越小越好。

下面介紹複雜度的計算原理:

代碼行數(Lines of Code)

針對每個層次,本度量值表示可執行的代碼的總行數,不包括空格,註釋,括號,成員申明以及類型、命名空間本身佔用的行。

通常來說,行數越少越好,呵呵。

下面是代碼行數的計算方法:

可維護性指數(Maintainability Index)

在成員和類型層次,用0到100之間的一個數值來表明成員或者類型的可維護性。

在命名空間和程序集層次,可維護性指數是它包括的所有類型的指數的平均值。本指數基於很多其他的度量值,包括霍爾斯特德量 (Halstead Volume,霍爾斯特德提出的關於軟件科學的理念,並引入物理領域的分析方法提出的一個計算軟件複雜度的概念,通過分析操作符和操作數得出。),圈複雜度和代碼行數。

數值越低,表明代碼可維護性越差。

可維護性指數通過不同的圖標來直觀的表明某個項的可維護性,如下表:

        圖標        可維護性水平             取值範圍

    綠色        可維護性高               20<=可維護性指數<=100

    黃色        可維護性中等             10<=可維護性指數<=19

    紅色        可維護性低                0<=可維護性指數<=9

這些指示標記讓問題一目瞭然,方便解決。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章