本文是一個靜態(tài)代碼分析工具的清單,共有26個工具。包括4個.NET工具、2個Ada工具、7個C++工具、4個Java工具、2個JavaScript工具、1個Opa工具、2個Packaging工具、3個Perl工具、1個Python工具。 1.NET.NET Compiler Platform(代號 Roslyn)Roslyn提供有著豐富的代碼分析API的開源C#和Visual Basic編譯器。它可以使用這些Visual Studio里的API生成代碼分析工具。
CodeIt.RightCodeIt.Right提供一個快速的自動的方法確保你的源代碼遵循預先定義的設計和風格準則。它通過以下方式使靜態(tài)代碼分析進入更高水平:即時代碼審查、及早發(fā)現(xiàn)問題、編碼原則、自動代碼審查、集成StyleCop檢查、報告。 FxCop一個實現(xiàn).NET靜態(tài)代碼分析的圖形用戶接口和命令行工具。 FxCop提供幾百種規(guī)則實現(xiàn)各種類型的分析。包括:設計、全球化、互操作性、可維護性、靈活性、命名、性能、可移植性、可靠性、安全性,利用率。FxCop的功能完全集成到Visual Studio2010的高級版和最終版中。
StyleCopStyleCop分析C#源代碼,強制執(zhí)行一系列風格和一致性規(guī)則??梢栽赩isual Studio內(nèi)部運行,也可以集成到MSBuild項目中。StyleCop還可以被集成到很多第三方開發(fā)工具中。 核心原則: StyleCop通過為C#代碼強制執(zhí)行一組通用風格規(guī)則來體現(xiàn)價值。StyleCop將繼續(xù)利用一個連續(xù)的帶有允許的最小規(guī)則配置的規(guī)則集。開發(fā)者可以實現(xiàn)他們自己的規(guī)則,只要他們愿意。 StyleCop擁有和Visual Studio、MSBuild,TFS等無縫集成的能力。開發(fā)者可以自由執(zhí)行自定義代碼,將StyleCop集成到其他開發(fā)和工具環(huán)境,如SDK文檔中所述。
2 AdaAdaControlAdaControl是一個免費的(授權(quán))工具,可以檢測Ada程序中使用的各種結(jié)構(gòu)。它的首要目標是控制風格和程序規(guī)則的正確使用,但是它也可以作為一個強大的工具搜索編程風格或設計模式的各種形式。搜索的元素范圍有非常簡單的,比如某種實體、聲明或語句的出現(xiàn),也有非常復雜的,比如驗證遵守了某種編程模式。
FluctuatFluctuat是一抽象解釋器,以數(shù)字編程(C或Ada)靜態(tài)分析器為基礎,由CEA-LIST的ME ASI(ModElling and Analysis of Systems in Interaction)實驗室在2001年開發(fā)。給出一組輸入和參數(shù),可能帶有不確定因素,它會考慮這個程序所有可能的行為,無論是真實的還是有限精度下,并描述這些不同的特性。 3 C,C++BLASTBLAST(Berkeley Lazy Abstraction Software verification Tool伯克利惰性抽象軟件驗證工具)是一個C語言靜態(tài)軟件驗證工具,它可以解決可達性問題,例如是否可以通過一個有效的執(zhí)行命令從入口點(主程序)到達給定的程序位置。 安全屬性的驗證可能降低到可達性,BLAST常常用于核查Linux驅(qū)動程序驗證項目。 可以在以下網(wǎng)站下載Linux系統(tǒng)的BLAST源代碼或二進制版本。
Cpplint這個項目繼續(xù)開發(fā)cpplint,它是一個C++風格檢查器,遵循Google的C++風格指南。提供的cpplint 為PYPI(Python Package Index)包,并添加了幾個功能和修復程序。它是google/styleguide的一個分支,希望未來可以合并在一起。
CoccinelleCoccinelle是一個程序匹配和轉(zhuǎn)換引擎。它提供語意修補程序以便在C代碼中指定期望的匹配和轉(zhuǎn)換。Coccinelle初始的目的是完成Linux的間接開發(fā)。這種開發(fā)包括客戶端代碼中所需要的改變,目的是響應庫應用程序接口變化。還可能包括一些修改,例如重命名一個函數(shù)、添加一個函數(shù)參數(shù),它的值以某種方式被上下文決定、重組數(shù)據(jù)結(jié)構(gòu)。除了間接開發(fā),Coccinelle還可以成功的尋找和修復系統(tǒng)代碼中的錯誤。
Frama-CFrama-C是一個平臺,致力于分析用C語言寫的源代碼。 Frama-C集成幾個分析技術(shù)到一個協(xié)作平臺中。其包含一組提供核心功能的內(nèi)核(例如一個C程序的抽象化語法樹)和一組被稱為插件的分析器。這些插件可以建立在平臺中其他插件的計算結(jié)果之上。 歸功于這個方法,F(xiàn)rama-C能提供一些復雜的工具,包括:
這些插件共享常見的語言,可以通過ASCL(ANSI/ISO C Specification Language)特性交換信息,還可以通過它們的APIs集合信息。
LintLint實用程序嘗試檢測命名為C程序文件的功能,可能是錯誤,也可能是不可移植,或者是浪費。同時它也執(zhí)行比C編譯器更嚴格的類型檢查。Lint實用程序運行C預處理器作為它的第一階段,帶有這個預處理器的標志“l(fā)int”,其被定義為允許某些有問題的代碼被lint更改或跳過。因此,對于所有被lint檢查的代碼來說這個標志應該被認為是一個預留字。
SparseSparse是一個源文件智能語法分析器:它不是編譯器(雖然它可以作為一個前端編譯器使用),也不是預處理器(雖然它包含部分預處理語句)。 這意味著它是一個小而簡單的庫。內(nèi)容太少是它容易使用的部分原因。它只有一個任務,就是為任意用戶創(chuàng)造語法分析樹從而進行進一步的分析。它不是分詞器,也不是那些通用的上下文無關的語法分析器。事實上,上下文(語意)就是我想說的不僅解決分組標記,而且還有_type_在組中的含義。 語法分析完成以下5個階段:完整文件標記化、預處理(可以導致另一個文件進入標記階段)、語法分析、延長性評估、內(nèi)聯(lián)函數(shù)擴展和簡化樹。
SplintSplint是一個輔助注釋輕量級靜態(tài)檢查工具,檢查C程序的安全漏洞和代碼錯誤。作為一個更好的lint,使用Splint毫不費力。如果投入額外的工作添加注釋到程序中,Splint可以執(zhí)行比任何標準lint能完成的更強的檢查。
4 JavaCheckstyleCheckstyle是一個開發(fā)工具,可以幫助程序員編寫Java代碼,并使其遵守編碼標準。它自動執(zhí)行檢查Java代碼的過程,使人們從這種無聊但是重要的任務中解放出來。對于那些想要執(zhí)行代碼標準的項目,這是非常理想的。 Checkstyle是高配置的,幾乎可以支持任何代碼標準。
FindBugsFindBugs是一個使用靜態(tài)分析尋找Java代碼中錯誤的程序。
KeY傳統(tǒng)的說,Key過去是一個Java程序驗證工具。雖然現(xiàn)在這仍然是它的主要應用之一,但是這些年來它已經(jīng)成長為一個擁有各種領域應用的程序驗證平臺。當前最重要的應用是:
我們一直致力于讓Key框架更容易被其他程序訪問。例如,在另一個工具的后臺可以很容易的將Key當成一個符號執(zhí)行引擎使用。正在進行的工作示例有Java編譯器的建造,是一個基于Key創(chuàng)建的符號執(zhí)行樹。
Soot最初,Soot開始于一個Java優(yōu)化框架,到目前為止,來自世界各地的研究人員和從業(yè)人員使用Soot分析、裝備、優(yōu)化和可視化Java和Android應用。它提供四種中間格式分析和轉(zhuǎn)化Java字節(jié)碼:
5 JavaScriptJSHintJSHint是一個社區(qū)驅(qū)動工具,它檢測JavaScript代碼中的錯誤和潛在問題。例如語法錯誤,隱性類型轉(zhuǎn)換錯誤,變量泄漏等等。值得注意的是,靜態(tài)代碼分析可以定位許多不同類型的錯誤,但是它不能檢測出你的程序是不是正確、快速或者有沒有內(nèi)存泄漏。應該結(jié)合像JSHint這樣的工具和單元功能測試一起審查代碼。 JSHint非常靈活,使用者可以輕松的在期望的代碼執(zhí)行環(huán)境中調(diào)整它。
JSLintJSLint本身是一個JavaScript程序,它可以尋找Javascript程序中的錯誤,是一個代碼質(zhì)量工具。 JSLint掃描JavaScript源文件,尋找錯誤,并返回描述問題的信息和其在程序中的大概位置。這些問題不一定是語法錯誤,雖然經(jīng)常是這樣。JSLint還查看一些風格習慣和結(jié)構(gòu)問題。它不能證明你的代碼是正確的,只是提供另一雙眼睛去幫助發(fā)現(xiàn)問題。 JSLint定義了一個專業(yè)的JavaScript子集,一個比ECMAScrip程序語言標準(管理JavaScript的文件)更嚴格的語言。它會駁回大多數(shù)合法程序,是一個更高的標準。
6 OpaOpa是一個用于網(wǎng)站開發(fā)的函數(shù)程序設計語言,編譯為JavaScript。Opa包括兩部分:第一,是一個來自Opa語言的編譯器,功能類似JavaScript的語法但是有很多增強功能。第二,是一個JavaScript庫,在運行時使用。 Opa包括它自己的靜態(tài)分析器。作為一種以網(wǎng)站應用開發(fā)為目的的語言,強大的靜態(tài)類型編譯器檢查高級網(wǎng)站數(shù)據(jù)類型的有效性,默認阻止許多漏洞,比如XSS攻擊和數(shù)據(jù)庫代碼注入。
7 PackagingLintianLintian是一個靜態(tài)分析工具,用于尋找Debian基礎包中的錯誤、違反規(guī)則和其他的問題。它可以處理二進制Debian包(.deb)、微型/安裝程序包(.udeb)、Debian源程序包(.dsc)和(有限程度的)變更文件。
RpmlintRpmlint是一個檢查Rpm包中常見錯誤的工具。經(jīng)常被用在上傳之前測試單個軟件包和指定文件或者檢查整個分布。默認情況下執(zhí)行所有可用的檢查,但是專項檢查可以使用命令行參數(shù)實現(xiàn)。 被檢查的文件可以是一個Rpm軟件包文件、一個指定文件或一個目錄。如果是目錄,遞歸搜索Rpm和指定文件進行檢查。特殊值是指在標準輸入中被讀取的結(jié)果被當作單個指定文件內(nèi)容處理。
8 PerlPerl::CriticPerl::Critic是一個可擴展的框架,對Perl源代碼創(chuàng)建和應用編碼標準。本質(zhì)上,它是一個靜態(tài)源代碼分析引擎。Perl::Critic分布著大量的Perl::Critic::Policy模塊,它們試圖執(zhí)行各種編碼規(guī)則。大多數(shù)規(guī)則模塊以Damian Conway的書《Perl Best Practices》為基礎。然而Perl::Critic不限于PBP這本書,甚至支持與Conway相矛盾的規(guī)則。你可以通過Perl::Critic接口啟用、禁用和自定義這些規(guī)則。你也可以創(chuàng)造適合自己的新規(guī)則模塊。
PerlTidyPerltidy是一個Perl腳本,它縮進和重新格式化Perl腳本,使它們更容易閱讀。如果你編寫或者花很多時間讀Perl腳本,你可能覺得它是有幫助的。 格式化可以使用命令行參數(shù)控制。 Perltidy可以輸出置標語言和源代碼。 除了重新格式化腳本,Perltidy可以很好的幫助追蹤下面這些錯誤,缺少或多余的括號、參數(shù)和方括號,因為它非常擅長定位錯誤。
PadrePadre是一個Perl集成開發(fā)環(huán)境,或換句話說是一個新手Perl程序員易于使用的文本編輯器,但是同時支持大型多語言和多技術(shù)項目。 我們的主要目的是創(chuàng)造一個無語倫比的環(huán)境來學習Perl,創(chuàng)建Perl腳本、模塊和分布,提供一個可擴展的插件系統(tǒng)以支持添加相關功能和語言,同時支持高級開發(fā)者在任何地方使用這個編輯器。 它也提供靜態(tài)代碼分析來檢查常見的初級錯誤。
9 PythonPylintPylint是一個Python源代碼分析器,它可以查找編程錯誤,幫助推行編碼標準并嗅探代碼異味(在Martin Fowler的重構(gòu)書中定義)。 Pylint有許多默認啟用的規(guī)則,因為方法太多所以不能把它們?nèi)繅褐圃谝粋€最小程序中。它是高度可配置的,處理程序可以在代碼中控制它。另外,還可以寫一些插件添加自己的檢查。
|
|
來自: 星星點點燈 > 《W 網(wǎng)摘》