0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

VectorCAST/QA如何在LiteOS-A内核上实现系统白盒测试

Vector维克多 来源:Vector维克多 作者:顾健 2021-06-26 16:21 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文将通过演示实例介绍VectorCAST/QA如何在LiteOS-A内核上实现系统白盒测试,获取被测程序的代码覆盖信息。具体实现在支持sudo超级用户模式的Ubuntu 18.04(或以上)版本中,调试目标板是i.MX6ULL开发板(鸿蒙OS官方认可适配)。

VectorCAST/QA介绍

1.1

VectorCAST/QA功能与优势

VectorCAST工具集包含两款测试工具:针对单元集成测试的VectorCAST/C++,和实现系统白盒测试的VectorCAST/QA。区别于单元测试的测试对象是函数组件,系统白盒测试的对象则是系统整体编译后的程序。VectorCAST/QA通过集成被测项目程序的编译/构建环境和已有的测试基础架构,获取系统测试所需的关键指标。

VectorCAST/QA具有以下功能和优势:

自动对项目源代码添加代码覆盖率接口

沿用项目已有的系统测试框架和测试用例;

获取在系统测试阶段的代码覆盖率信息;

测试用例和代码覆盖率信息逐一对应。

1.2

VectorCAST/QA工作流

VectorCAST/QA会自动对被测源文件插装(区别于单元集成测试的Stub插桩,对程序的插桩Instrumentation可以理解为插覆盖率函数接口)添加覆盖率测试接口,同时工具会在目标板的RAM 内存中分配出一段内存空间,用以存放一个固定名字的char类型全局数组,该数组实时保存覆盖率信息,用户可以通过读取该数组获取覆盖率结果,数组大小可通过工具配置选项进行设置。

VectorCAST/QA测试配置步骤

2.1

创建VCAST工程

在构建VectorCAST/QA系统测试环境之前,需要首先创建VCAST工程;

1.

通过包含全局变量定义等的脚本文件VCAST_LAUNCH.sh启动VCAST

sudo bash 。/VCAST_LAUNCH.sh 或者 source VCAST_LAUNCH.sh;

2.

在VCSAT打开后,如果需要打开已有测试项目

File-》Open 选择*vcm文件;

3.

如若需要创建新项目

若是第一次创建项目,切记需首先创建项目保存路径,File-》Set Working Directory 选择测试项目保存的路径;

可选择创建空项目New-》VectorCAST Project-》Empty Project,同时根据项目需求设定项目名称和选择交叉编译工具链;

亦或通过实际的项目选择配置包中自带的模板CFG,New-》VectorCAST Project-》From Configuration File。

2.2

配置QA测试环境

创建完VCAST工程,再创建QA测试环境从而完成环境的配置,右键Group-》Create System Test Environment-》Interactive。

配置QA测试环境共包含五个步骤,具体配置步骤如下:

1.

选择编译器

配置QA 环境的第一步需要结合具体项目配置选择编译器,本文项目选择Clang编译器,Preprocessor command 需要和目标板适配;

2.

环境命名

在配置环境的第二步骤中,自定义环境名称,例如本项目中环境命名为123;

3.

加载源文件

配置的第三步加载被测源文件,其中Base Directory指向源码最上层的父目录,然后选择目录文件中要添加到测试环境中的源文件,本文项目中只包含hello.c源文件;

4.

覆盖率类型

配置的第四步根据项目测试需求设置覆盖率测试类型,本项目选择Statement+Branch即语句分支覆盖。覆盖率类型选择的配置亦可在环境创建后针对具体被测文件的需求进行设置,可参见本文2.3章节,其他配置选项可选择默认;

5.

编译

当前述配置步骤执行完毕后,即可点击配置界面右下角的Build进行环境编译。

2.3

代码覆盖率插装

当环境编译成功后,通过双击工程视图中的环境名称进入到环境视图,勾选Tools-》Options-》Coverage-》Save data in ASCII format in memory,从而将覆盖率信息实时保存在RAM中,可通过串口等工具实时获取覆盖率信息,存储覆盖率信息的数组的大小可通过Maximum size for ASCII buffer调控,不勾选则为工具默认值,配置完成后点击Apply;

进入环境视图后可看见被添加的所有测试源文件,通过右键示例的hello.c-》Set Coverage Type可以配置要测试的覆盖率类型;

覆盖率类型设置完成后,再次选择被测文件hello.c右键-》Instrument 实现插装;如果出现某些头文件找不到的错误,可以在Tools-》options-》C/C++-》Preprocessor/Compiler-》Include Directories通过+号来添加搜索路径。(++ 代表递归的添加路径中的子路径)

执行完上述步骤后,点击File-》Close Environment关闭QA环境。在工程视图中右键环境,选择System Testing-》Apply Coverage to Source Tree-》Always,该配置选项将会使得覆盖接口代码直接插桩到被测源文件中,同时工具会对被测前的源文件进行备份,我们将在第3章节的测试实例中进行比对,至此完成QA 测试的所有配置步骤。

VectorCAST/QA测试实例

经过第2章节的配置,可以获得经过插装且带有覆盖率接口的hello.c文件,通过交叉编译工具链进行编译即可将程序烧录到目标板中进行系统测试。

3.1

插桩前后源代码对比

如2.3章节所述,hello.c源文件被插桩前将会被VectorCAST工具自动备份为hello.c.vcast.bak,文件将会保存在被测源文件路径下参见图9,图10和11进行QA覆盖率接口插桩前后的源文件对比。

下图为插桩后代码,当前打开的即是插装后的hello.c文件,vcast_ascii_coverage_data_pool便是QA工具自动创建的用以存储代码覆盖率信息的数组,其中printf(“%s”,vcast_ascii_coverage_data_pool)及后面的文件存储代码为手动添加,目的是支持本次项目调试过程中可以通过串口实时查看目标板打印的覆盖率信息,同时覆盖率结果文件存储在目标板中亦可通过其他调试方法发送给上位机,用户可以依据目标板的配置选择不同的获取覆盖率信息的方式。

8eff145a-d455-11eb-9e57-12bb97331649.png

插桩后代码

3.2

编译可执行文件

1.

通过交叉编译工具链对插桩后的hello.c文件进行交叉编译,获得可执行文件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工具进行在线调试。

输入。/bin/hello命令运行hello程序,如图所示,获得hello.c源代码中的打印语句以及覆盖率结果信息,同时覆盖率结果存储在目标板系统中,存储地址取决于插桩时设定的文件存储路径,结果存储在根目录下的QA01.DAT文件中,如图所示;

8f0dda8a-d455-11eb-9e57-12bb97331649.png

打印语句与覆盖率结果

8f3458fe-d455-11eb-9e57-12bb97331649.png

覆盖率存储文件

3.4

生成覆盖率报告

通过将生成的覆盖率结果文件QA01.DAT加载至VectorCAST工具进行解析,即可获得覆盖度报告,具体步骤如下:

1.

右键Environment-》Add Test Results 选择路径下的结果文件,选择QA01.DAT;

2.

添加完成后即可在左侧的环境视图中观察到覆盖率结果文件QA01.DAT,勾选该文件即可生成覆盖率报告,当有多组不同的覆盖率测试时,可以导入多个不同的测试结果文件,以实现测试和代码覆盖率的逐一对应;

3.

通过Environment-》view-》Aggregate Coverage Report即可获取到覆盖率报告,报告显示百分百覆盖。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 集成
    +关注

    关注

    1

    文章

    178

    浏览量

    30816
  • QA
    QA
    +关注

    关注

    0

    文章

    7

    浏览量

    9134
  • 代码
    +关注

    关注

    30

    文章

    4941

    浏览量

    73130
  • 编译器
    +关注

    关注

    1

    文章

    1669

    浏览量

    51075

原文标题:VectorCAST基于华为LiteOS-A内核的代码测试-2

文章出处:【微信号:VectorChina,微信公众号:Vector维克多】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    科技品牌的2026必修课:如何在CES Asia2026北京消费电子展实现预算与效果的最优解?

    科技品牌的2026必修课:如何在CES Asia2026北京消费电子展实现预算与效果的最优解?
    的头像 发表于 12-02 10:57 170次阅读

    汽车中央控制与线束的自动测试设备

    费思FTS6000线束检测设备汽车线束与中央控制测试系统覆盖客户测试需求,方案成熟。
    的头像 发表于 11-28 15:23 109次阅读
    汽车中央控制<b class='flag-5'>盒</b>与线束的自动<b class='flag-5'>测试</b>设备

    MCU单片机TWS耳机充电系统控制方案

    充电实现供电管理。本方案采用MM32F0010系列MCU作为TWS耳机充电的核心控制器,实现对充放电管理的智能化控制和系统监控。
    的头像 发表于 11-05 09:22 181次阅读

    在qemu上体验芯来RISC-V处理器运行鸿蒙LiteOS-M内核

    在qemu上体验芯来RISC-V处理器运行鸿蒙LiteOS-M内核 1.本文概述 2.下载qemu 3.下载鸿蒙LiteOS-M 4.运行与测试 5.gdb调试 1.本文概述
    发表于 10-31 09:04

    如何利用Verilog HDL在FPGA实现SRAM的读写测试

    本篇将详细介绍如何利用Verilog HDL在FPGA实现SRAM的读写测试。SRAM是一种非易失性存储器,具有高速读取和写入的特点。在FPGA中实现SRAM读写
    的头像 发表于 10-22 17:21 3952次阅读
    如何利用Verilog HDL在FPGA<b class='flag-5'>上</b><b class='flag-5'>实现</b>SRAM的读写<b class='flag-5'>测试</b>

    汽车HIL测试系统,欧美标充电模型Simulink模型,开发,有偿

    提供一个欧美标充电模型,交付物为Simulink模型
    发表于 09-04 16:23

    何在裸机环境中运行KleidiAI微内核

    探索如何在裸机环境中运行 KleidiAI 内核,并通过测试多款 C/C++ 编译器,以确定如何能更高效地生成代码。
    的头像 发表于 08-08 15:16 3626次阅读
    如<b class='flag-5'>何在</b>裸机环境中运行KleidiAI微<b class='flag-5'>内核</b>

    【经验分享】在Omni3576编译Redis-8.0.2源码,并安装及性能测试

    本文首先介绍Redis是什么,然后介绍如何在Omni3576编译Redis-8.0.2源码,以及从源码编译、安装Redis,最后介绍如何在Omni3576运行Redis性能
    的头像 发表于 06-05 08:05 763次阅读
    【经验分享】在Omni3576<b class='flag-5'>上</b>编译Redis-8.0.2源码,并安装及性能<b class='flag-5'>测试</b>

    # quartus ii 9.1对registered adder仿真出错,但硬件能够实现,怎么解决?

    核心问题:在硬件能够实现功能,仿真结果一直出错,并且只有输出S的时候出错。S应该输出a+b的值,仿真一直都是0,但是在硬件能够体现正确结果。 代码如下:module CNT4(
    发表于 04-14 21:35

    S32K311如何在Flash测试ECC?

    我有一些与目标 S32K311 的 Flash ECC 相关的问题 - ERM 是否负责 Code Flash 和 Data Flash ECC 中断通知? - 我们如何在 Flash
    发表于 04-14 08:47

    何在i.MX 8XDXL EVK的A35运行Yocto Linux,在M4运行FreeRTOS?

    我正在使用i.MX 8XDXL 评估套件并希望在 Cortex-A35 运行 Yocto Linux 映像cores 的Cortex-M4 的 FreeRTOS 映像核心。 实现
    发表于 04-04 06:02

    何在RAKsmart服务器实现企业AI模型部署

    AI模型的训练与部署需要强大的算力支持、稳定的网络环境和专业的技术管理。RAKsmart作为全球领先的服务器托管与云计算服务提供商,已成为企业部署AI模型的理想选择。那么,如何在RAKsmart服务器实现企业AI模型的部署呢?
    的头像 发表于 03-27 09:46 758次阅读

    请问在NXP板的BSP QA过程中采用了哪些具体的测试方法?

    哪些工具和软件(NXP i.MX8M Plus Cortex-A53® 2.5 英寸 SBC)? 是否有 QA 期间遇到的问题的案例研究或示例,以及这些问题是如何解决的? 测试人员可以使用哪些资源或文档
    发表于 03-17 08:04

    全国首个!深开鸿LiteOS-M操作系统内核荣获EAL5+安全认证!

    近日,深开鸿在信息安全领域实现重大突破!深开鸿携手北京中关村实验室,通过对开源社区版LiteOS-M内核进行代码级安全加固,成功研发自主可控的增强型LiteOS-M安全
    的头像 发表于 02-24 19:26 793次阅读
    全国首个!深开鸿<b class='flag-5'>LiteOS</b>-M操作<b class='flag-5'>系统</b><b class='flag-5'>内核</b>荣获EAL5+安全认证!

    何在Linux系统设置站群服务器IP地址

    在Linux系统设置站群服务器的IP地址,可以通过以下步骤进行,主机推荐小编为您整理发布如何在Linux系统设置站群服务器IP地址。
    的头像 发表于 12-11 10:05 859次阅读