[Tool]程式碼風格分析-StyleCop
前言
在前一篇文章[C#]Code Convention Sample提到了訂定Code Convention的一個範例,但規定是死的,人是賤的,法律定下去,還是會有人貪圖便利而不遵守,程式的規範也是如此。
當開始有人不遵守規定,導致版本庫上的程式碼開始受到污染,若沒去處理它,就像破窗效應所提到的,窗會越破越多,洞會越來越多。可很多人以往的經驗,只要是程式碼可以動,沒有『看到』錯誤,就容易得過且過,睜一隻眼閉一隻眼。
這篇文章就是要介紹你好藥,介紹StyleCop這個工具,可以用來檢測系統的程式碼是否符合規範。當然這些規範只是定義出比較符合一般設計,比較好的規範,若應用上有哪些rule是不合用的,使用者可自行刪減這些rule。讓系統中不符合規定的程式碼,在一個動作下,無所遁形。
說明
StyleCop的rule,主要是針對C#的語言特性所定義出來的。
官網
StyleCop的載點:CodePlex,目前版本:4.6.3,包含了NuGet的套件
使用介紹
安裝完成後,可以直接在Visual Studio中使用。這邊一樣使用PetShop為例:
按下Run StyleCop後,若有違反rule,則會發現在錯誤清單中,多了對應的警告。
與原本Visual Studio一樣,double click該警告,就會移至該檔案該行的程式碼。描述上有說明rule的代碼,以及簡短的敘述這行code為什麼違反了規定。
當在警告上按下『顯示錯誤說明』時,則Visual Studio會自動幫我們打開StyleCop的說明文件。(預設路徑在C:\Program Files (x86)\StyleCop 4.6\Docs)以這個例子來說,Category類別,第32行的程式碼,在if判斷式裡面,沒有使用成對的大括號,而直接return null,違反了我們針對每一個if都要有成對的大括號,且每個大括號需獨立一行的rule。我們可以看到文件上較詳細的說明與範例:
這邊列上一張圖,是目前StyleCop檢測的所有rule:
-
Document Rules
-
Layout Rules
-
Maintainability Rules
-
Naming Rules
-
Ordering Rules
-
Readability 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自動訂正。
這邊支援的rule有限,有另一個SubMain這家公司出的工具:CodeIt.Right(需付費使用),也可以幫忙做自動檢測以及自動訂正跟半自動訂正的動作,算是更進階的品質檢測兼自動校正的工具,有興趣的朋友可以自行去官網參考。
by the way, SubMain這家公司的工具都挺不錯的,包括免費的GhostDoc也是他們家出的。
Reference
blog 與課程更新內容,請前往新站位置:http://tdd.best/