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

    文章

    172

    浏览量

    30053
  • QA
    QA
    +关注

    关注

    0

    文章

    7

    浏览量

    8964
  • 代码
    +关注

    关注

    30

    文章

    4552

    浏览量

    66628
  • 编译器
    +关注

    关注

    1

    文章

    1569

    浏览量

    48598

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

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

收藏 人收藏

    评论

    相关推荐

    何在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 335次阅读
    【鸿蒙】小型<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 356次阅读

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

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

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

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

    Linux内核时钟系统和定时器实现

    Linux内核时钟系统和定时器实现 Linux 2.6.16之前,内核只支持低精度时钟,内核定时器的工作方式:
    的头像 发表于 11-09 09:12 569次阅读
    Linux<b class='flag-5'>内核</b>时钟<b class='flag-5'>系统</b>和定时器<b class='flag-5'>实现</b>

    何在AT32F系列MCU使用FreeRTOS

    本指导手册描述了如何在AT32F系列MCU使用FreeRTOS。FreeRTOS是一款开源的嵌入式实时操作系统,目前在各种嵌入式应用中应用广泛。本指导手册包括FreeRTOS系统移植
    发表于 10-24 07:46

    全爱科技Atlas200I A2 AI加速模块-FPGA PCIE接口验证平台

    1 评估套件硬件介绍 全爱科技QA200A2 Altas200I A2开发套件 Xilinx FPGA 开发套件-VC709 实物测试组成主要如下: 图 1-1 QA200A
    发表于 09-05 14:39

    何在Windows上搭建LiteOS的开发调试环境

    Huawei LiteOS是华为面向IoT领域,构建的“统一物联网操作系统和中间件软件平台”,以轻量级(内核小于10k)、低功耗(1节5号电池最多可以工作5年),快速启动,互联互通,安全等关键能力,为开发者提供“一站式”完整软件
    的头像 发表于 08-23 14:05 1548次阅读
    如<b class='flag-5'>何在</b>Windows上搭建<b class='flag-5'>LiteOS</b>的开发调试环境

    制作一个在qemu运行鸿蒙的liteos-m内核

    1.本文概述 由于前几天芯来科技对鸿蒙LiteOS-M内核进行支持,在手上没有开发板的小伙伴,想要了解riscv和学习鸿蒙来说,也是十分的困难,所以我就打算做一下在qemu运行鸿蒙
    发表于 08-16 08:24

    系统调用:用户栈与内核栈的切换(上)

    到 sysenter / sysexit 再到 syscall / sysret 实现方式的转变,关于具体的演化和区别、系统调用的其他细节等将在以后的系统调用专栏里分析。本文从系统
    的头像 发表于 07-31 11:27 574次阅读
    <b class='flag-5'>系统</b>调用:用户栈与<b class='flag-5'>内核</b>栈的切换(上)

    可以将MCUXpresso用于该设备中M7内核的软件开发,而不是A53内核,这是否正确?

    )吗?如何防止 Linux 端(A53 内核)访问我想在 M7 使用的外围设备? 使用 MCUXPresso 的 M7 开发是否与 A53 内核
    发表于 05-29 07:41

    OpenHarmony瘦设备内核移植实战(二)

    一、背景 OpenHarmony系统移植最核心的步骤是内核的移植,内核的稳定是一切子系统稳定的基础,一篇我们一起认识了板卡、SoC、芯片架
    发表于 05-10 16:03

    onnxruntime-1.8.2-r0 do_package_qaQA 运行发现致命错误怎么解决?

    我正在“按原样”使用 BSP 构建并收到错误... 错误:onnxruntime-1.8.2-r0 do_package_qaQA 问题:/usr/lib/python3.9
    发表于 04-28 08:03

    OpenHarmony瘦设备内核移植实战(一)

    一、背景 在各行各业存在很多不同的智能设备,每个设备都使用芯片去实现不同的业务场景需求。本文将以常用的STM32F407ZG芯片为例,介绍OpenHarmony瘦设备内核移植方法,希望能对热爱
    发表于 04-24 16:04