推薦這個blog:

Award


(ASP.NET 2010、2011、2012年)

其他資源

簡體中文blog

最新回應

前言
在前一篇文章
[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/

 


點部落-In Joey

↑ Grab this Headline Animator


關連文章

[測試]Code Coverage

[測試]單元測試工具的選擇

[C#]Code Convention Sample

[Security]Cross-Site Scripting(XSS)的簡介與預防

回應

  • # 關於 RSS 訂閱問題 by Ike

    你好,我使用 IE 及 "Google 閱讀器",在訂閱你的文章時,都會出現重覆的兩篇,不知道你瞭不瞭解問題的原因?

    不過單看 http://www.dotblogs.com.tw/hatelove/Rss.aspx 是只有一篇。

    2011/12/22 上午 10:04 | 回覆

  • # re: [Tool]程式碼風格分析-StyleCop by 91

    to Ike :

    抱歉,這個問題的原因應該是因為,我寫文章的時候 是用Windows Live Writer。

    而發佈的時候,在Windows Live Writer上,似乎沒法子自訂文章的頁面名稱。

    所以我都是等發佈完之後,在點部落的修改介面,將網頁檔名改成比較有意義一點的檔名。

    對一般RSS訂閱來說,因為是兩個不同的網址,所以就會當成兩篇不同的文章吧。

    造成您的困擾,感到很抱歉,我會再去了解一下,有沒有什麼方式來避免這樣的問題。

    謝謝您的訂閱跟建議 :)

     

    2011/12/22 上午 10:25 | 回覆

  • # re: [Tool]程式碼風格分析-StyleCop by Ike

    瞭解了,謝謝您的回覆

    2011/12/26 下午 01:34 | 回覆

  • # re: [Tool]程式碼風格分析-StyleCop by hectorlee369

    哇咧, 這不就見光死了. 以前只要回覆說:" yes, sir. 我有照著做." 專案就過關了. (冏)

    2011/12/28 下午 04:06 | 回覆

  • # re: [Tool]程式碼風格分析-StyleCop by 91

    to hectorlee369 :

    呵呵 是啊,不過相對的,Dev在coding,可以有個準則follow,也是很快樂的事。

    至少那堆繁瑣的限制,基本門檻就是通過StyleCop驗證,在review時,只要從意義上去看命名即可。其他的都可以不用管。也是一件輕鬆的事。

    Dev應該不怕rule限制,而是怕沒訂rule,要結案或要交付時,才又冒出一堆『Common Sense』的毛,那才讓人嘔啊~~
     

    2011/12/28 下午 04:23 | 回覆

  • # re: [Tool]程式碼風格分析-StyleCop by 阿青

    to 91大
    我安裝了以後
    再打開express 2010然後再像你的圖那邊按右鍵
    沒有看到Run styleCop選項
    以在網路上爬完文
    也沒看到解答
    不知道您有沒有遇過
    謝謝

    2012/2/1 下午 09:37 | 回覆

  • # re: [Tool]程式碼風格分析-StyleCop by 91

    to 阿青 :

    我不確定express版可不可以用唷...

    因為我用的都是professional以上的 Orz
     

    2012/2/2 下午 12:29 | 回覆

登入後使用進階評論

Please add 7 and 6 and type the answer here: