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

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

3天内不再提示

代码的黑盒测试(上)--目标文件测试Object File Testing

北汇信息POLELINK 2022-08-01 14:16 次阅读

听说,VectorCAST又出新功能了?不需要源码就可以测试?

瞎说,这功能我们一直就有,只不过哥不在江湖,江湖不多闻而已。

目标文件

(一)目标文件是什么

我们都知道,一个C源程序manager.c(是一个点餐demo程序,且本文对manager.c的相关操作都是在Windows平台实现的。)变成可执行程序manager.exe,一般经历四个过程,分别是预处理(Prepressing)、编译(Compilation)、汇编(Assembly)和链接(Linking),如下图所示:

pYYBAGLmMnCAX6NAAABuaBg1Fa8320.png

图1编译过程

目标文件是源代码在经过预处理、编译、汇编过程后输出的文件(源代码编译后但未进行链接的中间文件),其内容至少包含机器指令代码,数据以及链接时所须要的一些信息

(二)目标文件的结构组成简介

目标文件中的内容信息一般按照不同的属性,以“节”(Section)的形式存储,也叫“段”(Segment),它们都表示一个一定长度的区域。

目标文件的结构组成主要包含:代码段 .text(存放机器指令代码)、数据段 .data(存放已初始化的全局变量和局部静态变量的数据)、.bss段(存放未初始化的全局变量和局部静态变量)。

我们通常使用binutils的工具objdump来查看目标文件内部的结构,以manager.o为例,如下图2所示。

poYBAGLmMoSALWPKAAMBksiSRDc100.png

图2 manager.o

二、使用VectorCAST/C++进行目标文件测试

VectorCAST/C++ 是Vector公司旗下一款集成的软件测试解决方案,可显著减少验证安全关键型和任务关键型嵌入式系统所需的测试C/C++软件组件的时间、精力和成本。

VectorCAST/C++ 不仅支持白盒下的功能测试和结构覆盖测试,也支持黑盒下的软件功能测试——目标文件测试(Object File Testing)和库接口测试(Library Interface Testing)。

目标文件测试就是使用目标文件通过VectorCAST工具生成测试套件而进行的功能测试;库接口测试方法是指VectorCAST将解析C/C++头文件中存在的函数和方法的定义,并基于这些创建测试环境,允许在没有可用源代码的情况下使用现有库或DLL创建测试。本次主要讲解VectorCAST/C++的目标文件测试方案,以manager.c源文件为操作对象,使用GCC编译器进行编译。

(一)测试输入物

1、目标文件

a.单个.obj/.o文件生成方式

前提条件:该.c文件“涉及”到的.h文件都能正确引用

gcc -c source.c(默认在原路径下生成一个同名的.o文件),如下图3所示。

pYYBAGLmMrmAVLDkAAHa6IA917w362.png

图3单个文件manager.o的生成

b.多个.obj/.o文件生成方式

前提条件:每个.c文件“涉及”到的.h文件都能正确引用

gcc -c source1.c source2.c source3.cgcc -c *.c(默认在原路径下生成相应同名的.o文件),如下图4所示。

poYBAGLmMs-AISSiAAHc2QXxwmc803.png

图4多个目标文件的生成

对于其他编译链,可以通过IDE(集成开发环境)生成项目的目标文件。如CodeWarrior,其一般可以通过其IDE生成相应的目标文件,如下图5所示。

pYYBAGLmMtqAAl_uAACULBsGP5g441.png

图5 CodeWarriors IDE生成相应的目标文件

2、修改后的源文件

是指删除了函数具体实现的源码文件(仍包含完整的.h文件),如下图6所示。

pYYBAGLmMwKAYHfiAAEGIARHjmw831.png

图6删去函数具体实现后的“manager.c”

3、需求文档

由于目标文件测试属于一种软件黑盒测试,所以对于单元测试级别的需求文档的细致程度可能要达到详细设计文档的程度,甚至更细致。

如上int Add_Included_Dessert(struct order_type* Order)函数,对于目标文件测试的单元需求可能这样描述:

pYYBAGLmMxiATFOtAAB04AImf3g723.png

表 1 Add_Included_Dessert(struct order_type* Order)的单元需求说明示例

即需要明确给出了Add_Included_Dessert(struct order_type* Order)函数的输入与输出值。

(二)VectorCAST/C++ 进行目标文件测试

1、单元测试操作步骤:

a.启动工具,设置工作路径,创建新工程并命名,选择正确的编译链(以GCC编译链为例);

b.进入创建测试环境(8大步)。

Step1:选择编译器,已在前面配置好了,直接跳过。

Step2:命名测试环境(默认字母大写,空格为下划线)。

Step3:测试方式。选择目标文件测试方式,然后选择待测目标文件manager.o。如下图7所示。

poYBAGLmMzSASxgaAAK6L0TWbOI870.png

图7选择待测目标文件“manager.o”

Step4:构建选项。要选择Code Coverage为None,VectorCAST才会使用之前编译的目标文件。

Step5:本地源代码文件。使用双加号添加包含修改后的源文件所在路径。

Step6:选择UUTs和桩。

Step7:User Code可选选项。本实例不需要,直接跳过。

Step8:测试环境配置概览。成功构建测试环境,如下图8所示。

poYBAGLmM0CAJB3vAADGp0bkhvE147.png

图8成功构建测试环境

c.构建测试环境后,我们就可以根据测试需求(功能需求,表1中序号1),创建和执行测试用例,如下图9所示。

poYBAGLmM06ARsfXAAE5MwNVP-8528.png

图9创建、执行测试用例

2、集成测试

集成测试工程构建内容与单元测试很类似,仅在构建测试环境的第3步和第6步不同。集成测试一般会在第3步将相应的多个.o文件同时加进来;第6步将相应的多个修改后的源文件同时加进来。

然后使用组合测试功能,将单体测试用例按照一定的逻辑功能进行排列,执行组合测试用例。

三、总结

目标文件测试过程中,使用修改后的源代码进行测试,可以将一些核心算法的代码实现部分进行删除,能够较大程度的避免直接使用源代码,更好的保护客户代码。

当然进行目标文件测试的要求比较高。需要完善的测试需求文档,对于单元测试来说,一般需要软件详细设计文档以及单元需求文档等,对于软件集成测试来说,一般需要软件架构设计规范文档及集成需求文档等。

此外目标文件测试,只能进行功能测试,没有结构覆盖度。为了得到覆盖度信息,我们还是要转向白盒测试。将之前的测试用例导入到白盒测试工程中的测试环境中去执行,获取覆盖度。

北汇信息专注于汽车电子测试,提供专业的汽车电子测试系统搭建及测试咨询服务;提供完整的汽车新能源测试服务;提供完整的软件生命周期的软件测试服务。

VectorCAST/C++作为Vector公司的代码动态测试工具,支持自动生成测试用例,提供完善的覆盖度信息视图,还可以与Git/SVN/Jekins等工具集成等等。

本次为大家简单介绍了VectorCAST/C++在软件测试方面的软件黑盒测试。后续将会为大家带来更多基于VectorCAST/C++的动态测试相关内容。同时也欢迎垂询和沟通,共同探讨测试相关问题。

文中图片来源于VectorCAST/C++工具截图。

参考文献:

[1]《程序员的自我修养—链接、装载与库》

[2] VectorCAST/C++工具帮助文档

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

    关注

    8

    文章

    4458

    浏览量

    125134
收藏 人收藏

    评论

    相关推荐

    永久链路、信道测试的区别

    永久链路测试和信道测试是网络和通信领域中两个不同的概念,它们通常用于确保网络和通信系统的可靠性和性能。 永久链路测试(Permanent Link Testing): 永久链路
    的头像 发表于 03-25 10:59 262次阅读

    PCBA测试测试设备都有哪些?

    一站式PCBA智造厂家今天为大家讲讲 测试PCBA需要哪些仪器设备?PCBA加工所需要用到的检测设备。PCBA测试(Printed Circuit Board Assembly Testing
    的头像 发表于 03-11 09:40 333次阅读

    玩转HarmonyOS专项测试,轻松架“五星”高品质应用

    ,很多测试时长都浪费在了无意义的操作,面对特殊场景比如弹窗、登录页面等,效率很低甚至无法覆盖。 三、DevEco Testing-有智慧的探索测试 此前,DevEco
    发表于 10-10 14:32

    Python写入到日志文件完整代码

    写入到日志文件 上面我们说的是将日志打印到控制台中,但是我们Python代码写完并且在运行当中后,我们就不可能这样玩了,所以我们需要将日志保存到一个日志文件中 完整代码如下: impo
    的头像 发表于 10-07 11:50 705次阅读
    Python写入到日志<b class='flag-5'>文件</b>完整<b class='flag-5'>代码</b>

    V2X功能测试用例设计及测试分类方法

    测试技术:01常用测试技术分类黑盒测试技术黑盒测试技术(behavioralorbehavio
    的头像 发表于 09-07 08:27 418次阅读
    V2X功能<b class='flag-5'>测试</b>用例设计及<b class='flag-5'>测试</b>分类方法

    软件代码结构化覆盖测试-分支覆盖

    本篇我们介绍分支覆盖,从测试技术对代码测试程度上来说,在复杂代码中,分支覆盖比语句覆盖效果要好。
    的头像 发表于 09-01 11:34 399次阅读
    软件<b class='flag-5'>代码</b>结构化覆盖<b class='flag-5'>测试</b>-分支覆盖

    软件代码结构化覆盖测试-语句覆盖

    本篇将深入到代码层面,讲解单元测试中的一项重要工作-软件代码测试
    的头像 发表于 08-25 11:50 390次阅读
    软件<b class='flag-5'>代码</b>结构化覆盖<b class='flag-5'>测试</b>-语句覆盖

    基于GTEM小室的辐射抗扰度测试系统设计实现

    作为辐射发射和辐射抗扰度测试测试环境,除了常用的电波暗室,国际电工委员会IEC还规定了基于TEM的测试方法,也就是IEC 61000-4-20: Electromagnetic
    的头像 发表于 08-23 09:47 2093次阅读
    基于GTEM小室的辐射抗扰度<b class='flag-5'>测试</b>系统设计实现

    emi测试主要测什么 emi有哪两种测试要求

    电磁干扰测试(Electromagnetic Interference Testing):这种测试主要是评估电子设备在电磁环境中的性能。它测量设备是否会产生或受到来自其他设备或电磁场的干扰。这些
    发表于 08-07 15:05 4008次阅读

    百灵达ECM测试话筒补偿文件

    百灵达ECM测试话筒补偿文件
    发表于 07-31 17:09 0次下载

    创建约束随机测试目标

    为了实现验证目标测试用例开发者需要控制测试激励的生成以覆盖特定的场景。测试用例开发者可以用下面这些方法控制测试激励的创建: 添加约束条件来
    的头像 发表于 06-17 14:06 361次阅读
    创建约束随机<b class='flag-5'>测试</b><b class='flag-5'>目标</b>

    嵌入式代码单元测试如何完成?

    软件开发中,每次需求的变更基本都需要改写代码,而代码变更后就需要进行功能测试,当然在功能测试之前需要代码的单元
    发表于 06-05 12:28 585次阅读

    将文本写入文件,但是当有特殊字符时它们看起来很奇怪是为什么?

    我正在尝试将文本写入文件,但是当有特殊字符时,它们看起来很奇怪,示例如下: 在代码TESTING SPECIAL CHAR Ç É ção normal é e”。 在
    发表于 06-02 08:33

    如何YOLOv5测试代码

    使用文档“使用 YOLOv5 进行对象检测”我试图从文档第 10 页访问以下链接(在 i.MX8MP 上部署 yolov5s 的步骤 - NXP 社区) ...但是这样做时会被拒绝访问。该文档没有说明需要特殊许可才能下载 test.zip 文件。NXP 的人可以提供有关如何访问
    发表于 05-18 06:08

    STC单片机INT0-INT1-外中断测试代码

    STC单片机INT0-INT1-外中断测试代码
    发表于 05-17 15:08 0次下载