1 代碼覆蓋率概述
覆蓋率(code coverage rate)是反映測試用例對被測軟件覆蓋程度的重要指標(biāo),也是衡量測試工作進(jìn)展情況的重要指標(biāo)。在代碼邏輯比較復(fù)雜的情況下,測試工作往往只能覆蓋到顯而易見的邏輯分支,而更多的深層次的邏輯分支則不容易被測試人員發(fā)現(xiàn)。為了保證測試的覆蓋率,有些開發(fā)人員會嘗試協(xié)助測試人員寫出所有的測試用例,這不僅會犧牲大量的寶貴的開發(fā)時間,同時也擁有一定的難度,最重要原因就是因為測試難以量化。而代碼覆蓋工具就是用來量化代碼測試的覆蓋率,讓測試人員可以直觀的發(fā)現(xiàn)那些沒有覆蓋到的代碼分支。
代碼覆蓋率是評價單元測試的效果的一個重要指標(biāo)。在實際的工作中,通常使用代碼覆蓋率來評價單元測試的效果。
代碼覆蓋率可以由語句覆蓋率和分析分析率兩個方面來進(jìn)行評估。
- 語句覆蓋率是指在測試過程中實際得到執(zhí)行的語句數(shù)和代碼總語句數(shù)之間的比值。比如總共有 100 條語句,在測試過程中有 80 條語句得到執(zhí)行,那么語句覆蓋率就是 80%。
- 分支覆蓋率是指在程序的控制流圖中實際得到執(zhí)行的分支數(shù)和總分支數(shù)據(jù)之間的比值。例比如總共有 100 個分支,在測試過程中實際有 80 個分支得到執(zhí)行,那么分支覆蓋率就是 80%。 可以簡單的理解為控制流圖中每一條線性無關(guān)路徑即為一個分支。
2 Windows 下覆蓋率分析工具
OpenCppCoverage是Windows平臺下開源的C++代碼覆蓋率工具,使用簡單,功能齊全而強大。
使用起來非常簡單,它不需要在編譯時插樁,只需要有pdb文件,運行時插樁,通過OpenCppCoverage啟動進(jìn)程即可。功能也比較全,主要特點有:
- 不需要重新編譯被測程序,只需要使用penCppCoverage運行程序
- 性能開銷比較小
- 按模塊、代碼路徑過濾
- 自動生成html覆蓋率結(jié)果報告
- 支持多個覆蓋率結(jié)果合并
- 集成Jenkins
OpenCppCoverage 是與Visual Studio 配合使用的一個代碼覆蓋率分析工具,當(dāng)測試程序使用Visual Studio編譯時,就可以使用這個工具進(jìn)行代碼覆蓋率分析,為了能夠進(jìn)行分析,應(yīng)用程序必須編譯為Debug版本。
源碼地址:https://github.com/OpenCppCoverage/OpenCppCoverage
OpenCppCoverage可以單獨下載安裝,也可以作為插件在VisualStudio的進(jìn)行安裝。這里以單獨下載安裝為例。
2.1 OpenCppCoverage單獨安裝與使用
2.1.1 下載安裝
OpenCppCoverage下載地址:https://github.com/OpenCppCoverage/OpenCppCoverage/releases
根據(jù)自身環(huán)境選擇x86或者x64版本進(jìn)行安裝。
安裝過程比較簡單,只需要注意一點:勾選將運行目錄添加到環(huán)境變量中(默認(rèn)也是勾選)。
2.1.2 使用
OpenCppCoverage最簡單的運行格式為:
OpenCppCoverage.exe --sources MySourcePath* -- YourProgram.exe arg1 arg2
以如下的TestOpenCppCoverage工程為例,工程由utils.c、utils.h和main.c組成。
工程的代碼目錄為:
C:\\Users\\ouxiaolong\\Desktop\\TestOpenCppCoverage\\TestOpenCppCoverage\\src
工程的輸出程序為:
C:\\Users\\ouxiaolong\\Desktop\\TestOpenCppCoverage\\Debug\\TestOpenCppCoverage.exe
運行CMD,運行命令:
OpenCppCoverage --sources C:\\Users\\ouxiaolong\\Desktop\\TestOpenCppCoverage\\TestOpenCppCoverage\\src -- C:\\Users\\ouxiaolong\\Desktop\\TestOpenCppCoverage\\Debug\\TestOpenCppCoverage.exe
輸出信息說明,生成的html文件(index.html)位于:
C:\\Users\\ouxiaolong\\Desktop\\TestOpenCppCoverage\\CoverageReport-2022-12-09-11h47m10s。
單擊C:\\Users\\ouxiaolong\\Desktop\\TestOpenCppCoverage\\Debug\\TestOpenCppCoverage.exe即可對文件進(jìn)一步分析。
綠色部分表示已覆蓋到的部分,紅色部分表示未覆蓋的部分。
2.2 作為Visual Studio插件
2.2.1 插件安裝
打開VisualStudio --> 工具 --> 擴(kuò)展和更新 --> 聯(lián)機 --> 右上角輸入OpenCppCoverage,在下面的結(jié)果會出現(xiàn)“OpenCppCoverage Plugin”點擊安裝即可(安裝中需要將VisualStudio重啟)。
2.2.2 使用
程序?qū)懞茫幾g執(zhí)行之后,點擊“工具 --> Run OpenCppCoverage”,程序運行。
將命令行窗口關(guān)掉,則代碼會出現(xiàn)紅色或者綠色的陰影,下面會出現(xiàn)Coverage的報告,如下圖。
3 Linux下覆蓋率分析工具
3.1 Lcov簡介
gcov是一個測試代碼覆蓋率的程序,正確地使用它搭配 gcc 可以分析、幫助你將代碼寫得更高效。幫助你優(yōu)化程序。類似于一個profiling tool,使用 gcov 或者 gprof,可以收集到一些基礎(chǔ)的性能統(tǒng)計數(shù)據(jù)。比如:
- 每一行代碼執(zhí)行的頻度
- 每個代碼文件中實際被執(zhí)行到的行數(shù)
- 每一個代碼塊執(zhí)行使用的時間
gcov創(chuàng)建一個logfile叫做 源文件名稱.gcxx (這里的源文件名稱指的是.c或者.cc文件的文件名),表示的是這個 源文件.c 中每一行所被執(zhí)行的次數(shù)。這些文件可以配合gprof使用。
gcov要工作只能用gcc編譯這些代碼。和其他的profiling 或者 測試代碼覆蓋率的機制不兼容。
fprofile-arcs參數(shù)使gcc創(chuàng)建一個程序的流圖,之后找到適合圖的生成樹。只有不在生成樹中的弧被操縱(instrumented):gcc添加了代碼來清點這些弧執(zhí)行的次數(shù)。當(dāng)這段弧是一個塊的唯一出口或入口時,操縱工具代碼(instrumentation code)將會添加到塊中,否則創(chuàng)建一個基礎(chǔ)塊來包含操縱工具代碼。
Lcov是GCC覆蓋率測試工具gcov的前端圖形工具。它通過收集多個源文件的 行、函數(shù)和分支的代碼覆蓋信息并且將收集后的信息生成HTML頁面。生成HTML需要使用genhtml命令。
3.2 Lcov安裝
在Linux 中安裝 lcov 非常簡單,只要使用如下命令即可完成 lcov 的安裝。
$ sudo apt-get install lcov
安裝完成后,后續(xù)就可以使用 lcov 生成代碼覆蓋率報告。
3.3 Lcov使用
Step1 : 使用 GCC 以 -fprofile-arcs 和-ftest-coverage 選項編譯程序。
$ gcc -fprofile-arcs -ftest-coverage -o test test.c
則會在當(dāng)前目錄下生成test.gcno和test.gcda文件
注:一般情況,gcda和gcno會在同一個目錄,假如在編譯機器上面是test/path,編譯的時候會在這個目錄下生成*.gcno文件,那么在執(zhí)行機器上也會生成*.gcda文件在test/path目錄下。如果要使用lcov統(tǒng)計覆蓋率,必須將gcno和gcda放在同一個目錄,并且有源代碼,且源代碼的目錄和編譯時的目錄一樣,否則不能生成。
Step2: 運行程序
$ ./test
Step3: 然后該目錄下執(zhí)行l(wèi)cov
$ lcov --directory . --capture --output-file app.info
其中:
--directory 或者-d 表示的是目錄,也就是gcno和gcda目錄
--capture 或者 -c 表示獲取覆蓋率信息
--output-file 或者 -o 表示輸出文件
Step4: 獲取 HTML 輸出
生成 html 格式的報告比較簡單, 只要在 coverage 目錄下使用以下的命令就可以生成html 格式的報告。
$ genhtml -o results app.info
results是一個目錄,index.html為導(dǎo)航文件,使用 web 瀏覽器打開 index.html 文件查看代碼覆蓋結(jié)果。
也可查看更加詳細(xì)的信息。
如要查看某個文件具體的信息,點擊對應(yīng)的文件名即可,打開的文件詳細(xì)信息頁面。
-
WINDOWS
+關(guān)注
關(guān)注
3文章
3541瀏覽量
88623 -
代碼
+關(guān)注
關(guān)注
30文章
4779瀏覽量
68521
發(fā)布評論請先 登錄
相關(guān)推薦
評論