請問c# 有什麼推薦的代碼靜態分析工具?
類似python的pycheck 或者javascript的 jslint
以前有FxCop,不過FxCop已經不更新了,跟不上C#發展的步伐了。
現在在Visual Studio里有Code Analysis,參考MSDN:Analyzing Managed Code Quality by Using Code Analysis然後NDepend也是個很有趣的工具:Static Analysis C#
這兒還有個列表:Static Analysis Tooling for C# and .NET, NDepend in Depth問題中提到的這兩種分析工具不太了解。選型前可以明確幾個問題:
你希望在什麼時機執行分析?在VS中編碼過程中實時得出分析結果,還是編譯過程中或者手工觸發分析過程,還是持續構建過程中分析?
是否需要自己擴展分析規則?
實時分析可以使用Roslyn Syntactic/Symbol Api自己寫分析腳本和自動更正規則
可以參考使用 Roslyn 編寫 API 的實時代碼分析器和C#-添加代碼修復你的羅斯林分析器
手工觸發方式FxCopy/StyleCop都支持,當然前者也能注入到Mbuild過程
持續構建裡面可以用SonarQube,支持Roslyn/StyleCop腳本,規則很豐富,支持TFS 2015 Update2 以後的 build過程。自動生成分析報告,可以作為Check In Gate
商業的推薦Coverity,資源泄漏和多線程問題以及OWASP TOP 10都能檢測到。開源的推薦FXcop,誤報率就高了。
推薦Coverity,技術源自於斯坦福大學的最新一代的源代碼靜態分析工具,Coverity能夠快速檢測並定位源代碼中可能導致產品崩潰、未知行為、安全缺口或者災難性故障的軟體缺陷。具有缺陷分析種類多、分析精度高和誤報率低的特點,是業界誤報率最低的源代碼分析工具(小於10%)。Coverity Development Platform目前包含以下功能:
代碼質量缺陷與安全漏洞檢測:
Coverity 的智能靜態分析引擎能夠幫助開發者在工作流程中找出質量缺陷和安全漏洞,提供精確、可行的修復指導,在開發過程中識別關鍵質量缺陷,降低風險並減少項目成本。通過深刻理解行為和問題危急程度, Coverity SAVE 可以智能測試,精確找出那些潛在的難以發現的能夠引發崩潰的問題,包括C/C++, Java (JSP)和 C #(ASP) ,Objective-C, Android,Javascript, Python, PHP代碼庫。
能夠檢測出的質量缺陷類型示例:
? 空指針引用,資源泄漏,死鎖,內存崩潰,安全缺陷/緩衝區溢出,API使用錯誤,未初始化變數,類層次結構不一致,性能效率低下,安全最佳實踐違反,代碼維護問題 ,程序掛起,錯誤處理問題,並行數據訪問違規,競態條件,錯誤表達,控制數據流問題,內存非法訪問,不安全數據處理。
代碼安全與Web 應用安全審計:
Coverity 的安全審計引擎能夠通過識別JSP和ASP網站中可能導致安全漏洞的關鍵缺陷,降低風險和項目成本。Coverity Static Analysis Verification Engine 能夠智能檢測出C/C++應用和Java web應用中的缺陷,包括緩存區溢出、整數溢出、格式字元串錯誤、SQL注入、系統命令行注入、資源泄露、目錄遍歷和跨站腳本攻擊 (XSS)等問題,全面覆蓋OWASP Top10。
以往的安全工具在開發中失敗的主要原因是高誤報率或結果不正確。Coverity設計的新引擎,能夠解決現代應用的複雜問題,並獲得更為精準的結果。
適用於web應用安全的Coverity SAVE 分析創新包括:
?企業框架分析器: 深刻理解現代web 應用,增加源代碼分析包括依賴性注入,進入點以及MVC範例
?白盒模糊測試 自動驗證日常數據清理慣例,對不可信數據進行充分清理,確保使用環境正確
客戶狀況:Coverity是第一個能夠快速、準確分析當今的大規模(百萬行、千萬行甚至上億行)、高複雜度代碼的工具,目前已經檢測了超過50億行專有代碼和開源代碼。全球有超過1100個像華為,中興,聯想,百度,三星,騰訊,Apple,Honeywell, NEC, BAE Systems, Juniper Networks, BMC Software, Samsung, France Telecom, Sega, 和 Schneider Electric這樣的品牌和企業依靠Coverity確保其產品和服務的質量與安全。
如果想了解更多信息的話,直接聯繫我。
resharper算嗎
vs自帶的不好嗎
style cop算嗎
目前只知道Fxcopcmd,但必須編譯過的,沒法做源碼檢查。
Msbuild 有個RunCodeAnalysis開關自動調用檢查。
希望樓下大神推薦出工具。。
推薦閱讀:
※MFC 作為 Windows 原生的 GUI 庫還可以在項目中用嗎?
※再議Unity優化
※如何看待 .NET Native,真能達到 C++ 的性能、C# 的生產效率嗎?
※C# 中為什麼List<List<T>> 不能轉換為 IList<IList<T>> ?
※為什麼 C# 的泛型約束不能約束靜態方法?