Parasoft C/C++ test 自動(dòng)化用戶指南(二十一):與基于 Make 的構(gòu)建系統(tǒng)集成
Parasoft C/C++test針對(duì)C/C++開發(fā)的專業(yè)白盒自動(dòng)化測試方案,能有效提高軟件開發(fā)效率和代碼質(zhì)量。C++test 可以進(jìn)行靜態(tài)分析,全面代碼審查,運(yùn)行時(shí)錯(cuò)誤檢測,并在單元測試和組件測試中集成覆蓋率分析。
Parasoft C/C++test申請(qǐng)免費(fèi)試用
將Parasoft C/C++test 與基于 GNU Make 或類似構(gòu)建工具的項(xiàng)目集成通常需要修改構(gòu)建腳本。在大多數(shù)情況下,編譯和鏈接規(guī)則調(diào)用的命令行應(yīng)該被改變。這可能需要您修改 make 變量,或者在某些情況下,需要修改編譯和鏈接規(guī)則定義。
與 Make 編譯規(guī)則集成
使用cpptestcc命令包裝器為編譯器命令行添加前綴以與 Make 編譯規(guī)則集成。要確定最佳方法,首先要分析構(gòu)建腳本并找到編譯規(guī)則的定義。在某些情況下,特定文件有不同的規(guī)則,例如處理 C 或 C++ 文件的規(guī)則。以下示例顯示了如何定義編譯規(guī)則:
$(PRODUCT_OBJ_ROOT)/%$(EXT_OBJ) : %$(EXT_CXX)
$(CXX) $(CXXFLAGS) $(CXXSTATICFLAGS) -DAPPNAME=product
|
在這個(gè)例子中,編譯器被一個(gè) CXX make 變量引用。有兩種選擇:
- 將前綴變量添加到編譯規(guī)則中,或者
- 覆蓋編譯器變量
以下部分描述了如何繼續(xù)使用這兩種方法。
將前綴變量添加到編譯規(guī)則
通過在引用編譯器的變量前添加一個(gè)附加變量來修改編譯規(guī)則:
$(PRODUCT_OBJ_ROOT)/%$(EXT_OBJ) : %$(EXT_CXX)
$(COV_TOOL) $(CXX) $(CXXFLAGS) $(CXXSTATICFLAGS) -
DAPPNAME=product
|
此外,COV_TOOL在 Make 調(diào)用時(shí)(示例 a)或在構(gòu)建腳本(示例 b)中為添加的變量 ( )賦值:
例子一
make COV_TOOL="cpptestcc -compiler gcc_3_4 -line-coverage -workspace /home/test/proj/cov -- "
|
示例 b
在此選項(xiàng)中,變量可能位于依賴于附加變量的條件內(nèi):
ifeq (COV_BUILD,$(BUILD_TYPE))
COV_TOOL="cpptestcc -compiler gcc_3_4 -line-coverage
-workspace /home/test/proj/cov -- "
endif
|
覆蓋編譯器變量
在這種方法中,編譯器變量用于指定覆蓋工具命令行。這可以在 Make 調(diào)用時(shí)(示例 c)或在CXX指定變量的原始值之后的構(gòu)建腳本(示例 d)中完成(以避免使用原始編譯器覆蓋覆蓋工具命令)。
示例 c
如果你的構(gòu)建腳本對(duì)不同類型的文件有不同的編譯規(guī)則,你可能需要覆蓋多個(gè)變量,例如CCand CXX:
make CXX="cpptestcc -compiler gcc_3_4 -line-coverage -workspace /home/test/proj/cov -- g++"
|
例 d
在此選項(xiàng)中,變量可能位于依賴于附加變量的條件內(nèi):
ifeq (COV_BUILD,$(BUILD_TYPE))
CXX="cpptestcc -compiler gcc_3_4 -line-coverage -workspace /home/test/proj/cov -- g++"
endif
|
與 Make Linking Rule 集成
修改鏈接規(guī)則以包含代碼檢測所需的附加庫。cpptestcc根據(jù)具體的項(xiàng)目需求,工具庫可以有不同的形式。它可以是共享/動(dòng)態(tài)庫、靜態(tài)庫或目標(biāo)文件。在所有情況下,特定的鏈接器選項(xiàng)可能具有不同的形式,但無論情況如何,修改 Makefile 的方式都非常相似。
本節(jié)重點(diǎn)介紹在類 Make 環(huán)境中修改鏈接器命令行的一般方法。
要找到合適的修改位置,首先要分析構(gòu)建腳本并找到鏈接規(guī)則的定義。以下示例顯示了如何定義鏈接規(guī)則:
$(PROJ_EXECUTABLE): $(PRODUCT_OBJ)
$(LXX) $(PRODUCT_OBJ) $(OFLAG_EXE)$(PROJ_EXECUTABLE) $(LXXFLAGS) $(SYSLIB) $(EXECUTABLE_LIB_LXX_OPTS)
|
您可以添加一個(gè)特殊變量來表示cpptestcc工具庫,或者將覆蓋率庫附加到鏈接規(guī)則中已使用的變量之一。
添加一個(gè)變量來表示 Coverage 工具庫
以下示例顯示了修改后的規(guī)則可能是什么樣子:
$(PROJ_EXECUTABLE): $(PRODUCT_OBJ)
$(LXX) $(PRODUCT_OBJ) $(OFLAG_EXE)$(PROJ_EXECUTABLE) $(LXXFLAGS) $(SYSLIB) $(EXECUTABLE_LIB_LXX_OPTS) $(COV_LIB)
|
此外,為添加的變量賦值(COV_LIB)在 Make 調(diào)用時(shí)(示例 e)或在構(gòu)建腳本中(示例 f):
例子e
make COV_LIB="<COV_TOOL_INSTALLATION>/runtime/lib/cpptest.a "
|
示例 f
在此選項(xiàng)中,變量可能位于依賴于附加變量的條件內(nèi):
ifeq (COV_BUILD,$(BUILD_TYPE))
COV_LIB="<COV_TOOL_INSTALLATION>/runtime/lib/cpptest.a"
endif
|
將覆蓋庫附加到鏈接規(guī)則中的現(xiàn)有變量
ifeq (COV_BUILD,$(BUILD_TYPE))
LXXFLAGS+="<COV_TOOL_INSTALLATION>/bin/engine/lib/cpptest.a"
endif
|
Parasoft——領(lǐng)先的自動(dò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針對(duì)C/C++、Java、.NET和嵌入式的開發(fā)測試都有著30多年的深入研究,很多全國500強(qiáng)企業(yè)使用Parasoft的產(chǎn)品實(shí)現(xiàn)了軟件快速、高質(zhì)量的交付。
獲取Parasoft資料或申請(qǐng)?jiān)囉每杉観Q:2867205852