C++ 代码覆盖率分析工具
參考:https://hxysayhi.com/posts/7af8893f/
本文對C++相關的代碼覆蓋率分析工具進行調研,作出簡要的總結
內容提要
Squish Coco (收費)
OpenCppConverage (開源)
Squish Coco
簡介
quish Coco是Tcl,QML,C#和C / C ++程序(包括SystemC程序)的完整代碼覆蓋工具鏈。它運行在macOS,Linux?和Microsoft?Windows上。
Squish Coco分析應用程序運行的方式,例如 可作為測試套件的一部分進行使用,然后可以利用其結果使測試更有效和完整。
功能
Squish Coco在一下方面的幫助尤為突出:
找到未經測試的代碼部分。
找到可以消除的冗余測試。Squish Coco可以識別測試涵蓋源了代碼的哪些部分。它可以檢測新測試是否涵蓋了現有測試未涵蓋的源代碼。
通過顯示從未執行過的代碼來查找死代碼。
計算最佳測試執行順序,以便最大化每次運行的測試覆蓋率。這對手動測試特別有用。
分析應用程序的兩個單獨版本并比較差異。這使得可以查看哪些測試受到源代碼修改的影響,并且還可以測量補丁或修補程序的測試覆蓋率。
衡量程序和測試的執行時間。
Squish Coco可用于測試的每個階段和所有測試方法(單元測試,自動測試,手動白盒測試,黑盒測試等)。 測試套件可以分為各個獨立部分,Squish Coco可以將多個執行報告合并為一個統一的報告。
組件
Squish Coco包的主要組件是兩個獨立的工具和一個插件:
CoverageScanner: 一個分析和檢測Tcl,QML,C#和C/C++應用程序的程序。
CoverageBrowser - 用于顯示和管理覆蓋率分析結果的程序。
Microsoft?VisualStudio? Add-In - 一個可選插件,用于為Microsoft?VisualStudio?下開發的C#或C ++項目配置代碼覆蓋率。
此外還有幾個輔助程序用于報告生成,覆蓋數據操作和許可證管理。
CoverageScanner – Instrumentation as part of the build process
CoverageScanner可以檢測編譯器看到的源代碼,而無需觸及原始代碼。 它生成一個檢測的可執行文件,共享庫或插件。 檢測會跟蹤運行可執行文件或使用庫或插件時執行的代碼。 能夠測算每行執行次數、是否執行了某一行。 當檢測程序終止時,會生成執行報告。
為了獲得高質量的覆蓋率測量,CoverageScanner不僅可以在方法和語句級別上使用,還可以記錄語句覆蓋率和決策覆蓋率信息。
此外,還可以將測試名稱和執行狀態(即“通過”或“失敗”)插入到報告中。 這可以通過腳本或直接從應用程序完成。 進一步,可以將CoverageScanner集成到測試框架(如CppUnit或CxxTest)中,在該框架中為每個測試生成單獨的覆蓋信息。
CoverageScanner是一個命令行工具,它取代了通常用于構建可執行文件,庫或插件的編譯器。 它將特殊的檢測指令插入到預處理的源代碼中,然后使用原始編譯器編譯修改后的代碼。 同時,生成數據庫(.csmes文件)以供以后分析。 它包含儀器列表和檢測源代碼的副本。
在編譯之后,可以像往常一樣運行檢測的可執行文件(并且可以通過訪問它們的程序使用檢測的庫或插件),但是現在,當程序終止時,生成執行報告(.csexe文件)。
CoverageScanner幾乎適用于任何標準編譯器,包括GNU gcc,GNU g ++,Microsoft?VisualStudio?6.0,.NET,Express和嵌入式C ++,英特爾?C++等。對于大多數其他編譯器,可以輕松配置CoverageScanner。
CoverageBrowser – Viewing, analyzing and managing code coverage results
可以使用CoverageBrowser工具分析和管理.csexe文件中的執行報告。 該程序具有GUI圖形用戶界面,用戶可以通過GUI瀏覽和管理其執行報告。 這樣可以直接找到未經測試或無法訪問的代碼以及低效的測試。
CoverageBrowser的能力總結如下:
向已檢測的源代碼行添加注釋。
在樹視圖中顯示執行列表。
標記無法測試的代碼段為“手動驗證”。
瀏覽已檢測的代碼。
在覆蓋級別之間切換:決策覆蓋,條件覆蓋和語句塊覆蓋。
顯示工具狀態的詳細說明。 這包括:
用戶評論。
每個已檢測語句的狀態:已執行,未執行,已部分執行。
執行檢測語句的次數。
執行檢測語句的測試列表。
從自動測試套件中檢索執行狀態。
單元測試的代碼覆蓋率分析。
將結果導出到電子表格。
測試效益分析模式可以查看一組測試添加的附加代碼覆蓋范圍。
源代碼和函數瀏覽器,顯示每個文件,每個類,每個命名空間以及每個Tcl,QML,C#和C / C ++函數的代碼覆蓋率統計信息。
以HTML格式生成報告。 它包括每個源文件的統計信息,方法,執行和未執行的代碼行列表。
黑盒測試支持。
比較不同版本軟件的覆蓋率數據。
Squish Coco的使用
由于是收費應用,,,,,,
OpenCppCoverage
OpenCppCoverage 是一個開源的windows平臺下的C++源代碼覆蓋率測試工具。
主要用于單元測試覆蓋,但也可以使用它來了解程序中執行的行以進行調試。
功能:
Visual Studio支持:支持帶有程序數據庫文件(.pdb)的編譯器。
非侵入式:只需使用OpenCppCoverage運行程序,無需重新編譯應用程序。
HTML報告: 使用命令行方式運行,生成HTML格式的報告。
行覆蓋: 支持代碼行級別的覆蓋檢查,在報告中以不同的背景色加以區分。
作為Visual Studio插件運行: 可以Visual Studio插件的形式進行使用,安裝該插件后,在Visual Studio的tool欄中可以直接進行覆蓋率檢查。
Jenkins支持
支持優化構建。
根據正則表達式排除代碼行。
子進程覆蓋。
覆蓋率聚合:可運行多個代碼覆蓋率檢測并將它們合并到單個報告中。
環境要求
Windows Vista或更高版本。
Microsoft Visual Studio 2008或更高版本的所有版本,包括Express版本。 也應該可以與以前版本的Visual Studio一起使用。
使用方法
命令行模式
下載OpenCppCoverage并進行安裝,安裝時選擇將其添加到環境變量。
最基本的命令如下:
OpenCppCoverage.exe --sources MySourcePath – YourProgram.exe arg1 arg2
其中MySourcePath是要檢測的項目的源文件目錄,YourProgram.exe是編譯好的準備進行檢測的項目可執行文件,最后可以添加檢測的目標程序運行的參數。
使用–sources MySourcePath參數是為了告訴OpenCppCoverage我們需要納入覆蓋率檢測的源代碼。否則,在計算覆蓋率時可能會對許多非項目中的文件進行統計。
運行之后,將在當前目錄生成HTML的報告文檔。在瀏覽器中可以進行方便的查看。報告中包含了整個項目的覆蓋率數據,各個文件的覆蓋率,以及各個文件的代碼行級的覆蓋情況。在每個文件中根據代碼是否被被運行到做了顏色的區分。
生成報告文檔的格式以及目錄同樣是可以配置的,配置命令為–export_type arg,使用示例如下:
OpenCppCoverage.exe --export_type=export_type_value:outputPath – MyProgram.exe
其中export_type_value為輸出的格式,支持的格式有:
html:將報告保存為一個Html文件。 如果未設置此標志,則為默認值。
cobertura:創建了一個與Jenkins的Cobertura插件兼容的xml文件
binary:覆蓋率報告保存在二進制文件中。 可以使用–input_coverage重新加載此文件。
outputPath是將執行導出的路徑。未配置時使用默認值:
對于html: CoverageReport-YYYY-MM-DD-HHhMMmSSs,其中YYYY-MM-DD-HHhMMmSSs將被當前日期取代。outputPath應為一個目錄。
對于cobertura: 默認為ProgramNameCoverage.xml,其中ProgramName是已執行程序或CoverageOutput的名稱。 outputPath必須是文件。
對于binary:默認為ProgramName.cov,其中ProgramName是已執行程序或CoverageOutput的名稱。 outputPath必須是文件。
還可以同時指定多個輸出配置:
OpenCppCoverage.exe --sources=MySources --export_type=html:OutputFolder --export_type=cobertura – MyProgram.exe
更多的參數選項見此處
Visual Studio 插件模式
OpenCppCoverage對Visual Studio提供插件支持,支持2015和2017等版本。
安裝插件之后,正常編譯項目,在菜單欄選擇Tools(工具) –> Run OpenCppCoverage將會彈出運行OpenCppCoverage的配置菜單,在Basic欄中Program to run為我們要檢測的目標程序,對應命令行運行時我們輸入的YourProgram.exe。Arguments為運行目標程序時使用的參數。在Filter中Additional Source Pattern中可以配置檢測的目標項目源文件目錄,對應命令行運行時的–sources=MySources。
將這三個參數配置好就可以進行最基本的覆蓋率檢測了。
運行完畢后將在output窗口生成覆蓋率報告,同時也會在代碼瀏覽窗口中根據代碼是否被執行來對各行代碼以不同的顏色進行標識。
此外在Import/Export欄可以配置輸出文件的格式等,此處多更多的配置使用不作詳細介紹。
總結
以上是生活随笔為你收集整理的C++ 代码覆盖率分析工具的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bootstrap中的glyphicon
- 下一篇: cpython pypy_PyPy4.0