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

    文章

    5290

    浏览量

    126614
收藏 人收藏

    评论

    相关推荐

    什么是回归测试_回归测试测试策略

      1、什么是回归测试 回归测试(Regression testing) 指在发生修改之后重新测试先前的测试以保证修改的正确性。理论
    的头像 发表于 11-14 16:44 224次阅读

    初探AI测试分析

    在人工智能中,算法不只是用代码敲出来这么简单的,而是由训练数据、标签和神经网络的结合产生的,这是机器学习的本质。算法本身没有直接洞察力,也不能直接像缺陷一样被修复:它属于“黑盒开发”。 人工智能系统
    的头像 发表于 11-12 10:25 420次阅读
    初探AI<b class='flag-5'>测试</b>分析

    环路测试方法有哪几种

    环路测试(Loop Testing)是一种软件测试方法,它通过在软件内部创建循环来验证程序的循环结构是否正确。这种方法特别适用于测试循环控制结构,如for循环、while循环、do-w
    的头像 发表于 09-12 14:35 583次阅读

    Linux内核测试技术

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

    IC测试的定义和基本原理

    测试,全称为集成电路测试(Integrated Circuit Testing),是指对集成电路的性能、功能和可靠性进行测试的过程。IC测试
    的头像 发表于 07-10 14:45 1837次阅读

    单元测试、集成测试自动化工具

    CoverageMaster winAMS : 适用于嵌入式目标代码的单元测试/集成测试工具 全面支持嵌入式微机!验证嵌入式C/C++软件 实施以模块为单位的自动化单元
    的头像 发表于 06-26 13:41 442次阅读
    单元<b class='flag-5'>测试</b>、集成<b class='flag-5'>测试</b>自动化工具

    TS-RadiMation测试软件如何在序列测试中发挥作用?

      一、测试目的 序列测试目标是在没有测试工程师干预的情况下依次运行不同(类型)的测试。这些测试
    的头像 发表于 06-21 10:59 227次阅读
    TS-RadiMation<b class='flag-5'>测试</b>软件如何在序列<b class='flag-5'>测试</b>中发挥作用?

    接口测试测试什么内容

    接口测试的定义、重要性、测试策略、测试方法、测试工具以及最佳实践。 一、接口测试的定义 接口测试
    的头像 发表于 05-30 15:11 1264次阅读

    功能测试覆盖中最常见的是什么方法

    常见的方法,包括黑盒测试、白盒测试、灰盒测试、等价类划分、边界值分析、错误推测法、因果图法、状态迁移测试、场景法、决策表
    的头像 发表于 05-30 14:55 688次阅读

    功能测试是白盒还是黑盒测试

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

    功能测试主要做什么 功能测试包含哪些测试

    的主要任务、包含的测试类型以及实施方法。 功能测试的主要任务 需求分析 :理解软件需求,包括用户需求和系统需求。 测试计划制定 :根据需求制定详细的测试计划,包括
    的头像 发表于 05-29 16:05 5434次阅读

    功能测试和性能测试的区别与联系

    预期执行其功能的过程。功能测试的主要目标是确保软件满足所有业务需求和用户期望。以下是功能测试的一些关键特点: 需求驱动 :功能测试通常基于需求文档进行,确保每个功能都按照设计和规格实现
    的头像 发表于 05-29 15:40 1010次阅读

    仿真测试与实车测试的区别

    随着科技的飞速发展,自动驾驶、智能驾驶等概念逐渐成为现实,汽车测试技术也随之不断进步。在智能驾驶技术的研发过程中,仿真测试和实车测试是两种至关重要的测试方法。虽然它们的
    的头像 发表于 05-17 14:34 1266次阅读

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

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

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

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