[Tool]FxCop 透過 Command Line 使用自訂 RuleSet 分析

  • 4430
  • 0

[Tool]FxCop 透過 Command Line 使用自訂 RuleSet 分析

前言

之前已經介紹過 FxCop 的簡介,請參考: [Tool]靜態程式碼分析-FxCop

當一切都是透過 Visual Studio 或 FxCop IDE 來操作時,不會有什麼太大的問題。但是當今天需要使用 shell script ,如 daliy build 或 CI 來執行這樣的動作時,該如何透過 command line 來使用自訂的 RuleSet 進行分析呢?

例如:使用 Jenkins 來當 CI server ,在 build 完成時要執行靜態程式碼分析,就會碰到這樣的需求。如何在 Jenkins 上使用 FxCop 來分析,請見小風的文章:CI Server 12 - 整合FxCop報表

而 MSDN 上也有提到 FxCop command line 的 options ,請參考:Command-Line Tool Options

不過 MSDN 這一份文件的版本比較舊,沒提到如何用 command line 使用自訂規則集來分析,因此有這一篇文章來 memo 一下。

 

自訂 RuleSet 的方式

若是使用 Visual Studio Premium 以上的版本的話,可以直接在專案的屬性上,選擇 [程式碼分析] 的頁籤,接著先選一個規則集來當基底,點 [開啟] ,就可以看到這個規則集所勾選的分析規則。如下圖所示:

image

修改的畫面如下:

image

修改完成自訂的規則集後,按存檔,即會取得自訂的 RuleSet 檔案。這邊的例子是存成 Sample.RuleSet 。

接下來,若是在 Visual Studio 中,不管哪一個方案,希望使用這個 RuleSet ,只需要在規則集的部份,選 <瀏覽> ,再選擇該 Sample.RuleSet 即可。

image

 

RuleSet 的儲存格式

接下來使用記事本打開 Sample.RuleSet 來看一下,就可以發現 RuleSet 其實就是以 XML 的方式來儲存。如下圖所示:

image

也正因為是使用這樣的方式來儲存規則,所以多個 RuleSet 要做 merge 並不困難。

 

Command-Line Options for Custom RuleSet

原本在 MSDN 上找相關文件,都找不到 RuleSet 的相關說明,後來在 StackOverFlow 上找到一篇:FxCop and Code Analysis Rules ,以及 UPDATING YOUR CONTINUOUS INTEGRATION BUILD TO RUN FXCOP FROM VS2010 中,要用自訂規則集分析,只要:

  /ruleset:=YourCustom.ruleset

就可以了。

大家可以在自己的 shell script 或 CI server 上試試看,應該可以正常運作。

 

結論

定義出屬於自己團隊的規則集,相當重要。讓大家寫出來的程式,不管在風格上,在設計原則上,都可以有個基準。並透過工具與 CI 基礎建設來做自動化的分析,隨時版本庫上的 source code ,都可以看到其健康檢查報告,儘速修復與調整程式的壞味道,降低未來地雷爆炸的風險與成本。

有一些已經活很久的 legacy system ,一些 rule 可能也不太容易調整,但不代表 legacy system 就不需要使用 FxCop 進行分析,而是應該花一份時間,替 legacy system 量身訂做一個 lightweight 的 ruleset ,當未來 legacy system 在新增需求、修復問題、重構程式時,仍有一個標準可以參考。

 

可參考的規則集

目前常用的基底規則集:Joey RuleSet.zip


blog 與課程更新內容,請前往新站位置:http://tdd.best/