VectorCAST/QA是VectorCAST產品族中用于統(tǒng)計系統(tǒng)測試過程中代碼覆蓋度的軟件工具。為降低配置難度,傳統(tǒng)的VectorCAST/QA系統(tǒng)測試項目通常使用手動操作方式完成以下步驟:
>創(chuàng)建系統(tǒng)測試環(huán)境
>添加待插裝源碼
>設置覆蓋度類型并插裝
>導入或查看覆蓋度數據
對于使用Bazel構建的大型項目,當需要統(tǒng)計覆蓋度的源碼量大時,手動添加被測源碼需要了解項目組織結構。更快捷的方法是在Bazel構建的過程中,由VectorCAST/QA自動完成創(chuàng)建測試環(huán)境,根據構建目標自動添加插裝的源碼列表,并完成插裝、測試結果加載,以及生成測試報告的工作。
VectorCAST的JIT(Just In Time)功能可以實現上述目標。VectorCAST JIT功能提供一系列VectorCAST工具的API接口,可用于在項目構建時完成上述步驟。下面將具體介紹在Ubuntu發(fā)行版本中,如何實現VectorCAST/QA與Bazel構建工具的集成方法。
01配置集成
下載VectorCAST/QA的Bazel規(guī)則集
VectorCAST/QA的Bazel規(guī)則集是將VectorCAST/QA的JIT API基于Bazel構建工具進行更高層次的封裝,以便在Bazel build或Bazel test構建過程中更便捷的調用JIT API。因此,需要將此規(guī)則集下載到測試機中。
導入VectorCAST規(guī)則集
打開項目對應的.bazelrc文件,導入VectorCAST/QA的Bazel規(guī)則集:
import{absolute_or_local_path/to/rules_vectorcast}/vectorcast.rc
上述語句中,斜體部分應改為插件文件vectorcast.rc的實際路徑,可以是相對于當前.bazelrc的相對路徑,也可以是絕對路徑。示例如下:

圖1:bazelrc導入vectorcast.rc規(guī)則集
配置Bazel項目
為了使用VectorCAST/QA的JIT功能,需要對項目進行配置。
有兩種配置方法:
方法一:配置WORKSPACE文件,添加對VectorCAST/QA JIT的支持;
方法二:當項目開啟Bzlmod時,配置MODULE.bazel來添加對VectorCAST/QA JIT的支持。
配置WORKSPACE
打開項目的根目錄中的WORKSPACE文件,添加如下配置:
local_repository(
name = "rules_vectorcast",
path ="{absolute_or_local_path/to/rules_ vectorcast}"
)
load("@rules_vectorcast//:deps.bzl", "rules_vectorcast_dependencies")
rules_vectorcast_dependencies()
load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")
bazel_skylib_workspace()
load("@rules_vectorcast//:workspace.bzl", "vectorcast_tools")
vectorcast_tools(
name = "vectorcast_tools",
)
以上配置中,斜體部分應改為插件文件vectorcast.rc的實際路徑,可以是相對于當前WORKSPACE的相對路徑,也可以是絕對路徑。
示例如下:

圖2:配置WORKSPACE
配置MODULE.bazel
打開項目的根目錄中的MODULE.bazel文件,添加如下配置:
bazel_dep(name = "rules_vectorcast")
local_path_override(
module_name = "rules_vectorcast",
path = "{absolute_or_local_path/to/rules_ vectorcast}"
)
vectorcast_tools_extension=use_extension("@rules_vectorcast//:extensions.bzl", "vectorcast_tools_extension")
vectorcast_tools_extension.tools()
use_repo(vectorcast_tools_extension, "vectorcast_tools")
以上配置中,斜體部分應改為插件文件vectorcast.rc的實際路徑,可以是相對于當前MODULE.bazel的相對路徑,也可以是絕對路徑。
示例如下:

圖3:配置MODULE.bazel
配置構建規(guī)則
配置完Bazel項目和Bazel工具本身使用VectorCAST規(guī)則集后,還需要在構建目標對應的BUILD.bazel文件中加載該規(guī)則集。具體的方法如下:
找到Bazel build構建目標,或者build test目標所在的BUILD.bazel文件
編輯BUILD.bazel文件,首行添加load語句加載指定規(guī)則。
配置如下:
load("@rules_vectorcast//:def.bzl", "vectorcast_binary")
在文件末尾添加vectorcast_binary配置,用于生成包含覆蓋度插裝代碼的可執(zhí)行程序。其中,
target_to_instrument指原始構建目標的名稱;
name為新生成的包含插裝代碼的新可執(zhí)行程序的名稱:
vectorcast_binary(
name = "manager_driver_instrumented",
target_to_instrument = ":manager_driver"
)
在下圖示例中:
構建目標是可執(zhí)行程序:manager_driver
首行使用load加載bazel規(guī)則
末尾配置插裝生成新可執(zhí)行程序的名稱

圖4 配置目標的構建規(guī)則
配置構建指令
使用VectorCAST/QA JIT功能還需要在最終的Bazel構建指令中開啟VectorCAST JIT功能。
只需要在最終的Bazel build或者Bazel test指令中添加以下選項:
--config=vectorcast:開啟VectorCAST JIT
--vectorcast_compiler_tag=
目前可支持Bazel集成的編譯鏈Tag列表如下:
GNU_CPP_X
GNU_CPP98_X
GNU_CPP03_X
GNU_CPP11_X
GNU_CPP14_X
GNU_CPP17_X
GNU_CPP20_X
CLANG_CPP_X
CLANG_CPP98_X
CLANG_CPP03_X
CLANG_CPP11_X
CLANG_CPP14_X
CLANG_CPP17_X
CLANG_CPP20_X
--vectorcast_coverage_type=
STATEMENT+BRANCH:覆蓋度類型,可選類型有:
STATEMENT+MC/DC
STATEMENT+BRANCH
STATEMENT
FUNCTION
MC/DC
BRANCH
FUNCTION+FUNCTION_CALL
下圖為示例項目中生成可執(zhí)行程序的腳本。在Bazel build指令中添加了如下配置,以開啟VectorCAST JIT插裝,使用編譯鏈為GNU C++編譯鏈;插裝覆蓋度類型為語句和分支:
--config=vectorcast--vectorcast_compiler_tag=GNU_CPP_X--vectorcast_coverage_type=STATEMENT+BRANCH

圖5:配置Bazel構建指令
注意:對于Bazel 7.1.2及更低版本,需要額外添加配置:--spawn_strategy=local
02構建項目
完成前述配置后,即可開始構建項目。以下是示例項目的完整構建腳本,包含構建目標可執(zhí)行程序、模擬手動執(zhí)行用例、以及加載測試數據等所有操作。

圖6:完整構建腳本
進入項目目錄,直接執(zhí)行project_build.sh,等待構建完成。

圖7:構建示例項目
構建完成后,會打印最終生成的HTML報告完整路徑信息,如下圖所示。

圖8:測試報告路徑
使用瀏覽器打開management_report.htm測試報告,內容如下:

圖9:測試報告示例
互動專區(qū)
歡迎在留言區(qū)提出您的意見和建議,參與即有機會獲得精美禮品。
包括但不限于:
>期望未來VectorCAST產品支持哪些新特性。
>期望以何種方式(圖文或視頻)更深入了解VectorCAST產品的哪些特性。
我們將從參與互動的用戶中隨機抽取 5 位,送出一份精美定制禮品,期待您的建議!
-
接口
+關注
關注
33文章
9527瀏覽量
157103 -
代碼
+關注
關注
30文章
4970瀏覽量
74018 -
Vector
+關注
關注
3文章
100瀏覽量
10046
原文標題:VectorCAST/QA與Bazel集成配置方法
文章出處:【微信號:VectorChina,微信公眾號:Vector維克多】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
請問在NXP板的BSP QA過程中采用了哪些具體的測試方法?
NPA1003QA射頻晶體管
tflite mcu怎么使用
onnxruntime-1.8.2-r0 do_package_qa:QA 運行發(fā)現致命錯誤怎么解決?
電位器整定的定時器專用電路QA640896 QA640892
電位器整定的定時器專用電路QA640896/QA640892
基于知識圖譜的QA系統(tǒng)研究
LV52117QA 用于LCD面板的雙輸出DC-DC轉換器
LV5762QA 降壓型開關穩(wěn)壓器
QA3000加速計的數據手冊免費下載
VectorCAST/QA如何在LiteOS-A內核上實現系統(tǒng)白盒測試
直播預告 | VectorCAST-嵌入式軟件代碼自動化測試方案
VectorCAST 對基于***的軟件代碼開發(fā)支持
VectorCAST/QA與Bazel集成配置方法
評論