使用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使用說明。