Parasoft C/C++ test 自動化用戶指南(二十):檢測和構(gòu)建檢測源代碼
Parasoft C/C++test針對C/C++開發(fā)的專業(yè)白盒自動化測試方案,能有效提高軟件開發(fā)效率和代碼質(zhì)量。C++test 可以進行靜態(tài)分析,全面代碼審查,運行時錯誤檢測,并在單元測試和組件測試中集成覆蓋率分析。
Parasoft C/C++test 可以從單元測試、功能測試以及其他類型的應用程序執(zhí)行中收集覆蓋率信息。C/C++test 支持一系列覆蓋指標,可用于本機和跨應用程序開發(fā)。本文介紹其中的第一個階段——檢測和構(gòu)建檢測源代碼。
在此階段執(zhí)行三個步驟:
- 源代碼被檢測。
- 檢測的源代碼被編譯為目標文件。
- 所有檢測和非檢測對象都鏈接到代碼覆蓋工具庫,以及形成最終可測試二進制工件所需的任何其他庫。
這些步驟通常在構(gòu)建過程中執(zhí)行,并且要求覆蓋工具與用戶構(gòu)建系統(tǒng)集成。該cpptestcc工具檢測源代碼并將其編譯為目標文件。在cpptestcc被設(shè)計為用作匯編命令行編譯器前綴。
原始編譯命令行:
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
|
當覆蓋模式編譯命令行執(zhí)行時,cpptestcc執(zhí)行以下操作:
- 編譯命令行分析提取源文件信息
- 對所有檢測到的源文件進行解析和檢測以獲取覆蓋率指標
- 使用-workspace開關(guān)在指定位置重建插裝文件;還存儲了有關(guān)報告生成期間使用的代碼結(jié)構(gòu)的附加信息
- 編譯命令行修改,原始源文件替換為插裝版本
- 執(zhí)行編譯命令行,在與原始命令行相同的位置創(chuàng)建對象文件
您可以將[INSTALL_DIR]/bin目錄添加到 PATH 變量中,這樣在指定cpptestcc命令時就不必使用完整路徑 。本文檔中的所有示例均假設(shè)已完成此操作。
以下模式描述了覆蓋檢測的語法:
cpptestcc -compiler
<compiler configuration> <coverage metric specification>
-workspace <workspace directory> -- <compilation command
line>
|
- <compiler configuration>指支持的編譯器配置,例如 gcc_3_4;有關(guān)支持的編譯器 列表,請參閱支持的編譯器。
- <coverage metric specification>“覆蓋”指的是支持的覆蓋度量,例如,線路覆蓋。有關(guān)支持的覆蓋率指標列表,請參閱cpptestcc 的命令行參考。
- 該cpptestcc命令行從與編譯器命令行分離--隔板。
鏈接檢測代碼
必須修改原始鏈接器命令以包含代碼覆蓋率檢測所需的附加庫。以下示例顯示了這通常是如何完成的:
原始編譯命令行:
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í)行檢測代碼
執(zhí)行環(huán)境的細節(jié)取決于應用程序的細節(jié),但覆蓋工具對執(zhí)行施加了以下有限的依賴:
- 如果覆蓋工具庫被鏈接為共享(動態(tài)加載)庫,那么您必須確保在啟動檢測的應用程序時可以加載該庫。在 Windows 上,這通常需要將[INSTALL_DIR]/bin目錄添加到 PATH 環(huán)境變量中。在 Linux 系統(tǒng)上,添加[INSTALL_DIR]/runtime/lib到 LD_LIBRARY_PATH 變量。
- 如果覆蓋結(jié)果傳輸信道被修改,則必須滿足由修改產(chǎn)生的所有要求。例如,如果結(jié)果是通過 TCP/IP 套接字或 rs232 發(fā)送的,則需要在檢測的應用程序執(zhí)行之前啟動適當?shù)膫陕牬怼?/span>
在檢測的應用程序完成執(zhí)行后,收集的結(jié)果必須存儲在將用于生成報告的文件中。
生成報告
最終覆蓋率報告由兩種類型的信息生成:
- cpptestcc構(gòu)建過程中生成的代碼結(jié)構(gòu)信息(存儲在workspace中)
- 通過檢測代碼執(zhí)行獲得的覆蓋結(jié)果
覆蓋率報告可以 HTML 格式生成或發(fā)送到 DTP 服務器。以下示例顯示了用于生成報告的命令:
cpptestcli -config builtin://Coverage -input cpptest_results.clog -workspace /home/test/proj/cov
|
為了在 DTP 中正確合并覆蓋數(shù)據(jù),您必須在命令行或 .properties 設(shè)置文件中指定一個或多個覆蓋圖像標簽。覆蓋圖像會自動發(fā)送到連接的 DTP 服務器,在那里它可以與過濾器相關(guān)聯(lián)。
您可以指定一組最多三個標簽,這些標簽可用于在 DTP 服務器中使用以下report.coverage.images屬性創(chuàng)建覆蓋圖像:
report.coverage.images=[tag1; tag2; tag3]
|
在報告中心管理頁面(管理> 項目> 過濾器> [單擊過濾器])中的 DTP 中關(guān)聯(lián)覆蓋圖像。
您還可以使用該report.coverage.limit屬性指定較低的覆蓋閾值:
report.coverage.limit=[value]
|
低于此值的覆蓋率結(jié)果在報告中突出顯示。默認值為40。
使用示例
在此示例中,以下代碼來自名為 的 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
|
要檢測此文件并將檢測后的代碼編譯為目標文件,編譯命令行必須包含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)建了兩個工件:
- 帶有檢測代碼的對象
- 代碼結(jié)構(gòu)信息存儲在 -workspace選項指定的目錄中
一旦源文件被檢測并編譯成目標文件,它就可以鏈接起來形成最終的可執(zhí)行文件。通常這個簡單的例子將與以下命令鏈接:
g++ main.o -o app.exe
|
覆蓋率檢測需要額外的庫,因此鏈接命令行需要如下所示:
g++ main.o <coverage tool install dir>/runtime/lib/cpptest.a -o app.exe
|
在此示例中,使用了覆蓋庫的靜態(tài)版本。還提供了動態(tài)/共享版本以及源代碼,用于構(gòu)建自定義版本。
一旦應用程序被鏈接,就可以執(zhí)行它來收集有關(guān)代碼覆蓋率的信息。運行以下命令:
./app.exe
|
應用程序?qū)?/span>cpptest_results.clog在當前工作目錄中輸出默認命名的覆蓋率日志文件。
最后,使用以下命令生成報告:
cpptestcli -config builtin://Coverage -workspace /home/test/proj/cov -input cpptest_results.clog -report report_dir
|
將創(chuàng)建一個報告目錄,其中包含帶有代碼覆蓋率信息的 HTML 報告。
Parasoft——領(lǐng)先的自動化測試工具,滿足絕大多數(shù)行業(yè)標準
Parasoft是一家專門提供軟件測試解決方案的公司,幫助企業(yè)打造無缺陷的軟件。
從開發(fā)到質(zhì)量檢查,Parasoft的技術(shù)通過集成靜態(tài)和運行時分析,單元、功能和API測試,以及服務虛擬化,在不犧牲質(zhì)量和安全性的情況下加快軟件交付,節(jié)約交付成本。
強大的報告和分析功能可幫助用戶快速查明有風險的代碼區(qū)域,并了解新代碼更改如何影響其軟件質(zhì)量,而突破性的技術(shù)將人工智能和機器學習添加到軟件測試中,使組織更容易采用和擴展跨開發(fā)和測試團隊的有效的軟件測試實踐。
Parasoft針對C/C++、Java、.NET和嵌入式的開發(fā)測試都有著30多年的深入研究,很多全國500強企業(yè)使用Parasoft的產(chǎn)品實現(xiàn)了軟件快速、高質(zhì)量的交付。
獲取Parasoft資料或申請試用可加QQ:2867205852