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

    文章

    180

    浏览量

    30944
  • QA
    QA
    +关注

    关注

    0

    文章

    7

    浏览量

    9144
  • 代码
    +关注

    关注

    30

    文章

    4985

    浏览量

    74587
  • 编译器
    +关注

    关注

    1

    文章

    1673

    浏览量

    52116

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    黑盒监控和监控的区别

    监控是运维的基石,没有监控就像蒙着眼睛开车,不知道车开到哪里了、速度多少、油还剩多少。但监控本身也有讲究:黑盒监控和监控是两种互补的监控方式,很多团队只重视其中一种,导致监控体系存在盲区。
    的头像 发表于 05-25 11:11 325次阅读

    何在 S32DS 实现 CMSIS-DSP ?

    Hi, 有人可以告诉我如何在 S32DS 实现 CMSIS-DSP 吗?我想在 S32K3 使用 FFT。谢谢。
    发表于 05-21 08:15

    【文章转载】你不知道的Vector | VectorCAST/C++的AI辅助测试功能

    从2026版本开始,VectorCAST/C++推出首批AI辅助测试功能,旨在帮助开发团队解决单元测试过程中的两个核心难点:1.如何根据需求描述自动生成可验证逻辑功能的单元测试用例(R
    的头像 发表于 04-29 10:03 367次阅读
    【文章转载】你不知道的Vector | <b class='flag-5'>VectorCAST</b>/C++的AI辅助<b class='flag-5'>测试</b>功能

    使用VectorCAST/C++的AI辅助测试功能

    从2026版本开始,VectorCAST/C++推出首批AI辅助测试功能,旨在帮助开发团队解决单元测试过程中的两个核心难点:
    的头像 发表于 04-27 14:37 427次阅读

    深入解析MC9S08QA4:低功耗高性能微控制器的全方位指南

    展现出了卓越的优势。今天,我们就来深入探讨一下MC9S08QA4的特性、功能以及如何在实际设计中应用它。 文件下载: MC9S08QA4CDNE.pdf 一、芯片概述 MC9S08QA
    的头像 发表于 04-14 17:05 514次阅读

    英特尔EN6310QA 1A PowerSoC:高效电源解决方案解析

    英特尔EN6310QA 1A PowerSoC:高效电源解决方案解析 在电子设计领域,电源管理芯片的性能和特性对整个系统的稳定运行至关重要。今天,我们就来深入探讨英特尔的EN6310QA
    的头像 发表于 03-30 14:50 231次阅读

    探索EN6337QA 3A PowerSoC:高效电源解决方案的秘密

    探索EN6337QA 3A PowerSoC:高效电源解决方案的秘密 在电子设备的世界里,电源管理至关重要。今天,我们将深入了解一款高性能的电源解决方案——EN6337QA 3A Po
    的头像 发表于 03-29 14:05 223次阅读

    VectorCAST/QA与Bazel集成配置方法

    VectorCAST/QAVectorCAST产品族中用于统计系统测试过程中代码覆盖度的软件工具。
    的头像 发表于 03-11 17:00 660次阅读
    <b class='flag-5'>VectorCAST</b>/<b class='flag-5'>QA</b>与Bazel集成配置方法

    还在手写C++测试用例? Parasoft级AI正在接管代码安全

    深度“内建” 。 今天,我们就来深扒一款被全球顶尖车企和军工企业悄悄当作“测试永动机”的工具—Parasoft C/C++test。它不是普通的测试插件,而是能深入代码盒内部,进行自动化手术级扫描的AI驱动
    的头像 发表于 03-06 10:46 402次阅读
    还在手写C++<b class='flag-5'>测试</b>用例? Parasoft<b class='flag-5'>白</b><b class='flag-5'>盒</b>级AI正在接管代码安全

    何在 S32G3 的 M7 和 A53 内核之间建立 IPCF 通信?

    我能够成功并行启动 S32G3 的 M7 和 A53 内核。对于 M7 内核,我在 U-Boot 时停止,将固件加载到 SRAM 中,然后手动执行它。我的目标是在两个内核之间建立 IP
    发表于 03-05 07:28

    何在 VF2 编译东西?

    了 gcc 的 riscv 版本,但我在这里不知所措。 你们中的一些人设法在 VF2 编译了该模块。 你能写一个简短的 gnereic 指南,介绍如何在黑板编译它吗? 这也可以用作通用编译指南,我想不仅仅是
    发表于 03-03 07:15

    何在DGX Spark运行NVIDIA Omniverse

    首先感谢 Vigor 同学第一时间的分享,以下是具体如何在 DGX Spark 运行 Omniverse 的方法。
    的头像 发表于 12-17 10:13 1068次阅读
    如<b class='flag-5'>何在</b>DGX Spark<b class='flag-5'>上</b>运行NVIDIA Omniverse

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

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

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

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

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

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