Parasoft C/C++ test 自動化用戶指南(十七):運(yùn)行靜態(tài)分析
Parasoft C/C++test針對C/C++開發(fā)的專業(yè)白盒自動化測試方案,能有效提高軟件開發(fā)效率和代碼質(zhì)量。C++test 可以進(jìn)行靜態(tài)分析,全面代碼審查,運(yùn)行時(shí)錯(cuò)誤檢測,并在單元測試和組件測試中集成覆蓋率分析。
先決條件
在分析代碼之前,必須將 C/C++test 配置為與特定的 C 和 C++ 編譯器和版本一起使用。配置應(yīng)反映用于構(gòu)建被測代碼的原始編譯器和版本。原始編譯器可執(zhí)行文件必須在 $PATH 上可用(除非使用完整路徑指定)。
使用-compiler開關(guān)指定編譯器配置標(biāo)識符:
cpptestcli -config "builtin://Recommended Rules" -compiler gcc_4_5 -input cpptest.bdf
或者,您可以cpptest.compiler.family在自定義配置文件中配置該屬性:
cpptest.compiler.family=gcc_4_5
如果您使用單個(gè)編譯器和版本進(jìn)行所有測試,則cpptestcli.properties 可以在 [INSTALL_DIR] 或 [USER_HOME] 目錄中的全局配置文件中指定編譯器標(biāo)識符。
執(zhí)行以下操作之一以查找編譯器的配置:
-
使用-detect-compiler開關(guān)自動檢測配置:
cpptestcli -detect-compiler gcc
-
使用-list-compilers開關(guān)在所有支持的編譯器列表中查找配置:
cpptestcli -list-compilers
分析單個(gè)文件
運(yùn)行分析并使用--開關(guān)(分隔符)指定原始編譯器命令。
cpptestcli -config "builtin://Recommended Rules" -compiler gcc_4_5 -- gcc -I include Bank.cxx
C/C++test 將使用原始編譯器可執(zhí)行文件和編譯器選項(xiàng)分析 Bank.cxx 文件,并向輸出控制臺報(bào)告檢測到的違規(guī)。
只會分析指定的源文件。源文件中包含的頭文件將被排除在分析之外。要擴(kuò)大測試文件的范圍,包括頭文件。
您還可以使用該-fail選項(xiàng)在分析報(bào)告靜態(tài)分析結(jié)果時(shí)生成非零退出代碼。
分析基于 Makefile 的項(xiàng)目
運(yùn)行代碼分析和指定原始構(gòu)建命令與-trace開關(guān)。
cpptestcli -config "builtin://Recommended Rules" -compiler gcc_4_5 -trace make clean all
C/C++test 將執(zhí)行以下任務(wù):
- 運(yùn)行原始構(gòu)建(make clean all)
- 檢測要測試的文件
- 對這些文件運(yùn)行分析
- 向輸出控制臺報(bào)告結(jié)果
- 將所有構(gòu)建信息存儲在 cpptest.bdf 文件中以供將來運(yùn)行。
只有在運(yùn)行構(gòu)建命令時(shí)編譯了該文件,C/C++test 才會檢測用于測試的源文件。只會分析來自 Makefile 的源文件。源文件中包含的頭文件將被排除在分析之外。
關(guān)于構(gòu)建數(shù)據(jù)文件
構(gòu)建數(shù)據(jù)文件存儲構(gòu)建信息,例如工作目錄、編譯的命令行選項(xiàng)以及原始構(gòu)建的鏈接過程。指定 .bdf 文件的路徑使您無需重新構(gòu)建即可分析項(xiàng)目。
您可以使用 -trace開關(guān)創(chuàng)建 .bdf 或使用位于. 中的獨(dú)立cpptestscan或cpptesttrace實(shí)用程序[INSTALL_DIR]/bin directory。
以下示例是來自構(gòu)建數(shù)據(jù)文件的片段:
working_dir=/home/place/project/hypnos/pscom project_name=pscom arg=g++ arg=-c arg=src/io/Path.cc arg=-Iinclude arg=-I. arg=-o arg=/home/place/project/hypnos/product/pscom/shared/io/Path.o
使用 cpptestscan和cpptesttrace實(shí)用程序
該cpptestscan實(shí)用程序在正常構(gòu)建期間用作編譯器和/或鏈接器的包裝器。要cpptestscan與現(xiàn)有構(gòu)建一起使用,請cpptestscan在構(gòu)建代碼庫時(shí)為編譯器/鏈接器可執(zhí)行文件添加前綴。這可以通過兩種方式完成:
- 修改構(gòu)建命令行以cpptestscan用作編譯器/鏈接器可執(zhí)行文件的包裝器
- 如果您無法在命令行上覆蓋編譯器變量,請嵌入cpptestscan實(shí)際的 make 文件或構(gòu)建腳本。
要cpptesttrace與現(xiàn)有構(gòu)建一起使用,請cpptesttrace在構(gòu)建代碼庫時(shí)為整個(gè)構(gòu)建命令添加前綴。cpptesttrace將跟蹤構(gòu)建期間執(zhí)行的編譯器和鏈接器進(jìn)程,并將它們存儲在構(gòu)建數(shù)據(jù)文件中。
在這兩種情況下,您都必須在 PATH 環(huán)境變量中指定任一實(shí)用程序的完整路徑。下表總結(jié)了cpptestscan和 的其他選項(xiàng)cpptesttrace。可以直接為cpptestscan命令或通過環(huán)境變量設(shè)置選項(xiàng)。大多數(shù)選項(xiàng)都可以應(yīng)用于cpptestscan或cpptesttrace 通過更改命令行中的前綴。
cpptestscan 的基本用法:
- 視窗: cpptestscan.exe [options] [compile/link command]
- Linux: cpptestscan [options] [compile/link command]
基本的 cpptesttrace 用法:
- 視窗: cpptesttrace.exe [options] [build command]
- Linux: cpptesttrace [options] [build command]
選項(xiàng)
|
環(huán)境變量
|
描述
|
默認(rèn)
|
---|---|---|---|
--cpptestscanOutput-File=<OUTPUT_FILE> --cpptesttraceOutput-File=<OUTPUT_FILE> |
CPPTEST_SCAN_OUTPUT_FILE | 定義要附加構(gòu)建信息的文件。 | cpptestscan.bdf |
--cpptestscanProject-Name=<PROJECT_NAME> --cpptesttraceProject-Name=<PROJECT_NAME> |
CPPTEST_SCAN_PROJECT_NAME | 定義 C++test 項(xiàng)目的建議名稱。 | 當(dāng)前工作目錄的名稱 |
--cpptestscanRun-OrigCmd=[yes|no] --cpptesttraceRun-OrigCmd=[yes|no] |
CPPTEST_SCAN_RUN_ORIG_CMD | 如果設(shè)置為“是”,將執(zhí)行原始命令行。 | 是的 |
--cpptestscanQuoteCmdLineMode=[all|sq|none] --cpptesttraceQuoteCmdLineMode=[all|sq|none] |
CPPTEST_SCAN_QUOTE_CMD_LINE_MODE |
確定在準(zhǔn)備 cmd 行運(yùn)行時(shí) C++test 引用參數(shù)的方式。 all: 所有參數(shù)都將被引用 none: 不會引用任何參數(shù) sq: 只有帶有空格或引號字符的參數(shù)才會被引用 Linux 不支持 cpptestscanQuoteCmdLineMode |
全部 |
--cpptestscanCmd-LinePrefix=<PREFIX> |
CPPTEST_SCAN_CMD_LINE_PREFIX | 如果非空且正在運(yùn)行的原始可執(zhí)行文件被打開,則指定的命令將作為原始命令行的前綴。 | [空的] |
--cpptestscanEnvInOutput=[yes|no] --cpptesttraceEnvInOutput=[yes|no] |
CPPTEST_SCAN_ENV_IN_OUTPUT | 啟用會轉(zhuǎn)儲選定的環(huán)境變量和輸出文件的命令行參數(shù)。對于高級設(shè)置,請使用 --cpptestscanEnvFile 和 --cpptestscanEnvars 選項(xiàng) | 不 |
--cpptestscanEnv-File=<ENV_FILE> --cpptesttraceEnv-File=<ENV_FILE> |
CPPTEST_SCAN_ENV_FILE | 如果啟用,指定的文件會保留所有構(gòu)建命令的公共環(huán)境變量;主輸出文件只會保留差異。使用此選項(xiàng)可減小主輸出文件的大小。在啟用 --cpptestscanEnvInOutput 的情況下使用此選項(xiàng) | [空的] |
在不重新構(gòu)建的情況下重新分析項(xiàng)目
運(yùn)行代碼分析并使用-input開關(guān)指定現(xiàn)有構(gòu)建數(shù)據(jù)文件的路徑。例如:
cpptestcli -config "builtin://Recommended Rules" -compiler gcc_4_5 -input cpptest.bdf
C/C++test 將執(zhí)行以下任務(wù):
- 從現(xiàn)有的 cpptest.bdf 文件中閱讀有關(guān)要測試哪些文件的信息。
- 對這些文件運(yùn)行分析
- 將結(jié)果報(bào)告給輸出控制臺。
不會執(zhí)行原來的構(gòu)建命令。
您可以使用多個(gè)-input開關(guān)指定多個(gè)文件:
cpptestcli -config "builtin://Recommended Rules" -compiler gcc_4_5 -input project1.bdf -input project2.bdf
分析基于 CMake 的項(xiàng)目
分析基于 CMake 的項(xiàng)目:
- 確保您的 CMake 構(gòu)建可以輸出 JSON 格式的編譯命令文件(您可以將 CMake 配置為使用CMAKE_EXPORT_COMPILE_COMMANDS變量輸出文件。)
-
更新 C/C++test 命令行以包含-input <PATH_TO_COMPILE_COMMANDS_JSON>傳遞編譯命令文件的位置。您的命令行可能類似于以下內(nèi)容:
cpptestcli -config "builtin://Recommended Rules" -compiler gcc_4_5 -input compile_commands.json
C/C++test 將執(zhí)行以下任務(wù):
- 從compile_commands.json文件中讀取有關(guān)分析范圍和構(gòu)建選項(xiàng)的信息 。
- 對范圍內(nèi)的文件運(yùn)行分析。
- 報(bào)告結(jié)果。
C/C++test 只會分析編譯命令文件中定義的源文件。源文件中包含的頭文件將被排除在分析之外。
分析 Microsoft Visual Studio 項(xiàng)目或解決方案
C/C++test 可以讀取 Visual Studio 項(xiàng)目和解決方案文件,并分析項(xiàng)目或解決方案中的所有源文件和包含的頭文件。使用-input開關(guān)指定 Visual Studio 項(xiàng)目或解決方案文件:
cpptestcli -config "builtin://Recommended Rules" -input MyProject.vcproj
您可以指定在分析項(xiàng)目或解決方案期間要使用的構(gòu)建配置和平臺。將配置和平臺名稱附加到解決方案或項(xiàng)目文件名。您的命令可能類似于以下內(nèi)容:
cpptestcli -config "builtin://Recommended Rules" -input MyProject.vcproj@Debug|x64
或者,您可以使用以下屬性來指定在分析所有 Visual Studio 解決方案和項(xiàng)目期間要使用的構(gòu)建配置和平臺:
cpptest.input.msvc.config=Debug cpptest.input.msvc.platform=x64
指定 C/C++test 數(shù)據(jù)位置
.cpptest需要對該目錄的獨(dú)占訪問權(quán)限。默認(rèn)情況下,該目錄在當(dāng)前工作目錄中創(chuàng)建,該目錄是存儲某些特定于運(yùn)行的數(shù)據(jù)的位置。因此,一次只能在一個(gè)目錄中運(yùn)行一個(gè) C/C++test 實(shí)例。您可以使用該-workspace開關(guān)更改 .cpptest 目錄的位置。
-workspace <WORKSPACE_LOCATION>
Parasoft——領(lǐng)先的自動化測試工具,滿足絕大多數(shù)行業(yè)標(biāo)準(zhǔn)
Parasoft是一家專門提供軟件測試解決方案的公司,幫助企業(yè)打造無缺陷的軟件。
從開發(fā)到質(zhì)量檢查,Parasoft的技術(shù)通過集成靜態(tài)和運(yùn)行時(shí)分析,單元、功能和API測試,以及服務(wù)虛擬化,在不犧牲質(zhì)量和安全性的情況下加快軟件交付,節(jié)約交付成本。
強(qiáng)大的報(bào)告和分析功能可幫助用戶快速查明有風(fēng)險(xiǎn)的代碼區(qū)域,并了解新代碼更改如何影響其軟件質(zhì)量,而突破性的技術(shù)將人工智能和機(jī)器學(xué)習(xí)添加到軟件測試中,使組織更容易采用和擴(kuò)展跨開發(fā)和測試團(tuán)隊(duì)的有效的軟件測試實(shí)踐。
Parasoft針對C/C++、Java、.NET和嵌入式的開發(fā)測試都有著30多年的深入研究,很多全國500強(qiáng)企業(yè)使用Parasoft的產(chǎn)品實(shí)現(xiàn)了軟件快速、高質(zhì)量的交付。
獲取Parasoft資料或申請?jiān)囉每杉観Q:2867205852