[Tool]程式碼風格分析-StyleCop

  • 17395
  • 0

[Tool]程式碼風格分析-StyleCop

前言
在前一篇文章
[C#]Code Convention Sample提到了訂定Code Convention的一個範例,但規定是死的,人是賤的,法律定下去,還是會有人貪圖便利而不遵守,程式的規範也是如此。

當開始有人不遵守規定,導致版本庫上的程式碼開始受到污染,若沒去處理它,就像
破窗效應所提到的,窗會越破越多,洞會越來越多。可很多人以往的經驗,只要是程式碼可以動,沒有『看到』錯誤,就容易得過且過,睜一隻眼閉一隻眼。

這篇文章就是要介紹你好藥,介紹StyleCop這個工具,可以用來檢測系統的程式碼是否符合規範。當然這些規範只是定義出比較符合一般設計,比較好的規範,若應用上有哪些rule是不合用的,使用者可自行刪減這些rule。讓系統中不符合規定的程式碼,在一個動作下,無所遁形。

說明
StyleCop的rule,主要是針對C#的語言特性所定義出來的。

官網
StyleCop的載點:
CodePlex,目前版本:4.6.3,包含了NuGet的套件

使用介紹
安裝完成後,可以直接在Visual Studio中使用。這邊一樣使用PetShop為例:

step1

按下Run StyleCop後,若有違反rule,則會發現在錯誤清單中,多了對應的警告。
sample1

與原本Visual Studio一樣,double click該警告,就會移至該檔案該行的程式碼。描述上有說明rule的代碼,以及簡短的敘述這行code為什麼違反了規定。

當在警告上按下『顯示錯誤說明』時,則Visual Studio會自動幫我們打開StyleCop的說明文件。(預設路徑在C:\Program Files (x86)\StyleCop 4.6\Docs)以這個例子來說,Category類別,第32行的程式碼,在if判斷式裡面,沒有使用成對的大括號,而直接return null,違反了我們針對每一個if都要有成對的大括號,且每個大括號需獨立一行的rule。我們可以看到文件上較詳細的說明與範例:

顯示錯誤說明

sample1_說明與建議

這邊列上一張圖,是目前StyleCop檢測的所有rule:

  1. Document Rules
    documentRules
  2. Layout Rules
    layoutRuels
  3. Maintainability Rules
    Maintainability Rules
  4. Naming Rules
    NamingRules
  5. Ordering Rules
    Ordering Rules
  6. Readability Rules
    Readability Rules
  7. Spacing Rules
    Spacing Rules


如果針對已存在的系統進行檢測,專案中有一些domain term已經當作prefix使用,想要避免匈牙利命名法檢查,可以透過設定白名單來避免程式碼需大改:
匈牙利例外名單

另外,當自訂出較符合團隊的規則集後,該設定檔可以在不同的專案之間共享,其設定檔預設路徑在:
C:\Program Files (x86)\StyleCop 4.6\Settings.StyleCop

結論
透過StyleCop的輔助,只要一個按鈕的動作,就可以幫助我們抓出不符合規範的程式碼。讓我們再進行code review的時候,有更多的時間,可以更專注在重點事物上,而不是一般的code convention上。甚至透過CI的簽入原則,可以讓版本庫的程式碼避免受到污染,只有通過原則檢查的程式碼可以簽入。也可以在CI的自動建置報表上,看到相關的檢測數據。

補充工具
建議可以到Visual Studio Gallery上面,下載
StyleCopFixer這個Addin,(只支援VS2010),他可以快速地幫助我們修復一些簡單的規則,清單如下:

  • SA1001
  • SA1516
  • SA1513
  • SA1508
  • SA1507
  • SA1505
  • SA1309
  • SA1210
  • SA1202
  • SA1200
  • SA1106
  • SA1101
  • SA1025
  • SA1013
  • SA1012
  • SA1009
  • SA1008
  • SA1633
  • SA1003
  • SA1005
  • SA1600 (for properties only)
  • SA1121

安裝完使用方式相當簡單,在警告上面按滑鼠右鍵,就會有Fix It可以選,選了後StyleCopFixer自動訂正。
fixit

這邊支援的rule有限,有另一個SubMain這家公司出的工具:CodeIt.Right(需付費使用),也可以幫忙做自動檢測以及自動訂正跟半自動訂正的動作,算是更進階的品質檢測兼自動校正的工具,有興趣的朋友可以自行去官網參考。

by the way, SubMain這家公司的工具都挺不錯的,包括免費的
GhostDoc也是他們家出的。

Reference

  1. http://stylecop.codeplex.com/

 


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