書接上回:代碼的黑盒測試(上)|目標文件測試Object File Testing,我們首先介紹了編譯的基本過程——預處理(Prepressing)、編譯(compile)、匯編(Assembly)和鏈接(Linking),然后著重介紹了代碼黑盒測試的第一種方法——VectorCAST/C++的目標文件的測試方法,解決了在無可用源代碼的情況下,對其相應目標文件的測試。
其實一個代碼工程除了開發人員手寫代碼外,還包含了很多庫文件,甚至有的庫文件或是經過開發人員修改或是直接由開發人員編寫的。那么對于這些文件又該如何測試呢?請看如下分解!
一、庫接口測試
(一)庫文件
這里的“庫”,就是庫文件,一般是指編譯好的二進制文件,用于在鏈接階段與目標文件一起生成可執行文件,或者運行可執行文件的時候被加載,以便調用庫文件中的某段代碼。
與可執行文件不同的是,庫文件無法直接執行。直觀上來看,庫文件的源代碼中沒有main函數,而只是一些函數模塊的定義和實現,沒有運行的入口主函數,無法直接執行。
(二)靜態庫與動態庫
庫文件可分為靜態庫和動態庫。它們區別主要體現在程序的鏈接階段——靜態庫的代碼是在編譯過程中被載入程序中的,這就說明,只要程序編譯完成,程序就不受靜態庫的影響;動態庫的代碼在編譯的時候并沒有被編譯進入程序中,只是在程序運行時根據程序需要動態的加載到內存中。
(三)相關文件的一些擴展名
- win32平臺下,靜態庫通常后綴為.lib,動態庫為.dll。
- Linux平臺下,靜態庫通常后綴為.a,動態庫為.so。
從本質上來說,由同一段程序編譯出來的靜態庫和動態庫,在功能上是沒有區別的;不同之處僅僅在于其名字上,也就是“靜態”和“動態”。開發人員只需要將.h/.hpp頭文件和.lib/.so文件提交給其他開發人員,他們就可以直接使用.lib/.so文件中定義的函數了。靜態庫和動態庫的具體使用由開發人員決定。
(四)庫接口測試
庫接口測試允許客戶在沒有可用源代碼的情況下,對現有庫文件創建測試。在測試時,可以將第三方庫或者被修改的第三方庫作為一個對象庫文件和API定義(頭文件)。可以為API創建測試用例,來驗證應用程序庫函數的正確性,而無需訪問源代碼。
在代碼開發中,通常會將一些常用的函數封裝成一個庫,提供接口給其它程序文件調用,省去重復寫該函數接口。當使用該函數時,只需要直接將所需要的文件鏈接到程序中即可,大大提高了開發效率。依照這個原理,我們也可以針對一些代碼程序根據測試需要,將某些源代碼編譯生成相應的靜態庫文件或動態庫文件,以完成代碼功能測試。
二、利用VectorCAST/C++進行庫接口測試
對于如何使用VectorCAST/C++進行靜態庫或者動態庫的單元測試,下面我們仍使用上篇文章中的點餐服務程序(采用GCC編譯鏈),來具體說明。
(一)點餐服務程序的結構內容及說明
圖 1點餐服務程序的結構內容及說明
(二)利用VectorCAST/C++進行靜態庫接口測試
1、靜態庫文件的生成
對于這個點餐主程序manager_driver.c,我們可以將manager.c和database.c分別作為一個調用的庫文件來使用,也可以一起作為一個調用的庫文件來使用。本例中,將manager.c和database.c一起作為一個調用的庫文件來使用。
使用一個BAT腳本生成靜態庫文件,腳本內容如下:
set path=%VECTORCAST_DIR%\mingw\bin;%PATH%
gcc -c manager.c
gcc -c database.c
ar rcs manager_driver.lib manager.o database.o
說明:無論靜態庫,還是動態庫,都是在*.o目標文件基礎上生成的。
2、環境構建基本過程
VectorCAST環境構建的基本過程在代碼的黑盒測試(上)|目標文件測試Object File Testing有詳細說明,這里不再贅述,對于不同的以及需要注意的地方,有如下說明:
本例中,我們是利用manager.c和database.c一起生成靜態庫文件manager_driver.lib的,所以在構建測試環境的第3步需要選擇“庫接口測試方法”并在“Link Options”添加該文件及所在路徑,如圖2所示。同時在構建測試環境的第6步添加需要的頭文件,有manager.h和database.h,如圖3所示。
圖2選擇添加靜態庫文件manager_driver.lib
圖3選擇添加頭文件manager.h或database.h
3、測試用例編寫與執行
按照上述說明成功構建測試環境。編寫測試用例及執行測試用例,結果如下圖4所示。
圖4測試用例編寫與執行
細心的小伙伴可以注意到上圖左邊部分只有顯示了執行狀態圖標,因為我們采用的該種測試屬于黑盒測試方法,所以我們在構建環境的第4步,沒有勾選“Whitebox”前面的復選框,自然也沒有結構覆蓋度圖標。
(三)利用VectorCAST/C++進行動態庫接口測試
1、動態庫文件的生成
與靜態庫文件生成類似,將manager.c和database.c一起作為一個調用的動態庫文件來使用。
使用一個BAT腳本生成動態庫文件,腳本內容如下:
set path=%VECTORCAST_DIR%\mingw\bin;%PATH%
gcc -c -fPIC manager.c -o manager_dyn.o
gcc -c -fPIC database.c -o database_dyn.o
gcc manager_dyn.o database_dyn.o -shared -o libmanager_drive.dll
2、環境構建基本過程
動態庫接口測試與靜態庫接口測試基本一致,不同的地方如下說明:
此例中,我們仍利用manager.c和database.c一起生成動態庫文件manager_driver.dll,所以在構建測試環境的第3步選擇“庫接口測試方法”并在“Link Options”添加該動態庫dll文件,如圖5所示。后面的操作與靜態庫接口測試一致,故不在贅述。
圖5選擇添加動態庫文件manager_driver.dll
三、總結
本文提供了代碼黑盒測試的第二種方法——庫接口測試,可以利用工具為API創建測試用例,來驗證應用程序庫函數的正確性,而無需訪問源代碼,感興趣的同學可以嘗試下。
VectorCAST/C++作為Vector公司的代碼動態測試工具,支持自動生成測試用例,提供完善的覆蓋度信息,還可以與Git/SVN/Jekins等工具集成等等;后續也會為大家帶來更多基于VectorCAST/C++的動態測試相關內容;同時也歡迎垂詢和溝通,共同探討測試相關問題。
北匯信息作為Vector中國的合作伙伴,始終專注于汽車電子領域的新技術和新產品,為整車廠和零部件企業提供完整的研發、測試解決方案,為工程師在汽車領域提供“趁手裝備“!
-
測試
+關注
關注
8文章
5308瀏覽量
126683
發布評論請先 登錄
相關推薦
評論