日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ 代码覆盖率分析工具

發(fā)布時(shí)間:2023/12/20 c/c++ 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 代码覆盖率分析工具 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

參考:https://hxysayhi.com/posts/7af8893f/

本文對C++相關(guān)的代碼覆蓋率分析工具進(jìn)行調(diào)研,作出簡要的總結(jié)

內(nèi)容提要

Squish Coco (收費(fèi))
OpenCppConverage (開源)
Squish Coco
簡介
quish Coco是Tcl,QML,C#和C / C ++程序(包括SystemC程序)的完整代碼覆蓋工具鏈。它運(yùn)行在macOS,Linux?和Microsoft?Windows上。

Squish Coco分析應(yīng)用程序運(yùn)行的方式,例如 可作為測試套件的一部分進(jìn)行使用,然后可以利用其結(jié)果使測試更有效和完整。

功能
Squish Coco在一下方面的幫助尤為突出:

找到未經(jīng)測試的代碼部分。

找到可以消除的冗余測試。Squish Coco可以識別測試涵蓋源了代碼的哪些部分。它可以檢測新測試是否涵蓋了現(xiàn)有測試未涵蓋的源代碼。

通過顯示從未執(zhí)行過的代碼來查找死代碼。

計(jì)算最佳測試執(zhí)行順序,以便最大化每次運(yùn)行的測試覆蓋率。這對手動測試特別有用。

分析應(yīng)用程序的兩個(gè)單獨(dú)版本并比較差異。這使得可以查看哪些測試受到源代碼修改的影響,并且還可以測量補(bǔ)丁或修補(bǔ)程序的測試覆蓋率。

衡量程序和測試的執(zhí)行時(shí)間。

Squish Coco可用于測試的每個(gè)階段和所有測試方法(單元測試,自動測試,手動白盒測試,黑盒測試等)。 測試套件可以分為各個(gè)獨(dú)立部分,Squish Coco可以將多個(gè)執(zhí)行報(bào)告合并為一個(gè)統(tǒng)一的報(bào)告。

組件
Squish Coco包的主要組件是兩個(gè)獨(dú)立的工具和一個(gè)插件:

CoverageScanner: 一個(gè)分析和檢測Tcl,QML,C#和C/C++應(yīng)用程序的程序。

CoverageBrowser - 用于顯示和管理覆蓋率分析結(jié)果的程序。

Microsoft?VisualStudio? Add-In - 一個(gè)可選插件,用于為Microsoft?VisualStudio?下開發(fā)的C#或C ++項(xiàng)目配置代碼覆蓋率。

此外還有幾個(gè)輔助程序用于報(bào)告生成,覆蓋數(shù)據(jù)操作和許可證管理。

CoverageScanner – Instrumentation as part of the build process
CoverageScanner可以檢測編譯器看到的源代碼,而無需觸及原始代碼。 它生成一個(gè)檢測的可執(zhí)行文件,共享庫或插件。 檢測會跟蹤運(yùn)行可執(zhí)行文件或使用庫或插件時(shí)執(zhí)行的代碼。 能夠測算每行執(zhí)行次數(shù)、是否執(zhí)行了某一行。 當(dāng)檢測程序終止時(shí),會生成執(zhí)行報(bào)告。

為了獲得高質(zhì)量的覆蓋率測量,CoverageScanner不僅可以在方法和語句級別上使用,還可以記錄語句覆蓋率和決策覆蓋率信息。

此外,還可以將測試名稱和執(zhí)行狀態(tài)(即“通過”或“失敗”)插入到報(bào)告中。 這可以通過腳本或直接從應(yīng)用程序完成。 進(jìn)一步,可以將CoverageScanner集成到測試框架(如CppUnit或CxxTest)中,在該框架中為每個(gè)測試生成單獨(dú)的覆蓋信息。

CoverageScanner是一個(gè)命令行工具,它取代了通常用于構(gòu)建可執(zhí)行文件,庫或插件的編譯器。 它將特殊的檢測指令插入到預(yù)處理的源代碼中,然后使用原始編譯器編譯修改后的代碼。 同時(shí),生成數(shù)據(jù)庫(.csmes文件)以供以后分析。 它包含儀器列表和檢測源代碼的副本。

在編譯之后,可以像往常一樣運(yùn)行檢測的可執(zhí)行文件(并且可以通過訪問它們的程序使用檢測的庫或插件),但是現(xiàn)在,當(dāng)程序終止時(shí),生成執(zhí)行報(bào)告(.csexe文件)。

CoverageScanner幾乎適用于任何標(biāo)準(zhǔn)編譯器,包括GNU gcc,GNU g ++,Microsoft?VisualStudio?6.0,.NET,Express和嵌入式C ++,英特爾?C++等。對于大多數(shù)其他編譯器,可以輕松配置CoverageScanner。

CoverageBrowser – Viewing, analyzing and managing code coverage results
可以使用CoverageBrowser工具分析和管理.csexe文件中的執(zhí)行報(bào)告。 該程序具有GUI圖形用戶界面,用戶可以通過GUI瀏覽和管理其執(zhí)行報(bào)告。 這樣可以直接找到未經(jīng)測試或無法訪問的代碼以及低效的測試。

CoverageBrowser的能力總結(jié)如下:

向已檢測的源代碼行添加注釋。

在樹視圖中顯示執(zhí)行列表。

標(biāo)記無法測試的代碼段為“手動驗(yàn)證”。

瀏覽已檢測的代碼。

在覆蓋級別之間切換:決策覆蓋,條件覆蓋和語句塊覆蓋。

顯示工具狀態(tài)的詳細(xì)說明。 這包括:

用戶評論。

每個(gè)已檢測語句的狀態(tài):已執(zhí)行,未執(zhí)行,已部分執(zhí)行。

執(zhí)行檢測語句的次數(shù)。

執(zhí)行檢測語句的測試列表。

從自動測試套件中檢索執(zhí)行狀態(tài)。

單元測試的代碼覆蓋率分析。

將結(jié)果導(dǎo)出到電子表格。

測試效益分析模式可以查看一組測試添加的附加代碼覆蓋范圍。

源代碼和函數(shù)瀏覽器,顯示每個(gè)文件,每個(gè)類,每個(gè)命名空間以及每個(gè)Tcl,QML,C#和C / C ++函數(shù)的代碼覆蓋率統(tǒng)計(jì)信息。

以HTML格式生成報(bào)告。 它包括每個(gè)源文件的統(tǒng)計(jì)信息,方法,執(zhí)行和未執(zhí)行的代碼行列表。

黑盒測試支持。

比較不同版本軟件的覆蓋率數(shù)據(jù)。

Squish Coco的使用
由于是收費(fèi)應(yīng)用,,,,,,

OpenCppCoverage
OpenCppCoverage 是一個(gè)開源的windows平臺下的C++源代碼覆蓋率測試工具。
主要用于單元測試覆蓋,但也可以使用它來了解程序中執(zhí)行的行以進(jìn)行調(diào)試。

功能:
Visual Studio支持:支持帶有程序數(shù)據(jù)庫文件(.pdb)的編譯器。

非侵入式:只需使用OpenCppCoverage運(yùn)行程序,無需重新編譯應(yīng)用程序。

HTML報(bào)告: 使用命令行方式運(yùn)行,生成HTML格式的報(bào)告。

行覆蓋: 支持代碼行級別的覆蓋檢查,在報(bào)告中以不同的背景色加以區(qū)分。

作為Visual Studio插件運(yùn)行: 可以Visual Studio插件的形式進(jìn)行使用,安裝該插件后,在Visual Studio的tool欄中可以直接進(jìn)行覆蓋率檢查。

Jenkins支持

支持優(yōu)化構(gòu)建。

根據(jù)正則表達(dá)式排除代碼行。

子進(jìn)程覆蓋。

覆蓋率聚合:可運(yùn)行多個(gè)代碼覆蓋率檢測并將它們合并到單個(gè)報(bào)告中。

環(huán)境要求
Windows Vista或更高版本。

Microsoft Visual Studio 2008或更高版本的所有版本,包括Express版本。 也應(yīng)該可以與以前版本的Visual Studio一起使用。

使用方法
命令行模式
下載OpenCppCoverage并進(jìn)行安裝,安裝時(shí)選擇將其添加到環(huán)境變量。

最基本的命令如下:

OpenCppCoverage.exe --sources MySourcePath – YourProgram.exe arg1 arg2
其中MySourcePath是要檢測的項(xiàng)目的源文件目錄,YourProgram.exe是編譯好的準(zhǔn)備進(jìn)行檢測的項(xiàng)目可執(zhí)行文件,最后可以添加檢測的目標(biāo)程序運(yùn)行的參數(shù)。

使用–sources MySourcePath參數(shù)是為了告訴OpenCppCoverage我們需要納入覆蓋率檢測的源代碼。否則,在計(jì)算覆蓋率時(shí)可能會對許多非項(xiàng)目中的文件進(jìn)行統(tǒng)計(jì)。

運(yùn)行之后,將在當(dāng)前目錄生成HTML的報(bào)告文檔。在瀏覽器中可以進(jìn)行方便的查看。報(bào)告中包含了整個(gè)項(xiàng)目的覆蓋率數(shù)據(jù),各個(gè)文件的覆蓋率,以及各個(gè)文件的代碼行級的覆蓋情況。在每個(gè)文件中根據(jù)代碼是否被被運(yùn)行到做了顏色的區(qū)分。

生成報(bào)告文檔的格式以及目錄同樣是可以配置的,配置命令為–export_type arg,使用示例如下:

OpenCppCoverage.exe --export_type=export_type_value:outputPath – MyProgram.exe
其中export_type_value為輸出的格式,支持的格式有:

html:將報(bào)告保存為一個(gè)Html文件。 如果未設(shè)置此標(biāo)志,則為默認(rèn)值。
cobertura:創(chuàng)建了一個(gè)與Jenkins的Cobertura插件兼容的xml文件
binary:覆蓋率報(bào)告保存在二進(jìn)制文件中。 可以使用–input_coverage重新加載此文件。
outputPath是將執(zhí)行導(dǎo)出的路徑。未配置時(shí)使用默認(rèn)值:

對于html: CoverageReport-YYYY-MM-DD-HHhMMmSSs,其中YYYY-MM-DD-HHhMMmSSs將被當(dāng)前日期取代。outputPath應(yīng)為一個(gè)目錄。

對于cobertura: 默認(rèn)為ProgramNameCoverage.xml,其中ProgramName是已執(zhí)行程序或CoverageOutput的名稱。 outputPath必須是文件。

對于binary:默認(rèn)為ProgramName.cov,其中ProgramName是已執(zhí)行程序或CoverageOutput的名稱。 outputPath必須是文件。

還可以同時(shí)指定多個(gè)輸出配置:

OpenCppCoverage.exe --sources=MySources --export_type=html:OutputFolder --export_type=cobertura – MyProgram.exe
更多的參數(shù)選項(xiàng)見此處

Visual Studio 插件模式
OpenCppCoverage對Visual Studio提供插件支持,支持2015和2017等版本。

安裝插件之后,正常編譯項(xiàng)目,在菜單欄選擇Tools(工具) –> Run OpenCppCoverage將會彈出運(yùn)行OpenCppCoverage的配置菜單,在Basic欄中Program to run為我們要檢測的目標(biāo)程序,對應(yīng)命令行運(yùn)行時(shí)我們輸入的YourProgram.exe。Arguments為運(yùn)行目標(biāo)程序時(shí)使用的參數(shù)。在Filter中Additional Source Pattern中可以配置檢測的目標(biāo)項(xiàng)目源文件目錄,對應(yīng)命令行運(yùn)行時(shí)的–sources=MySources。



將這三個(gè)參數(shù)配置好就可以進(jìn)行最基本的覆蓋率檢測了。

運(yùn)行完畢后將在output窗口生成覆蓋率報(bào)告,同時(shí)也會在代碼瀏覽窗口中根據(jù)代碼是否被執(zhí)行來對各行代碼以不同的顏色進(jìn)行標(biāo)識。

此外在Import/Export欄可以配置輸出文件的格式等,此處多更多的配置使用不作詳細(xì)介紹。

總結(jié)

以上是生活随笔為你收集整理的C++ 代码覆盖率分析工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。