2015年2月10日 星期二

Visual Studio 計算程式碼度量 - Code Metrics Viewer 2013

這個跟前一篇「調整你的 Visual Studio - Part.1」並不是同一個系列的,這一篇純粹在說程式碼度量(Code Metrics)這件事,相同主題的文章其實 91 哥就有寫過並且說明程式碼度量裡各種指標所代表的意義,

[Tool]Visual Studio 2010 - 程式碼度量 - In 91- 點部落

這篇除了會說明怎麼在 Visual Studio 裡使用程式碼度量之外,也將會介紹另一套同樣是作程式碼度量的擴充套件「Code Metrics Viewer 2013

 


MSDN - Visual Studio > 品質和診斷工具 > 測量 Managed 程式碼的複雜度和維護性 > 程式碼度量

引述開頭對於程式碼度量的定義:

程式碼度量資訊是一組軟體測量數據,可以讓開發人員更深入了解他們正在開發的程式碼。 只要能夠善用程式碼度量資訊,開發人員便可知道自己應該對哪些型別和/或方法進行修訂或是更徹底的測試。
此外,開發小組也可以找出潛在的風險、了解專案目前的狀態,並追蹤軟體開發的進度。

程式碼度量有五種指標,分別是:

  • 可維護性指標 Maintainbility Index
  • 循環複雜度 Cyclomatic Complexity
  • 繼承深度 Depth of Inheritance
  • 類別結合程度 Class Coupling
  • 程式碼行數 Lines of Code

這邊就直接引用「MSDN - 程式碼度量值」的內容

可維護性指數:
算出介於 0 到 100 之間的指數值,代表維護程式碼的相對難易程度。 值愈高表示可維護性愈佳。
色彩編碼分級可用來快速識別程式碼中的問題點。
綠色等級介於 20 和 100 之間,表示程式碼的可維護性良好。
黃色等級介於 10 和 19 之間,表示程式碼的可維護性適中。
紅色等級是介於 0 和 9 之間的等級,表示可維護性低。
(這個項目要越高越好)

循環複雜度:
測量程式碼在結構上的複雜程度。建立此複雜度的方式是計算程式流程中不同程式碼路徑的數目。
控制流程較為複雜的程式需要執行較多的測試,才能達到正確的程式碼涵蓋範圍,而且比較不容易維護。
(這個項目要越低越好)

繼承深度:
指出延伸到類別 (Class) 階層的根 (Root) 的類別定義數目。
階層愈深,可能愈難找出定義與/或重新定義特定方法和欄位的位置。
(這個項目越低越好)

類別結合程度:
透過參數、區域變數、傳回型別、方法呼叫、泛型或樣板具現化、基底型別、介面實作、外部型別上定義的欄位以及屬性修飾等,測量特殊類別的結合程度。
良好的軟體設計應指定聚結性 (Cohesion) 高但結合程度 (Coupling) 低的型別和方法。
結合程度高表示設計不易重複使用,因為這種設計包含對其他型別的許多相依性。

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

建議各位一定要看過 91 哥的說明:[Tool]Visual Studio 2010 - 程式碼度量 - In 91- 點部落

 

在 Visual Studio 2013 的幾個版本裡都有提供分析程式碼度量值的功能,不管是 Professional, Premium 或 Ultimate 都有提供,因為每一個開發人員都應該要關注並瞭解所開發專案的程式碼度量值,這並不是開發主管或團隊 Leader 才需要去關注與瞭解。

image
http://www.visualstudio.com/products/compare-visual-studio-products-vs

在 Visual Studio 裡,點選「分析 > 計算方案的程式碼度量」項目就可以開始執行程式碼度量值的分析,

image

程式碼度量的分析結果

image

也可以將結果匯出為 Excel 檔案,

image

 

Code Metric Viewer 2013

https://visualstudiogallery.msdn.microsoft.com/03de6710-4573-460c-aded-96588572dc19

部落格:https://codemetricsviewer.wordpress.com/

除了 for Visual Studio 2013 版本,也有對映支援 VS2010 與 VS2012 的版本,以下是程式碼度量分析的結果顯示視窗,基本上與 Visual Studio 所提供的「程式碼度量」功能是沒有什麼太大差別,不過在於各項指標項目的欄位裡,除了 Maintainability Index 欄位外,其餘的欄位也提供了燈號來做不同顏色的顯示,

image

這邊要特別注意的是,要安裝使用 Code Metrics Viewer 之前,必須要先安裝「Visual Studio Code Metrics Powertool for Visual Studio 2013」,安裝這個工具最主要的功能在於可以在命令列模式下使用指令碼做程式碼度量值的分析,而無需開啟 Visual Studio。

image

P.S. 安裝前請先關閉 Visual Studio

安裝好 Visual Studio Code Metrics Powertool 之後重新開啟 VS2013 並安裝 Code Metrics Viewer 2013,當全部都安裝完成後,請在「工具 > 選項」裡的 Code Metrics 項目裡去檢查 Code Metrics Power Tool Path 是否正確,

image

 

在「檢視 > 其他視窗」裡就可以找到 Code Metrics Viewer,

image

image

要分析程式碼度量值就按下「Analyze Solution」然後就等著看結果,另外我蠻喜歡「Goto Next」的功能,讓我們可以每按一次就逐步的去看每一項的分析結果。

Code Metrics Viewer 同樣也可以將資料匯出為 Excel,而且所匯出的 Excel 檔案內容是有階層性的,而且各欄位也會加上顏色標示,以識別該欄位的度量燈號。

image

 

把內建的 Code Metrics 與 Code Metrics Viewer 擺在一起來看看,

image

image

image

應該可以發覺到為什麼兩邊的數字會不一樣,這邊會建議就以內建的程式碼度量的是字為準,而我們可以去對 Code Metrics Viewer 的設定做調整,將下圖裡的選項給勾選起來,這樣 Code Metrics Viewer 就不會分析非方案內的程式碼,

image

重新分析的程式碼度量值結果

image

 


是不是要改用 Code Metrics Viewer 去取代原有的程式碼度量分析,我並沒有任何的建議,因為兩邊所做的事情以及產出的結果都是差不多的,所以你可以不用安裝 Code Metrics Viewer,不過我個人是比較屬意使用 Code Metrics Viewer,因為在各個指摽項目的欄位去顯示燈號(匯出的 Excel 裡各個欄位也會標示燈號顏色),由燈號的顏色就可以知道程式在度量分析後的品質狀況,不用刻意的去記住每個指標項目的各種數據意義。

 

相關連結

[Tool]Visual Studio 2010 - 程式碼度量 - In 91- 點部落

MSDN - Visual Studio > 品質和診斷工具 > 測量 Managed 程式碼的複雜度和維護性 > 程式碼度量

Code Metrics Viewer
https://visualstudiogallery.msdn.microsoft.com/03de6710-4573-460c-aded-96588572dc19
https://codemetricsviewer.wordpress.com/

A Developer's Life: Visual Studio Code Metrics PowerTool 10.0
http://devmatter.blogspot.tw/2011/01/visual-studio-code-metrics-powertool.html

 

以上

3 則留言:

  1. 網誌管理員已經移除這則留言。

    回覆刪除
  2. 今天找了一下 VS2015有出了
    Code Metrics Viewer
    https://visualstudiogallery.msdn.microsoft.com/ee46c9de-0890-4447-910d-d2b708de71bf

    回覆刪除
    回覆
    1. Visual Studio Code Metrics Powertool for Visual Studio 2015
      https://www.microsoft.com/en-us/download/confirmation.aspx?id=48213

      刪除

提醒

千萬不要使用 Google Talk (Hangouts) 或 Facebook 及時通訊與我聯繫、提問,因為會掉訊息甚至我是過了好幾天之後才發現到你曾經傳給我訊息過,請多多使用「詢問與建議」(在左邊,就在左邊),另外比較深入的問題討論,或是有牽涉到你實作程式碼的內容,不適合在留言板裡留言討論,請務必使用「詢問與建議」功能(可以夾帶檔案),謝謝。

最近的留言