聽(tīng)說(shuō),VectorCAST又出新功能了?不需要源碼就可以測(cè)試?
瞎說(shuō),這功能我們一直就有,只不過(guò)哥不在江湖,江湖不多聞而已。
目標(biāo)文件
(一)目標(biāo)文件是什么
我們都知道,一個(gè)C源程序manager.c(是一個(gè)點(diǎn)餐demo程序,且本文對(duì)manager.c的相關(guān)操作都是在Windows平臺(tái)實(shí)現(xiàn)的。)變成可執(zhí)行程序manager.exe,一般經(jīng)歷四個(gè)過(guò)程,分別是預(yù)處理(Prepressing)、編譯(Compilation)、匯編(Assembly)和鏈接(Linking),如下圖所示:
圖1編譯過(guò)程
目標(biāo)文件是源代碼在經(jīng)過(guò)預(yù)處理、編譯、匯編過(guò)程后輸出的文件(源代碼編譯后但未進(jìn)行鏈接的中間文件),其內(nèi)容至少包含機(jī)器指令代碼,數(shù)據(jù)以及鏈接時(shí)所須要的一些信息。
(二)目標(biāo)文件的結(jié)構(gòu)組成簡(jiǎn)介
目標(biāo)文件中的內(nèi)容信息一般按照不同的屬性,以“節(jié)”(Section)的形式存儲(chǔ),也叫“段”(Segment),它們都表示一個(gè)一定長(zhǎng)度的區(qū)域。
目標(biāo)文件的結(jié)構(gòu)組成主要包含:代碼段 .text(存放機(jī)器指令代碼)、數(shù)據(jù)段 .data(存放已初始化的全局變量和局部靜態(tài)變量的數(shù)據(jù))、.bss段(存放未初始化的全局變量和局部靜態(tài)變量)。
我們通常使用binutils的工具objdump來(lái)查看目標(biāo)文件內(nèi)部的結(jié)構(gòu),以manager.o為例,如下圖2所示。
圖2 manager.o
二、使用VectorCAST/C++進(jìn)行目標(biāo)文件測(cè)試
VectorCAST/C++ 是Vector公司旗下一款集成的軟件測(cè)試解決方案,可顯著減少驗(yàn)證安全關(guān)鍵型和任務(wù)關(guān)鍵型嵌入式系統(tǒng)所需的測(cè)試C/C++軟件組件的時(shí)間、精力和成本。
VectorCAST/C++ 不僅支持白盒下的功能測(cè)試和結(jié)構(gòu)覆蓋測(cè)試,也支持黑盒下的軟件功能測(cè)試——目標(biāo)文件測(cè)試(Object File Testing)和庫(kù)接口測(cè)試(Library Interface Testing)。
目標(biāo)文件測(cè)試就是使用目標(biāo)文件通過(guò)VectorCAST工具生成測(cè)試套件而進(jìn)行的功能測(cè)試;庫(kù)接口測(cè)試方法是指VectorCAST將解析C/C++頭文件中存在的函數(shù)和方法的定義,并基于這些創(chuàng)建測(cè)試環(huán)境,允許在沒(méi)有可用源代碼的情況下使用現(xiàn)有庫(kù)或DLL創(chuàng)建測(cè)試。本次主要講解VectorCAST/C++的目標(biāo)文件測(cè)試方案,以manager.c源文件為操作對(duì)象,使用GCC編譯器進(jìn)行編譯。
(一)測(cè)試輸入物
1、目標(biāo)文件
a.單個(gè).obj/.o文件生成方式
前提條件:該.c文件“涉及”到的.h文件都能正確引用
gcc -c source.c(默認(rèn)在原路徑下生成一個(gè)同名的.o文件),如下圖3所示。
圖3單個(gè)文件manager.o的生成
b.多個(gè).obj/.o文件生成方式
前提條件:每個(gè).c文件“涉及”到的.h文件都能正確引用
gcc -c source1.c source2.c source3.c或gcc -c *.c(默認(rèn)在原路徑下生成相應(yīng)同名的.o文件),如下圖4所示。
圖4多個(gè)目標(biāo)文件的生成
對(duì)于其他編譯鏈,可以通過(guò)IDE(集成開(kāi)發(fā)環(huán)境)生成項(xiàng)目的目標(biāo)文件。如CodeWarrior,其一般可以通過(guò)其IDE生成相應(yīng)的目標(biāo)文件,如下圖5所示。
圖5 CodeWarriors IDE生成相應(yīng)的目標(biāo)文件
2、修改后的源文件
是指刪除了函數(shù)具體實(shí)現(xiàn)的源碼文件(仍包含完整的.h文件),如下圖6所示。
圖6刪去函數(shù)具體實(shí)現(xiàn)后的“manager.c”
3、需求文檔
由于目標(biāo)文件測(cè)試屬于一種軟件黑盒測(cè)試,所以對(duì)于單元測(cè)試級(jí)別的需求文檔的細(xì)致程度可能要達(dá)到詳細(xì)設(shè)計(jì)文檔的程度,甚至更細(xì)致。
如上int Add_Included_Dessert(struct order_type* Order)函數(shù),對(duì)于目標(biāo)文件測(cè)試的單元需求可能這樣描述:
表 1 Add_Included_Dessert(struct order_type* Order)的單元需求說(shuō)明示例
即需要明確給出了Add_Included_Dessert(struct order_type* Order)函數(shù)的輸入與輸出值。
(二)VectorCAST/C++ 進(jìn)行目標(biāo)文件測(cè)試
1、單元測(cè)試操作步驟:
a.啟動(dòng)工具,設(shè)置工作路徑,創(chuàng)建新工程并命名,選擇正確的編譯鏈(以GCC編譯鏈為例);
b.進(jìn)入創(chuàng)建測(cè)試環(huán)境(8大步)。
Step1:選擇編譯器,已在前面配置好了,直接跳過(guò)。
Step2:命名測(cè)試環(huán)境(默認(rèn)字母大寫,空格為下劃線)。
Step3:測(cè)試方式。選擇目標(biāo)文件測(cè)試方式,然后選擇待測(cè)目標(biāo)文件manager.o。如下圖7所示。
圖7選擇待測(cè)目標(biāo)文件“manager.o”
Step4:構(gòu)建選項(xiàng)。要選擇Code Coverage為None,VectorCAST才會(huì)使用之前編譯的目標(biāo)文件。
Step5:本地源代碼文件。使用雙加號(hào)添加包含修改后的源文件所在路徑。
Step6:選擇UUTs和樁。
Step7:User Code可選選項(xiàng)。本實(shí)例不需要,直接跳過(guò)。
Step8:測(cè)試環(huán)境配置概覽。成功構(gòu)建測(cè)試環(huán)境,如下圖8所示。
圖8成功構(gòu)建測(cè)試環(huán)境
c.構(gòu)建測(cè)試環(huán)境后,我們就可以根據(jù)測(cè)試需求(功能需求,表1中序號(hào)1),創(chuàng)建和執(zhí)行測(cè)試用例,如下圖9所示。
圖9創(chuàng)建、執(zhí)行測(cè)試用例
2、集成測(cè)試
集成測(cè)試工程構(gòu)建內(nèi)容與單元測(cè)試很類似,僅在構(gòu)建測(cè)試環(huán)境的第3步和第6步不同。集成測(cè)試一般會(huì)在第3步將相應(yīng)的多個(gè).o文件同時(shí)加進(jìn)來(lái);第6步將相應(yīng)的多個(gè)修改后的源文件同時(shí)加進(jìn)來(lái)。
然后使用組合測(cè)試功能,將單體測(cè)試用例按照一定的邏輯功能進(jìn)行排列,執(zhí)行組合測(cè)試用例。
三、總結(jié)
目標(biāo)文件測(cè)試過(guò)程中,使用修改后的源代碼進(jìn)行測(cè)試,可以將一些核心算法的代碼實(shí)現(xiàn)部分進(jìn)行刪除,能夠較大程度的避免直接使用源代碼,更好的保護(hù)客戶代碼。
當(dāng)然進(jìn)行目標(biāo)文件測(cè)試的要求比較高。需要完善的測(cè)試需求文檔,對(duì)于單元測(cè)試來(lái)說(shuō),一般需要軟件詳細(xì)設(shè)計(jì)文檔以及單元需求文檔等,對(duì)于軟件集成測(cè)試來(lái)說(shuō),一般需要軟件架構(gòu)設(shè)計(jì)規(guī)范文檔及集成需求文檔等。
此外目標(biāo)文件測(cè)試,只能進(jìn)行功能測(cè)試,沒(méi)有結(jié)構(gòu)覆蓋度。為了得到覆蓋度信息,我們還是要轉(zhuǎn)向白盒測(cè)試。將之前的測(cè)試用例導(dǎo)入到白盒測(cè)試工程中的測(cè)試環(huán)境中去執(zhí)行,獲取覆蓋度。
北匯信息專注于汽車電子測(cè)試,提供專業(yè)的汽車電子測(cè)試系統(tǒng)搭建及測(cè)試咨詢服務(wù);提供完整的汽車新能源測(cè)試服務(wù);提供完整的軟件生命周期的軟件測(cè)試服務(wù)。
VectorCAST/C++作為Vector公司的代碼動(dòng)態(tài)測(cè)試工具,支持自動(dòng)生成測(cè)試用例,提供完善的覆蓋度信息視圖,還可以與Git/SVN/Jekins等工具集成等等。
本次為大家簡(jiǎn)單介紹了VectorCAST/C++在軟件測(cè)試方面的軟件黑盒測(cè)試。后續(xù)將會(huì)為大家?guī)?lái)更多基于VectorCAST/C++的動(dòng)態(tài)測(cè)試相關(guān)內(nèi)容。同時(shí)也歡迎垂詢和溝通,共同探討測(cè)試相關(guān)問(wèn)題。
文中圖片來(lái)源于VectorCAST/C++工具截圖。
參考文獻(xiàn):
[1]《程序員的自我修養(yǎng)—鏈接、裝載與庫(kù)》
[2] VectorCAST/C++工具幫助文檔
-
測(cè)試
+關(guān)注
關(guān)注
8文章
5174瀏覽量
126488
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論