跳轉到內容

軟體工程/工具/靜態程式碼分析簡介

來自華夏公益教科書

這是一個靜態程式碼分析工具列表。

歷史產品

[編輯 | 編輯原始碼]
  • Lint — C 程式碼的原始靜態程式碼分析器。

開源或非商業產品

[編輯 | 編輯原始碼]

多語言

[編輯 | 編輯原始碼]
  • PMD Copy/Paste Detector (CPD) — PMD 的重複程式碼檢測,適用於 (例如) Java、JSP、C、C++ 和 PHP 程式碼。
  • Sonar — 一個持續檢查引擎,用於管理技術債務(單元測試、複雜性、重複、設計、註釋、編碼標準和潛在問題)。支援的語言包括 Java、Flex、PHP、PL/SQL、Cobol 和 Visual Basic 6。
  • Yasca — Yet Another Source Code Analyzer,一個基於外掛的框架,用於掃描任意檔案型別,幷包含用於掃描 C/C++、Java、JavaScript、ASP、PHP、HTML/CSS、ColdFusion、COBOL 和其他檔案型別的外掛。它與其他掃描器整合,包括 FindBugs、JLint、PMD 和 Pixy。

.NET (C#, VB.NET 和所有相容 .NET 的語言)

[編輯 | 編輯原始碼]
  • FxCop — 免費的 Microsoft .NET 程式靜態分析,編譯為 CIL。獨立版本和整合在一些 Microsoft Visual Studio 版本中。來自 Microsoft。
  • Gendarme — 由 Mono 專案建立的開源(MIT 許可證)等效於 FxCop。可擴充套件的基於規則的工具,用於查詢 .NET 應用程式和庫中的問題,特別是那些包含 ECMA CIL 格式程式碼的應用程式和庫。
  • StyleCop — 分析 C# 原始碼以強制執行一組樣式和一致性規則。它可以在 Microsoft Visual Studio 內部執行,也可以整合到 MSBuild 專案中。從 Microsoft 免費下載。

ActionScript

[編輯 | 編輯原始碼]
  • Apparat — 一個語言操作和最佳化框架,包含用於 ActionScript 的中間表示。
  • BLAST (Berkeley Lazy Abstraction Software verification Tool) — 基於惰性抽象的 C 程式軟體模型檢查器。
  • Clang — 包含靜態分析器的編譯器。
  • Frama-C — 用於 C 的靜態分析框架。
  • Lint — C 的原始靜態程式碼分析器。
  • Sparse — 一款旨在查詢 Linux 核心中錯誤的工具。
  • Splint — Lint 的開源演進版本(用於 C)。
  • cppcheck — 開源工具,用於檢查多種型別的錯誤,包括 STL 的使用。
  • Checkstyle — 除了靜態程式碼分析,還可以用來顯示違反配置的編碼標準。
  • FindBugs — 來自馬里蘭大學的 Java 開源靜態位元組碼分析器(基於 Jakarta BCEL)。
  • Hammurapi —(僅限非商業用途免費)多功能程式碼審查解決方案。
  • PMD — 一個基於靜態規則集的 Java 原始碼分析器,用於識別潛在問題。
  • Soot — 一個語言操作和最佳化框架,包含用於 Java 的中間語言。
  • Squale — 一個管理軟體質量的平臺(也適用於其他語言,但使用商業分析工具)。

JavaScript

[編輯 | 編輯原始碼]
  • Closure Compiler — JavaScript 最佳化器,它會重寫 JavaScript 程式碼以使其更快、更緊湊。它還會檢查你對原生 JavaScript 函式的使用情況。
  • JSLint — JavaScript 語法檢查器和驗證器。

Objective-C

[編輯 | 編輯原始碼]
  • Clang — 免費的 Clang 專案包含一個靜態分析器。從 3.2 版本開始,該分析器包含在 Xcode 中。[1]
  • Oclint — Oclint 是一個靜態程式碼分析工具,透過檢查 C、C++ 和 Objective-C 程式碼來提高質量和減少缺陷。[2]
  • Faux Pas — Faux Pas 檢查你的 iOS 或 Mac 應用程式的 Xcode 專案,並警告可能的錯誤,以及可維護性和樣式問題。[3]
  • Facebook Infer — Facebook 的開源工具,用於檢測 Android 和 iOS 應用程式中的錯誤。[4]
  • Sonar for Objective C — 用於 xcode 的開源 Sonar 外掛。[5]
  • Sonar for Objective C(商業版本) — 用於 xcode 的付費 Sonar 外掛。[6]

商業產品

[編輯 | 編輯原始碼]

多語言

[編輯 | 編輯原始碼]
  • Axivion Bauhaus Suite — 用於 C、C++、C#、Java 和 Ada 程式碼的工具,包含各種分析,例如架構檢查、介面分析和克隆檢測。
  • Black Duck Suite — 分析軟體原始碼和二進位制檔案的組成,搜尋可重用程式碼,管理開源和第三方程式碼審批,履行與混合來原始碼相關的法律義務,並監控相關安全漏洞。
  • CAST Application Intelligence Platform — 詳細的、針對特定受眾的儀表板,用於衡量質量和生產力。30 多種語言,SAP、Oracle、PeopleSoft、Siebel、.NET、Java、C/C++、Struts、Spring、Hibernate 和所有主要資料庫。
  • Checkmarx CxSuite — 原始碼分析工具,用於識別以下語言中的應用程式安全漏洞:Java、C#/.NET、PHP、C、C++、Visual Basic 6.0、VB.NET、APEX、Ruby、Javascript、ASP、Perl、Android、Objective C、PL/SQL、HTML5、Python 和 Groovy。
  • Coverity 靜態分析(以前稱為 Coverity Prevent) — 識別 C、C++、C# 和 Java 程式碼中的安全漏洞和程式碼缺陷。補充 Coverity 動態程式碼分析和架構分析。
  • DMS 軟體重構工具包 — 支援對 C、C++、C#、Java、COBOL、PHP、VisualBasic 和許多其他語言的自定義分析。還提供用於克隆分析、死程式碼分析和樣式檢查的 COTS 工具。
  • Compuware DevEnterprise — 對 COBOL、PL/I、JCL、CICS、DB2、IMS 等進行分析。
  • Fortify — 幫助開發人員識別 C/C++、.NET、Java、JSP、ASP.NET、ColdFusion、“經典” ASP、PHP、VB6、VBScript、JavaScript、PL/SQL、T-SQL、python 和 COBOL 以及配置檔案中的軟體安全漏洞。
  • GrammaTech CodeSonar — 分析 C、C++。
  • Imagix 4D — 識別變數使用、任務互動和併發性方面的問題,尤其是在嵌入式應用程式中,作為理解、改進和記錄 C、C++ 和 Java 軟體的整體解決方案的一部分。
  • 英特爾 - 英特爾並行工作室 XE:包含**靜態安全分析**(SSA) 功能,支援 C/C++ 和 Fortran
  • JustCode — 用於 JavaScript、C#、Visual Basic.NET 和 ASP.NET 的程式碼分析和重構生產力工具
  • Klocwork Insight — 提供安全漏洞和缺陷檢測,以及針對 C、C++、C# 和 Java 的架構和構建過構建趨勢分析。
  • Kiuwan – 用於靜態程式碼分析、缺陷檢測、應用程式安全和 IT 風險管理的端到端軟體分析平臺,具有增強的生命週期和應用程式治理功能。它支援 25 種以上的語言,包括 Objective-C、Java、JSP、JavaScript、PHP、C、C++、ABAP、COBOL、JCL、C#、PL/SQL、Transact-SQL、SQL、Visual Basic、Visual Basic .NET、Android(作業系統)。
  • Lattix, Inc. LDM — 用於 Ada、C/C++、Java、.NET 軟體系統的架構和依賴關係分析工具。
  • LDRA Testbed — 一套用於 C、C++、Ada83、Ada95 和組合語言(Intel、Freescale、Texas Instruments)的軟體分析和測試工具。
  • Micro Focus(以前稱為 Relativity Technologies)現代化工作臺 — 包含用於 COBOL(包括 IBM、Unisys、MF、ICL、Tandem 的多個變體)、PL/I、Natural(包括 ADABAS)、Java、Visual Basic、RPG、C 和 C++ 以及其他遺留語言的解析器;可擴充套件的 SDK 以支援第三方解析器。支援自動指標(包括功能點)、業務規則挖掘、元件化和 SOA 分析。豐富的即席繪圖、AST 搜尋和報告)
  • Ounce Labs(從 2010 年起為 IBM Rational Appscan Source) — 自動化的原始碼分析,使組織能夠識別和消除 Java、JSP、C/C++、C#、ASP.NET 和 VB.Net 等語言中的軟體安全漏洞。
  • Parasoft — 使用 .TEST、WSDL、XML、HTML、CSS、JavaScript、VBScript/ASP 和配置檔案來分析 Java(Jtest)、JSP、C、C++(C++test)、.NET(C#、ASP.NET、VB.NET 等)以進行安全[7]、合規性[8] 和缺陷預防。
  • Polyspace — 使用抽象解釋來檢測和證明 C、C++ 和 Ada 原始碼中某些執行時錯誤的缺失
  • Rational Asset Analyzer(IBM);支援 COBOL(多個變體)、PL/I、Java
  • Rational Software Analyzer — 支援 Java、C/C++(以及透過擴充套件提供的其他語言)
  • Security Reviewer 1500 多條規則,每條規則最多有 12 種變體,針對每種語言進行專門設計,涵蓋數千種 API 和框架。支援的語言:ABAP、Android 移動裝置、ASP、ASPX、C、C++、CSS、Objective-C、COBOL、C#、Forms、HTML5、Java-JSP-JSF、JavaScript、PHP、Ruby、Python、11 種 SQL 方言(包括 PL/SQL 和 T-SQL 以及 TeradataSQL)、VB.net、Visual Basic 6、Windows Mobile、XML、XPath。NIST 和 CVE 檢查。OWASP、CWE 標準。200 多項質量指標。最佳實踐。SQALE 儀表板。
  • SofCheck Inspector — 提供針對 Java 和 Ada 的邏輯錯誤、競爭條件和冗餘程式碼的靜態檢測。提供從程式碼本身自動提取前置/後置條件的功能。
  • SourceMeter — 一個獨立於平臺的命令列靜態原始碼分析器,用於 Java、C/C++、RPG IV(AS/400)和 Python[9]
  • Sotoarc/Sotograph — 用於 Java、C#、C 和 C++ 的架構和質量深入分析和監控
  • Syhunt Sandcat — 檢測 PHP、Classic ASP 和 ASP.NET Web 應用程式中的安全漏洞。
  • Understand — 分析 C、C++、Java、Ada、Fortran、Jovial、Delphi、VHDL、HTML、CSS、PHP 和 JavaScript — 原始碼的反向工程、程式碼導航和度量工具。
  • Veracode — 在應用程式二進位制檔案和位元組碼中查詢安全漏洞,無需原始碼。支援的語言包括 C、C++、.NET(C#、C++/CLI、VB.NET、ASP.NET)、Java、JSP、ColdFusion 和 PHP。
  • Visual Studio Team System — 分析 C++、C# 原始碼。僅在團隊套件和開發版中可用。

涵蓋多種 .NET 語言的產品。

  • CodeIt.Right — 將靜態程式碼分析和自動重構到最佳實踐相結合,使程式碼錯誤和違規自動更正。同時支援 C# 和 VB.NET。
  • CodeRush — Visual Studio 的外掛,它解決了流行 IDE 中的許多缺點。包括透過使用靜態程式碼分析來提醒使用者違反最佳實踐。
  • JustCode — Visual Studio 2005/2008/2010 的附加元件,用於 C#、VB.NET、ASP.NET、XAML、JavaScript、HTML 和多語言解決方案的即時、全解決方案程式碼分析。
  • NDepend — 透過分析和視覺化程式碼依賴關係、定義設計規則、進行影響分析以及比較程式碼的不同版本來簡化複雜 .NET 程式碼庫的管理。整合到 Visual Studio 中。
  • ReSharper — IntelliJ IDEA 建立者為 Visual Studio 2003/2005/2008/2010 提供的附加元件,它也為 C# 提供靜態程式碼分析。
  • Kalistick — 來自雲端的混合:靜態程式碼分析與最佳實踐提示和敏捷團隊協作工具
  • Ada-ASSURED — 提供編碼風格檢查、標準執行和格式化功能的工具。
  • AdaCore CodePeer — 用於 Ada 程式的自動化程式碼審查和錯誤查詢工具,它使用控制流、資料流和其他高階靜態分析技術。
  • LDRA Testbed — 用於 Ada83/95 的軟體分析和測試工具套件。
  • SofCheck Inspector — 提供針對 Ada 的邏輯錯誤、競爭條件和冗餘程式碼的靜態檢測。提供從程式碼本身自動提取前置/後置條件的功能。

C / C++

[edit | edit source]
  • CppDepend — 透過分析和視覺化程式碼依賴關係、定義設計規則、進行影響分析以及比較程式碼的不同版本來簡化複雜 C/C++ 程式碼庫的管理。整合到 Visual Studio 中。
  • FlexeLint — PC-Lint 的跨平臺版本。
  • Green Hills Software DoubleCheck — 用於 C/C++ 的軟體分析工具。
  • 英特爾 - 英特爾並行工作室 XE:包含**靜態安全分析**(SSA) 功能
  • LDRA Testbed — 用於 C/C++ 的軟體分析和測試工具套件。
  • Monoidics INFER — 基於分離邏輯的 C/C++ 安全工具。
  • PC-Lint — 用於 C/C++ 的軟體分析工具。
  • PVS-Studio — 用於 C、C++、C++11、C++/CX 的軟體分析工具。
  • QA-C(和 QA-C++) — 對 C/C++ 進行深度靜態分析,以確保質量和指南執行。
  • Red Lizard 的 Goanna — 在 Eclipse 和 Visual Studio 中用於 C/C++ 的靜態分析。
  • SourceMeter — 一個獨立於平臺的命令列靜態原始碼分析器,用於 Java、C/C++、RPG IV(AS/400)和 Python。
  • JArchitect — 透過分析和視覺化程式碼依賴關係、定義設計規則、進行影響分析以及比較程式碼的不同版本來簡化複雜 Java 程式碼庫的管理。
  • Jtest — Parasoft 提供的測試和靜態程式碼分析產品。
  • LDRA Testbed — 用於 Java 的軟體分析和測試工具套件。
  • Oversecured — 用於 Android 應用程式的基於雲的靜態漏洞掃描器。包含 90 多個漏洞類別。
  • SemmleCode — 用於靜態程式分析的面向物件的程式碼查詢。
  • SonarJ — 監控程式碼與預期架構的一致性,還會計算各種軟體指標。
  • Kalistick — 一個基於雲的平臺,用於為具有 DevOps 精神的敏捷團隊管理和最佳化程式碼質量
  • SourceMeter — 一個獨立於平臺的命令列靜態原始碼分析器,用於 Java、C/C++、RPG IV(AS/400)和 Python。

形式化方法工具

[編輯 | 編輯原始碼]

使用形式化方法進行靜態分析的工具(例如,使用靜態程式斷言)

  • ESC/Java 和 ESC/Java2 — 基於 Java 建模語言,這是 Java 的增強版本。
  • Polyspace — 使用抽象解釋(一種基於形式化方法的技術[10]) 來檢測和證明 C、C++ 和 Ada 原始碼中某些執行時錯誤的缺失。
  • SofCheck Inspector — 靜態確定並記錄 Java 方法的前置條件和後置條件;靜態檢查所有呼叫位置的前置條件;也支援 Ada。
  • SPARK 工具集,包括 SPARK Examiner — 基於 SPARK 程式語言,Ada 的一個子集。

參考資料

[編輯 | 編輯原始碼]
  1. "Xcode 中的靜態分析". Apple. 檢索於 2009-09-03.
  2. "靜態分析". Oclint. 檢索於 2015-09-06.
  3. "靜態分析". Faux Pas. 檢索於 2015-09-06.
  4. "靜態分析". Facebook. 檢索於 2015-09-06.
  5. "Sonar 中的靜態分析". Boto. 檢索於 2015-09-06.
  6. "靜態分析". Boto. 檢索於 2015-09-06.
  7. Parasoft 應用程式安全解決方案
  8. Parasoft 合規解決方案
  9. SourceMeter
  10. Cousot, Patrick (2007). "形式化方法中抽象解釋的作用". IEEE 軟體工程和形式化方法國際會議. 檢索於 2010-11-08.
[編輯 | 編輯原始碼]
華夏公益教科書