1. 程式人生 > >.NET : 在VS2008中計算程式碼度量值

.NET : 在VS2008中計算程式碼度量值

從VS2008開始,有一個新的工具可以幫助開發人員更好地瞭解自己編寫的程式碼。這個工具就是“計算程式碼度量值”

image

image

關於該功能及幾個指標的具體介紹,請參考下面的官方文件

程式碼度量是一組軟體度量值,使開發人員可以更好地瞭解他們正在開發的程式碼。利用程式碼度量,開發人員可以瞭解哪些型別和/或方法應該返工或進行更徹底的測試。開發團隊可以識別潛在的風險、瞭解專案的當前狀態,並跟蹤軟體開發的進度。

軟體度量值

下面的列表顯示了 Visual Studio 計算的程式碼度量結果:

  • 可維護性指數計算一個介於 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,則既不激發錯誤,也不激發警告。可維護性指數是以下三種度量值的綜合體現:圈複雜度、程式碼行數以及算術複雜度。可維護性指數的值沒有單位。

您可以按任何列對該視窗中的結果進行排序。若要進行排序,請單擊列標題。再次單擊該列標題,該視窗將按相反的順序排序。

本文由作者:陳希章 於 2009/7/12 11:31:34 釋出在:http://www.cnblogs.com/chenxizhang/
本文版權歸作者所有,可以轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。
更多部落格文章,以及作者對於部落格引用方面的完整宣告以及合作方面的政策,請參考以下站點:陳希章的部落格中心 本文是使用部落格同步和管理系統自動於2009/7/12 11:31:37 從 陳希章@部落格園 同步過來的。原文地址: http://www.cnblogs.com/chenxizhang/archive/2009/07/12/1521879.html ,發表於2009/7/12 3:32:00.