辭彙涵義
代碼度量是一組軟體度量值,使開發人員可以更好地了解他們正在開發的代碼。利用代碼度量,開發人員可以了解哪些類型和/或方法應該返工或進行更徹底的測試。開發團隊可以識別潛在的風險、了解項目的當前狀態,並跟蹤軟體開發的進度。
實踐套用
下面的列表顯示了 Visual Studio( VS 2008 Team Suite Edition)計算的代碼度量結果:
可維護性指數 – 計算一個介於 0 和 100 之間的指數值,表示維護代碼的相對容易度。值越大表示可維護性越好。該計算基於 Halstead Volume、圈複雜度和代碼的行數。按顏色標記的等級可用於迅速發現代碼中的故障點。綠色等級介於 20 和 100 之間,表示代碼的可維護性良好。黃色等級介於 10 和 19 之間,表示代碼的可維護性中等。紅色等級是介於 0 和 9 之間的等級,表示可維護性低。
圈複雜度 – 衡量代碼在結構上的複雜程度。它通過計算程式流中的不同代碼路徑的數目(例如 if 塊、switch case 以及 do、while、foreach 和 for 循環),然後在總數中加 1 來創建。具有複雜控制流的程式需要更多單元測試才能實現良好的代碼覆蓋率,並且不容易維護。
繼承深度 – 指明擴展到類層次結構根的類定義的數目。層次結構越深,則越難了解特定方法和欄位是在何處定義或/和重新定義的。在類級別,該數目是通過計算繼承樹中從 0 開始的類型之上的類型數目(不包括接口)來創建的。在命名空間和項目級別,該計算包括命名空間或項目內所有類型的最高繼承深度計算。
類耦合 – 通過參數、局部變數、返回類型、方法調用、泛型或模板實例化、基類、接口實現、在外部類型上定義的欄位以及屬性修飾來衡量與唯一類的耦合程度。該計算不包括基元類型和內置類型,例如 int32、字元串和對象。良好的軟體設計要求類型和方法應具有較高的內聚力和較低的耦合。耦合較高表示設計難以重用和維護,這是因為它與其他類型之間存在許多依存關係。
代碼的行數 – 指明代碼中的大概行數。該計數基於 IL 代碼,因此並不是原始碼檔案中的確切行數。該計算不包括空白、注釋、括弧以及成員、類型和命名空間的聲明。計數過高可能表示某個類型或方法正在嘗試執行過多的工作,應予以拆分。還可能表示該類型或方法難以維護。
匿名方法
“匿名方法”就是沒有名稱的方法。匿名方法通常用於將代碼塊作為委託參數進行傳遞。在某個成員(如方法或訪問器)中聲明的匿名方法的度量結果與聲明該方法的成員相關聯,而不與調用該方法的成員關聯。
生成代碼
某些軟體工具和編譯器會生成一些代碼並添加到項目中,而項目開發人員看不到這些代碼,或者不能更改這些代碼。在代碼度量計算度量值時,通常會忽略生成的代碼。這樣,度量值便可以反映開發人員能夠看到和更改的內容。
不會忽略為 Windows 窗體生成的代碼,因為開發人員可以看到和更改這些代碼。
結果顯示
當 Visual Studio 分析代碼後,將在 “代碼度量結果”視窗中顯示結果。該視窗頂部有一個工具列,還有一些用於顯示計算結果的列。
“層次結構”列包含一個代碼層次結構樹視圖,您可以展開或摺疊此視圖以查看所需的詳細信息級別。其餘各列顯示計算的結果。您可以根據需要隱藏或排列結果列。有關更多信息,請參見 如何:添加、移除列或對列進行重排。
“可維護性”列中除了數字結果外還包含一個圖示。綠色圖示表示可維護性程度相對較高。黃色圖示表示中等可維護性程度。紅色圖示表示可維護性低或存在潛在的故障點。這些顏色指示符與 FxCop 規則 AvoidUnmaintainableCode 所使用的嚴重級別相對應。如果可維護性指數低於 10,則此規則將激發錯誤;如果指數介於 10 和 20 之間,則激發警告;如果指數高於 20,則既不激發錯誤,也不激發警告。可維護性指數是以下三種度量值的綜合體現:圈複雜度、代碼行數以及算術複雜度。可維護性指數的值沒有單位。