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

    文章

    176

    浏览量

    30208
  • QA
    QA
    +关注

    关注

    0

    文章

    7

    浏览量

    9005
  • 代码
    +关注

    关注

    30

    文章

    4762

    浏览量

    68408
  • 编译器
    +关注

    关注

    1

    文章

    1618

    浏览量

    49075

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

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

收藏 人收藏

    评论

    相关推荐

    如何测试LM2572电路的开环相噪?如何在TIC Pro配置参数?

    客户想测试LM2572电路的开环相噪,想请教一下测试的方法以及应如何在TIC Pro配置参数。
    发表于 11-11 06:43

    何在MSP430™实现内置振荡器的高精度定时器

    电子发烧友网站提供《如何在MSP430™实现内置振荡器的高精度定时器.pdf》资料免费下载
    发表于 09-14 11:10 0次下载
    如<b class='flag-5'>何在</b>MSP430™<b class='flag-5'>上</b><b class='flag-5'>实现</b>内置振荡器的高精度定时器

    何在采用 SOT563 封装的 TPS56x242-7 实现更良好的热性能

    电子发烧友网站提供《如何在采用 SOT563 封装的 TPS56x242-7 实现更良好的热性能.pdf》资料免费下载
    发表于 09-12 11:07 0次下载
    如<b class='flag-5'>何在</b>采用 SOT563 封装的 TPS56x242-7 <b class='flag-5'>上</b><b class='flag-5'>实现</b>更良好的热性能

    何在DRA821U使用Linux实现快速引导

    电子发烧友网站提供《如何在DRA821U使用Linux实现快速引导.pdf》资料免费下载
    发表于 09-03 10:11 0次下载
    如<b class='flag-5'>何在</b>DRA821U<b class='flag-5'>上</b>使用Linux<b class='flag-5'>实现</b>快速引导

    Linux内核测试技术

    内核测试技术是实现这一目标的关键手段。本文将详细介绍 Linux 内核测试的各种技术,包括单元测试
    的头像 发表于 08-13 13:42 446次阅读
    Linux<b class='flag-5'>内核</b><b class='flag-5'>测试</b>技术

    ATE测试STM32如何通过pattern控制内核

    ATE测试STM32如何通过pattern控制内核,或者说如何才能实现MCU中AD模块,存储器模块等模块功能性测试。MCU不同与逻辑芯片、AD芯片或者存储器芯片,举例来说:AD芯片
    发表于 07-23 07:20

    请问如何在Windows(Msys)设置NONOS系统

    何在Windows(Msys)设置NONOS系统
    发表于 07-08 08:29

    功能测试还是黑盒测试

    功能测试是软件测试的一种方法,主要用于验证软件的功能是否满足需求规格说明书中的要求。功能测试可以采用
    的头像 发表于 05-30 14:53 779次阅读

    何在STM32MP157C DK2实现管脚输出PTP的PPS信号?

    的步骤如何? 例如设置一个STM32MP157C 为master,另一个STM32MP157C 为slave , 进行网络时钟同步。 可以安装运行PTP4L这样的程序吗? 另外如何在 STM32MP157C DK2 实现管脚输
    发表于 04-11 07:18

    【鸿蒙】小型系统LiteOS-A内核

    LiteOS-A 内核 移植概述 移植场景 LiteOS-A 当前支持 ARMv7-a 指令集架构,如果三方芯片为 ARMv7-a 架构,可
    的头像 发表于 02-29 16:16 1129次阅读
    【鸿蒙】小型<b class='flag-5'>系统</b><b class='flag-5'>LiteOS-A</b><b class='flag-5'>内核</b>

    何在测试中使用ChatGPT

    Dimitar Panayotov 在 2023 年 QA Challenge Accepted 大会 分享了他如何在测试中使用 ChatGPT。
    的头像 发表于 02-20 13:57 729次阅读

    鸿蒙轻内核源码分析:Newlib C

    使用 Musl C 库的时候,内核提供了基于 LOS_XXX 适配实现 pthread、mqeue、fs、semaphore、time 等模块的 posix 接口(//kernel/liteos
    的头像 发表于 02-18 15:41 656次阅读
    鸿蒙轻<b class='flag-5'>内核</b>源码分析:Newlib C

    何在鸿蒙系统安装Google Play

    。但是,通过以下简易步骤仍然可以在鸿蒙系统安装Google Play。 了解鸿蒙系统和Google Play之间的不兼容性 鸿蒙系统的背景介绍 鸿蒙
    的头像 发表于 01-31 17:13 1.5w次阅读

    何在KW45-EVK使用RTC

    电子发烧友网站提供《如何在KW45-EVK使用RTC.pdf》资料免费下载
    发表于 01-03 09:41 0次下载
    如<b class='flag-5'>何在</b>KW45-EVK<b class='flag-5'>上</b>使用RTC

    VectorCAST 对基于***的软件代码开发支持

    的技术挑战,其中之一就是确保国产芯片开发和应用的质量和可靠性。VectorCAST工具的应用为解决这一挑战提供了强大的支持,它具有丰富的测试功能,有助于确保基于国产芯
    的头像 发表于 12-14 08:25 500次阅读
    <b class='flag-5'>VectorCAST</b> 对基于***的软件代码开发支持