在此階段執(zhí)行三個(gè)步驟:
- 源代碼被檢測(cè)。
- 檢測(cè)的源代碼被編譯為目標(biāo)文件。
- 所有檢測(cè)和非檢測(cè)對(duì)象都鏈接到代碼覆蓋工具庫(kù),以及形成最終可測(cè)試二進(jìn)制工件所需的任何其他庫(kù)。
這些步驟通常在構(gòu)建過(guò)程中執(zhí)行,并且要求覆蓋工具與用戶構(gòu)建系統(tǒng)集成。該cpptestcc工具檢測(cè)源代碼并將其編譯為目標(biāo)文件。在cpptestcc被設(shè)計(jì)為用作匯編命令行編譯器前綴。
原始編譯命令行:
|
cc -I app/includes -D defines -c source.cpp
|
覆蓋模式編譯命令行:
|
cpptestcc -compiler gcc_3_4 -line-coverage -workspace /home/test/proj/cov -- cc -I app/includes -D defines -c source.cpp
|
當(dāng)覆蓋模式編譯命令行執(zhí)行時(shí),cpptestcc執(zhí)行以下操作:
- 編譯命令行分析提取源文件信息
- 對(duì)所有檢測(cè)到的源文件進(jìn)行解析和檢測(cè)以獲取覆蓋率指標(biāo)
- 使用-workspace開(kāi)關(guān)在指定位置重建插裝文件;還存儲(chǔ)了有關(guān)報(bào)告生成期間使用的代碼結(jié)構(gòu)的附加信息
- 編譯命令行修改,原始源文件替換為插裝版本
- 執(zhí)行編譯命令行,在與原始命令行相同的位置創(chuàng)建對(duì)象文件
您可以將[INSTALL_DIR]/bin目錄添加到 PATH 變量中,這樣在指定cpptestcc命令時(shí)就不必使用完整路徑 。本文檔中的所有示例均假設(shè)已完成此操作。
以下模式描述了覆蓋檢測(cè)的語(yǔ)法:
|
cpptestcc -compiler <compiler configuration> <coverage metric specification> -workspace <workspace directory> -- <compilation command line>
|
- <compiler configuration>指支持的編譯器配置,例如 gcc_3_4;有關(guān)支持的編譯器 列表,請(qǐng)參閱支持的編譯器。
- <coverage metric specification>“覆蓋”指的是支持的覆蓋度量,例如,線路覆蓋。有關(guān)支持的覆蓋率指標(biāo)列表,請(qǐng)參閱cpptestcc 的命令行參考。
- 該cpptestcc命令行從與編譯器命令行分離--隔板。
鏈接檢測(cè)代碼
必須修改原始鏈接器命令以包含代碼覆蓋率檢測(cè)所需的附加庫(kù)。以下示例顯示了這通常是如何完成的:
原始編譯命令行:
|
lxx -L app/lib app/source.o -lsomelib -o app.exe
|
覆蓋模式編譯命令行:
|
lxx -L app/lib app/source.o somelib.lib <coverage tool>/runtime/lib/cpptest.lib -o app.exe
|
執(zhí)行檢測(cè)代碼
執(zhí)行環(huán)境的細(xì)節(jié)取決于應(yīng)用程序的細(xì)節(jié),但覆蓋工具對(duì)執(zhí)行施加了以下有限的依賴:
- 如果覆蓋工具庫(kù)被鏈接為共享(動(dòng)態(tài)加載)庫(kù),那么您必須確保在啟動(dòng)檢測(cè)的應(yīng)用程序時(shí)可以加載該庫(kù)。在 Windows 上,這通常需要將[INSTALL_DIR]/bin目錄添加到 PATH 環(huán)境變量中。在 Linux 系統(tǒng)上,添加[INSTALL_DIR]/runtime/lib到 LD_LIBRARY_PATH 變量。
- 如果覆蓋結(jié)果傳輸信道被修改,則必須滿足由修改產(chǎn)生的所有要求。例如,如果結(jié)果是通過(guò) TCP/IP 套接字或 rs232 發(fā)送的,則需要在檢測(cè)的應(yīng)用程序執(zhí)行之前啟動(dòng)適當(dāng)?shù)膫陕?tīng)代理。
在檢測(cè)的應(yīng)用程序完成執(zhí)行后,收集的結(jié)果必須存儲(chǔ)在將用于生成報(bào)告的文件中。
生成報(bào)告
最終覆蓋率報(bào)告由兩種類型的信息生成:
- cpptestcc構(gòu)建過(guò)程中生成的代碼結(jié)構(gòu)信息(存儲(chǔ)在workspace中)
- 通過(guò)檢測(cè)代碼執(zhí)行獲得的覆蓋結(jié)果
覆蓋率報(bào)告可以 HTML 格式生成或發(fā)送到 DTP 服務(wù)器。以下示例顯示了用于生成報(bào)告的命令:
|
cpptestcli -config builtin://Coverage -input cpptest_results.clog -workspace /home/test/proj/cov
|
為了在 DTP 中正確合并覆蓋數(shù)據(jù),您必須在命令行或 .properties 設(shè)置文件中指定一個(gè)或多個(gè)覆蓋圖像標(biāo)簽。覆蓋圖像會(huì)自動(dòng)發(fā)送到連接的 DTP 服務(wù)器,在那里它可以與過(guò)濾器相關(guān)聯(lián)。
您可以指定一組最多三個(gè)標(biāo)簽,這些標(biāo)簽可用于在 DTP 服務(wù)器中使用以下report.coverage.images屬性創(chuàng)建覆蓋圖像:
|
report.coverage.images=[tag1; tag2; tag3]
|
在報(bào)告中心管理頁(yè)面(管理> 項(xiàng)目> 過(guò)濾器> [單擊過(guò)濾器])中的 DTP 中關(guān)聯(lián)覆蓋圖像。
您還可以使用該report.coverage.limit屬性指定較低的覆蓋閾值:
|
report.coverage.limit=[value]
|
低于此值的覆蓋率結(jié)果在報(bào)告中突出顯示。默認(rèn)值為40。
使用示例
在此示例中,以下代碼來(lái)自名為 的 c++ 源文件main.c:
|
#include <iostream>
int main(int argc, char ** argv) {
if (argc > 1) {
std::cout << "Thank you for arguments" << std::endl;
} else {
std::cout << "Provide some arguments please !" << std::endl;
}
return 0;
}
|
正常的文件編譯命令是gcc:
|
g++ -c main.c -o main.o
|
要檢測(cè)此文件并將檢測(cè)后的代碼編譯為目標(biāo)文件,編譯命令行必須包含cpptestcc命令前綴:
|
cpptestcc -compiler gcc_3_4 -line-coverage -workspace /home/test/proj/cov -- g++ -c main.c -o main.o
|
作為 cpptestcc 命令調(diào)用的結(jié)果,創(chuàng)建了兩個(gè)工件:
- 帶有檢測(cè)代碼的對(duì)象
- 代碼結(jié)構(gòu)信息存儲(chǔ)在 -workspace選項(xiàng)指定的目錄中
一旦源文件被檢測(cè)并編譯成目標(biāo)文件,它就可以鏈接起來(lái)形成最終的可執(zhí)行文件。通常這個(gè)簡(jiǎn)單的例子將與以下命令鏈接:
|
g++ main.o -o app.exe
|
覆蓋率檢測(cè)需要額外的庫(kù),因此鏈接命令行需要如下所示:
|
g++ main.o <coverage tool install dir>/runtime/lib/cpptest.a -o app.exe
|
在此示例中,使用了覆蓋庫(kù)的靜態(tài)版本。還提供了動(dòng)態(tài)/共享版本以及源代碼,用于構(gòu)建自定義版本。
一旦應(yīng)用程序被鏈接,就可以執(zhí)行它來(lái)收集有關(guān)代碼覆蓋率的信息。運(yùn)行以下命令:
|
./app.exe
|
應(yīng)用程序?qū)?/span>cpptest_results.clog在當(dāng)前工作目錄中輸出默認(rèn)命名的覆蓋率日志文件。
最后,使用以下命令生成報(bào)告:
|
cpptestcli -config builtin://Coverage -workspace /home/test/proj/cov -input cpptest_results.clog -report report_dir
|
將創(chuàng)建一個(gè)報(bào)告目錄,其中包含帶有代碼覆蓋率信息的 HTML 報(bào)告。

半島外圍網(wǎng)上直營(yíng)









11次
相關(guān)產(chǎn)品
正式授權(quán)
最新文章 
半島外圍網(wǎng)上直營(yíng)相關(guān)的文章 
在線咨詢

渝公網(wǎng)安備
50010702500608號(hào)

客服熱線