使用StyleCop進行程式碼審查

工欲善其事,必先利其器,上篇簡單介紹了怎樣使用Astyle進行程式碼格式化,使編寫的程式碼具有一致的風格。今天簡單介紹下怎樣使用StyleCop對原始碼進行審查,看編寫的程式碼是否遵循設計規範、.Net約定和一些貫用法等。保證程式碼的一致性,可讀性等等。

在此之前,先簡單介紹下FxCop(起初只是微軟內部使用的工具),一個分析託管程式集,檢測程式碼的總體正確性的工具,告訴使用者哪些地方不符合設計規範。他使用的評估規則已經發展了多年,凝聚了頂尖.Net框架開發人員的知識和技術。但是FxCop是基於託管程式碼分析的,即編譯後的程式集。今天我們介紹的StyleCop同樣是用來檢查程式碼是否符合設計規範的,它是基於原始碼驗證的,僅支援C#語言,就是在開發期間進行程式碼驗證的工具,相信在日常開發中,會幫助到大家,在使用工具的同時,逐漸改善和提高大家的編碼規範和意識,另外,相關內容推薦大家讀下《.Net設計規範-.Net約定、貫用法與模式》這本書。好了,入題:

首先,還是先下載最新版的StyleCop.

下載地址:http://stylecop.codeplex.com/

當前最新版本是StyleCop-4.7.37.0.msi,版本4.7,下載完成後,開始安裝,安裝過程非常簡單,這裡就不上圖了。安裝完成後,好像沒什麼反應,在開始選單也不會出現相關選單。沒關係,現在開啟Visual Studio,我以Visual Studio2010為例,見下圖:

在專案選單上會出現StyleCop相關選單。

點選“Run StyleCop”,呵,警告一大堆,見下圖:

StyleCop已經把不符合規範的相關警告全部列出,並且已經定位到行和列,雙擊任一條專案即可定位到問題點。

也可以基於單個檔案進行檢查,只要在當前內碼表右鍵點選“Run StyleCop”即可,見下圖:

其中檢驗的規則可在專案名稱的右鍵選單“StyleCop Settings”中設定,見下圖,使用中發現對中文支援的不是很好。其中一些不適用的校驗規則可以不勾選即可。

下面主要對一些常見的警告簡單說明:

SA1633 : CSharp.Documentation : The file has no header, the header Xml is invalid, or the header is not located at the top of the file.

程式碼不包含檔案頭說明,格式如下。

//-----------------------------------------------------------------------

// <copyright file="Widget.cs" company="Sprocket Enterprises">

// Copyright (c) Sprocket Enterprises. All rights reserved.

// </copyright>

// <author>John Doe</author>

//-----------------------------------------------------------------------

SA1507 : CSharp.Layout : The code must not contain multiple blank lines in a row.

程式碼部分存在多個空格

SA1600 : CSharp.Documentation : The method must have a documentation header.

方法必須要頭部說明,只要在方法前鍵入3個斜槓,IDE自動會根據該方法生成相關頭文件說明。

SA1400 : CSharp.Maintainability : The class must have an access modifier.

類必須要有一個訪問修飾符,如:public、private等。

SA1513 : CSharp.Layout : Statements or elements wrapped in curly brackets must be followed by a blank line.

語句之間要有空行。

SA1202 : CSharp.Ordering : All private methods must be placed after all public methods.

私有方法要放在公有方法子後。

SA1650 : CSharp.Documentation : The documentation text within the summary tag contains incorrectly spelled words: 異常測試

這個是對中文支援的不夠好。拼寫檢查識別不到。

其他還有常見的變數首字母小,常量首字母大寫,等等常規檢查,其它規則請參見StyleCop使用說明。