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