iT邦幫忙

DAY 14
11

如何提升系統設計品質 - 技術與工具以.NET為例系列 第 14

[如何提升系統品質-Day14]品質量測工具- Visual Studio 2010 程式碼度量

前一篇介紹了免費的品質量測工具:SourceMonitor,提供多種語言的複雜度、深度等分析,倘若您已經是使用Visual Studio 2010 PREMIUM以上的版本,那麼VS2010就已經有提供類似的工具,供您進行程式碼品質指標的度量。

倘若再結合TFS,那就是CI+版本控管+品質分析+自動建置+單元測試的完整雛形了。

這一篇會介紹一下,在VS2010中,各項指標的意義,以及基本的門檻值。

[如何提升系統品質]系列文章連結
這一篇文章,以微軟PetShop 4.0的專案來當作分析的樣本。

步驟
1.針對想要分析的方案或專案上,按滑鼠右鍵,選擇『計算程式碼度量』

2.接著出現各專案分析的結果

可以看到每個專案的相關指標,展開後還可以看到每一個類別、成員等等的統計數據。通常如果針對整個方案或專案掃瞄,出來的結果很多。要看到想看的數據,我會建議使用Excel開啟,比較方便。可以進行排序、資料篩選,甚至出統計圖表等等。

例如,現在關心的是每一個function,複雜度從大到小的排序,結果就會像這樣:

各項指標說明(約莫給兩個建議數值,看各專案與成員的需求調整)
1.循環複雜度(Cyclomatic Complexity):與SourceMonitor定義相同,也就是程式碼分歧路徑越多,循環複雜度越高。建議每一個成員(也就是function)不超過10,或不超過15。越低越好。

2.繼承深度:繼承是一種絕對耦合性,繼承的深度越長,代表父類別越無法彈性的修改,因為牽一髮而動全身,子類別都會被影響到。建議不超過3,或不超過5。越低越好。

3.類別結合程度(Class Coupling):表示此類別引用到多少其他類別。良好的軟體設計應指定聚結性 (Cohesion) 高但結合程度 (Coupling) 低的型別和方法。結合程度高表示設計不易重複使用,因為這種設計包含對其他型別的許多相依性。

4.程式碼行數:這個數目是以 IL 程式碼為依據,因此不是原始程式碼檔案中精確的行數。 如果數目非常大,表示型別或方法嘗試執行的工作可能過多,而應該分割工作。這也表示該型別或方法可能難以維護。

5.可維護性:這個指標被我排在最後面,是因為它是一個綜合性的指標,也就是透過前面幾項指標,還有一個『計算複雜度』的指標,來算出可維護性的指數有多高。官方建議:門檻值20~100為高維護性,綠燈。10~20為中維護性,黃燈。0~10為低維護性,紅燈。 所以這個分數是越高越好。

可維護性指數(Maintainability Index)公式是由SEI發展出來,公式為171 - 5.2 * log2(Halstead Volume) - 0.23 * (Cyclomatic Complexity) - 16.2 * log2(Lines of Code)。

這邊出現的Halstead Volume,請參考wiki的說明

結論
有了這樣的工具,我們在量測系統的品質時,可以透過工具來自動化,讓不懂程式的角色也可以迅速得知系統的品質狀況。Code Review不再需要太多的著墨在工具可以涵蓋的指標上,而專心地review business與performance等其他issues。

相關Reference:
1.MSDN程式碼度量:http://msdn.microsoft.com/zh-tw/library/bb385914.aspx
2.PetShop: http://msdn.microsoft.com/en-us/library/aa479070.aspx


上一篇
[如何提升系統品質-Day13]品質量測工具- SourceMonitor簡介
下一篇
[如何提升系統品質-Day15]基礎建設-版本控管的重要概念
系列文
如何提升系統設計品質 - 技術與工具以.NET為例30

1 則留言

0
kradark
iT邦好手 1 級 ‧ 2011-10-23 18:14:21

好方便的功能喔
收下囉 感恩

我要留言

立即登入留言