本文將通過演示實例介紹VectorCAST/QA如何在LiteOS-A內(nèi)核上實現(xiàn)系統(tǒng)白盒測試,獲取被測程序的代碼覆蓋信息。具體實現(xiàn)在支持sudo超級用戶模式的Ubuntu 18.04(或以上)版本中,調(diào)試目標板是i.MX6ULL開發(fā)板(鴻蒙OS官方認可適配)。
VectorCAST/QA介紹
1.1
VectorCAST/QA功能與優(yōu)勢
VectorCAST工具集包含兩款測試工具:針對單元集成測試的VectorCAST/C++,和實現(xiàn)系統(tǒng)白盒測試的VectorCAST/QA。區(qū)別于單元測試的測試對象是函數(shù)組件,系統(tǒng)白盒測試的對象則是系統(tǒng)整體編譯后的程序。VectorCAST/QA通過集成被測項目程序的編譯/構建環(huán)境和已有的測試基礎架構,獲取系統(tǒng)測試所需的關鍵指標。
VectorCAST/QA具有以下功能和優(yōu)勢:
自動對項目源代碼添加代碼覆蓋率接口;
沿用項目已有的系統(tǒng)測試框架和測試用例;
獲取在系統(tǒng)測試階段的代碼覆蓋率信息;
測試用例和代碼覆蓋率信息逐一對應。
1.2
VectorCAST/QA工作流
VectorCAST/QA會自動對被測源文件插裝(區(qū)別于單元集成測試的Stub插樁,對程序的插樁Instrumentation可以理解為插覆蓋率函數(shù)接口)添加覆蓋率測試接口,同時工具會在目標板的RAM 內(nèi)存中分配出一段內(nèi)存空間,用以存放一個固定名字的char類型全局數(shù)組,該數(shù)組實時保存覆蓋率信息,用戶可以通過讀取該數(shù)組獲取覆蓋率結果,數(shù)組大小可通過工具配置選項進行設置。
VectorCAST/QA測試配置步驟
2.1
創(chuàng)建VCAST工程
在構建VectorCAST/QA系統(tǒng)測試環(huán)境之前,需要首先創(chuàng)建VCAST工程;
1.
通過包含全局變量定義等的腳本文件VCAST_LAUNCH.sh啟動VCAST
sudo bash 。/VCAST_LAUNCH.sh 或者 source VCAST_LAUNCH.sh;
2.
在VCSAT打開后,如果需要打開已有測試項目
File-》Open 選擇*vcm文件;
3.
如若需要創(chuàng)建新項目
若是第一次創(chuàng)建項目,切記需首先創(chuàng)建項目保存路徑,F(xiàn)ile-》Set Working Directory 選擇測試項目保存的路徑;
可選擇創(chuàng)建空項目New-》VectorCAST Project-》Empty Project,同時根據(jù)項目需求設定項目名稱和選擇交叉編譯工具鏈;
亦或通過實際的項目選擇配置包中自帶的模板CFG,New-》VectorCAST Project-》From Configuration File。
2.2
配置QA測試環(huán)境
創(chuàng)建完VCAST工程,再創(chuàng)建QA測試環(huán)境從而完成環(huán)境的配置,右鍵Group-》Create System Test Environment-》Interactive。
配置QA測試環(huán)境共包含五個步驟,具體配置步驟如下:
1.
選擇編譯器
配置QA 環(huán)境的第一步需要結合具體項目配置選擇編譯器,本文項目選擇Clang編譯器,Preprocessor command 需要和目標板適配;
2.
環(huán)境命名
在配置環(huán)境的第二步驟中,自定義環(huán)境名稱,例如本項目中環(huán)境命名為123;
3.
加載源文件
配置的第三步加載被測源文件,其中Base Directory指向源碼最上層的父目錄,然后選擇目錄文件中要添加到測試環(huán)境中的源文件,本文項目中只包含hello.c源文件;
4.
覆蓋率類型
配置的第四步根據(jù)項目測試需求設置覆蓋率測試類型,本項目選擇Statement+Branch即語句分支覆蓋。覆蓋率類型選擇的配置亦可在環(huán)境創(chuàng)建后針對具體被測文件的需求進行設置,可參見本文2.3章節(jié),其他配置選項可選擇默認;
5.
編譯
當前述配置步驟執(zhí)行完畢后,即可點擊配置界面右下角的Build進行環(huán)境編譯。
2.3
代碼覆蓋率插裝
當環(huán)境編譯成功后,通過雙擊工程視圖中的環(huán)境名稱進入到環(huán)境視圖,勾選Tools-》Options-》Coverage-》Save data in ASCII format in memory,從而將覆蓋率信息實時保存在RAM中,可通過串口等工具實時獲取覆蓋率信息,存儲覆蓋率信息的數(shù)組的大小可通過Maximum size for ASCII buffer調(diào)控,不勾選則為工具默認值,配置完成后點擊Apply;
進入環(huán)境視圖后可看見被添加的所有測試源文件,通過右鍵示例的hello.c-》Set Coverage Type可以配置要測試的覆蓋率類型;
覆蓋率類型設置完成后,再次選擇被測文件hello.c右鍵-》Instrument 實現(xiàn)插裝;如果出現(xiàn)某些頭文件找不到的錯誤,可以在Tools-》options-》C/C++-》Preprocessor/Compiler-》Include Directories通過+號來添加搜索路徑。(++ 代表遞歸的添加路徑中的子路徑)
執(zhí)行完上述步驟后,點擊File-》Close Environment關閉QA環(huán)境。在工程視圖中右鍵環(huán)境,選擇System Testing-》Apply Coverage to Source Tree-》Always,該配置選項將會使得覆蓋接口代碼直接插樁到被測源文件中,同時工具會對被測前的源文件進行備份,我們將在第3章節(jié)的測試實例中進行比對,至此完成QA 測試的所有配置步驟。
VectorCAST/QA測試實例
經(jīng)過第2章節(jié)的配置,可以獲得經(jīng)過插裝且?guī)в懈采w率接口的hello.c文件,通過交叉編譯工具鏈進行編譯即可將程序燒錄到目標板中進行系統(tǒng)測試。
3.1
插樁前后源代碼對比
如2.3章節(jié)所述,hello.c源文件被插樁前將會被VectorCAST工具自動備份為hello.c.vcast.bak,文件將會保存在被測源文件路徑下參見圖9,圖10和11進行QA覆蓋率接口插樁前后的源文件對比。
下圖為插樁后代碼,當前打開的即是插裝后的hello.c文件,vcast_ascii_coverage_data_pool便是QA工具自動創(chuàng)建的用以存儲代碼覆蓋率信息的數(shù)組,其中printf(“%s”,vcast_ascii_coverage_data_pool)及后面的文件存儲代碼為手動添加,目的是支持本次項目調(diào)試過程中可以通過串口實時查看目標板打印的覆蓋率信息,同時覆蓋率結果文件存儲在目標板中亦可通過其他調(diào)試方法發(fā)送給上位機,用戶可以依據(jù)目標板的配置選擇不同的獲取覆蓋率信息的方式。
插樁后代碼
3.2
編譯可執(zhí)行文件
1.
通過交叉編譯工具鏈對插樁后的hello.c文件進行交叉編譯,獲得可執(zhí)行文件hello;
clang -target arm-liteos --sysroot=/home/vector123/book/openharmony/prebuilts/lite/sysroot/ -o hello hello.c;
2.
將hello存入到根目錄rootfs;
cp hello /home/vector123/book/openharmony/kernel/liteos_a/out/imx6ull/rootfs/bin
3.
重新制作rootfs.jffs2,并將rootfs.jffs2燒錄到目標板。
mkfs.jffs2 -s 0x10000 -e 0x10000 -d rootfs -o rootfs.jffs2
3.3
獲取覆蓋率結果
燒錄完rootfs.jffs2文件后,上位機通過MobaXterm工具進行在線調(diào)試。
輸入。/bin/hello命令運行hello程序,如圖所示,獲得hello.c源代碼中的打印語句以及覆蓋率結果信息,同時覆蓋率結果存儲在目標板系統(tǒng)中,存儲地址取決于插樁時設定的文件存儲路徑,結果存儲在根目錄下的QA01.DAT文件中,如圖所示;
打印語句與覆蓋率結果
覆蓋率存儲文件
3.4
生成覆蓋率報告
通過將生成的覆蓋率結果文件QA01.DAT加載至VectorCAST工具進行解析,即可獲得覆蓋度報告,具體步驟如下:
1.
右鍵Environment-》Add Test Results 選擇路徑下的結果文件,選擇QA01.DAT;
2.
添加完成后即可在左側的環(huán)境視圖中觀察到覆蓋率結果文件QA01.DAT,勾選該文件即可生成覆蓋率報告,當有多組不同的覆蓋率測試時,可以導入多個不同的測試結果文件,以實現(xiàn)測試和代碼覆蓋率的逐一對應;
3.
通過Environment-》view-》Aggregate Coverage Report即可獲取到覆蓋率報告,報告顯示百分百覆蓋。
編輯:jq
-
集成
+關注
關注
1文章
176瀏覽量
30189 -
QA
+關注
關注
0文章
7瀏覽量
9001 -
代碼
+關注
關注
30文章
4722瀏覽量
68229 -
編譯器
+關注
關注
1文章
1617瀏覽量
49015
原文標題:VectorCAST基于華為LiteOS-A內(nèi)核的代碼測試-2
文章出處:【微信號:VectorChina,微信公眾號:Vector維克多】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論