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

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

3天内不再提示

代码的黑盒测试(下)| 库接口测试Library Interface Testing

北汇信息POLELINK 2022-08-04 14:37 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

书接上回:代码的黑盒测试(上)|目标文件测试Object File Testing,我们首先介绍了编译的基本过程——预处理(Prepressing)、编译(compile)、汇编(Assembly)和链接(Linking),然后着重介绍了代码黑盒测试的第一种方法——VectorCAST/C++的目标文件的测试方法,解决了在无可用源代码的情况下,对其相应目标文件的测试。

其实一个代码工程除了开发人员手写代码外,还包含了很多库文件,甚至有的库文件或是经过开发人员修改或是直接由开发人员编写的。那么对于这些文件又该如何测试呢?请看如下分解!

一、库接口测试

(一)库文件

这里的“库”,就是库文件,一般是指编译好的二进制文件,用于在链接阶段与目标文件一起生成可执行文件,或者运行可执行文件的时候被加载,以便调用库文件中的某段代码。

与可执行文件不同的是,库文件无法直接执行。直观上来看,库文件的源代码中没有main函数,而只是一些函数模块的定义和实现,没有运行的入口主函数,无法直接执行。

(二)静态库与动态库

库文件可分为静态库和动态库。它们区别主要体现在程序的链接阶段——静态库的代码是在编译过程中被载入程序中的,这就说明,只要程序编译完成,程序就不受静态库的影响;动态库的代码在编译的时候并没有被编译进入程序中,只是在程序运行时根据程序需要动态的加载到内存中。

(三)相关文件的一些扩展名

  1. win32平台下,静态库通常后缀为.lib,动态库为.dll。
  2. Linux平台下,静态库通常后缀为.a,动态库为.so。

从本质上来说,由同一段程序编译出来的静态库和动态库,在功能上是没有区别的;不同之处仅仅在于其名字上,也就是“静态”和“动态”。开发人员只需要将.h/.hpp头文件和.lib/.so文件提交给其他开发人员,他们就可以直接使用.lib/.so文件中定义的函数了。静态库和动态库的具体使用由开发人员决定。

(四)库接口测试

库接口测试允许客户在没有可用源代码的情况下,对现有库文件创建测试。在测试时,可以将第三方库或者被修改的第三方库作为一个对象库文件和API定义(头文件)。可以为API创建测试用例,来验证应用程序库函数的正确性,而无需访问源代码。

在代码开发中,通常会将一些常用的函数封装成一个库,提供接口给其它程序文件调用,省去重复写该函数接口。当使用该函数时,只需要直接将所需要的文件链接到程序中即可,大大提高了开发效率。依照这个原理,我们也可以针对一些代码程序根据测试需要,将某些源代码编译生成相应的静态库文件或动态库文件,以完成代码功能测试。

二、利用VectorCAST/C++进行库接口测试

对于如何使用VectorCAST/C++进行静态库或者动态库的单元测试,下面我们仍使用上篇文章中的点餐服务程序(采用GCC编译链),来具体说明。

(一)点餐服务程序的结构内容及说明

poYBAGLrOgiASp3RAAB36SL_x2w424.png

poYBAGLrOhCAF5n2AACE58UQyqM954.png

图 1点餐服务程序的结构内容及说明

(二)利用VectorCAST/C++进行静态库接口测试

1、静态库文件的生成

对于这个点餐主程序manager_driver.c,我们可以将manager.c和database.c分别作为一个调用的库文件来使用,也可以一起作为一个调用的库文件来使用。本例中,将manager.c和database.c一起作为一个调用的库文件来使用。

使用一个BAT脚本生成静态库文件,脚本内容如下:

set path=%VECTORCAST_DIR%\mingw\bin;%PATH%

gcc -c manager.c

gcc -c database.c

ar rcs manager_driver.lib manager.o database.o

说明:无论静态库,还是动态库,都是在*.o目标文件基础上生成的。

2、环境构建基本过程

VectorCAST环境构建的基本过程在代码的黑盒测试(上)|目标文件测试Object File Testing有详细说明,这里不再赘述,对于不同的以及需要注意的地方,有如下说明:

本例中,我们是利用manager.c和database.c一起生成静态库文件manager_driver.lib的,所以在构建测试环境的第3步需要选择“库接口测试方法”并在“Link Options”添加该文件及所在路径,如图2所示。同时在构建测试环境的第6步添加需要的头文件,有manager.h和database.h,如图3所示。

pYYBAGLrOi-AB43LAAGSTnfVKnk986.png

图2选择添加静态库文件manager_driver.lib

poYBAGLrOjWAdYEGAADByjzH0Gc062.png

图3选择添加头文件manager.h或database.h

3、测试用例编写与执行

按照上述说明成功构建测试环境。编写测试用例及执行测试用例,结果如下图4所示。

poYBAGLrOlSAEjWuAABhkE54dEQ448.png

pYYBAGLrOl2AQHHJAAEKsv_XNSM597.png

图4测试用例编写与执行

细心的小伙伴可以注意到上图左边部分只有显示了执行状态图标,因为我们采用的该种测试属于黑盒测试方法,所以我们在构建环境的第4步,没有勾选“Whitebox”前面的复选框,自然也没有结构覆盖度图标。

(三)利用VectorCAST/C++进行动态库接口测试

1、动态库文件的生成

与静态库文件生成类似,将manager.c和database.c一起作为一个调用的动态库文件来使用。

使用一个BAT脚本生成动态库文件,脚本内容如下:

set path=%VECTORCAST_DIR%\mingw\bin;%PATH%

gcc -c -fPIC manager.c -o manager_dyn.o

gcc -c -fPIC database.c -o database_dyn.o

gcc manager_dyn.o database_dyn.o -shared -o libmanager_drive.dll

2、环境构建基本过程

动态库接口测试与静态库接口测试基本一致,不同的地方如下说明:

此例中,我们仍利用manager.c和database.c一起生成动态库文件manager_driver.dll,所以在构建测试环境的第3步选择“库接口测试方法”并在“Link Options”添加该动态库dll文件,如图5所示。后面的操作与静态库接口测试一致,故不在赘述。

poYBAGLrOoWAQ7btAAEuGA59J2E457.png

图5选择添加动态库文件manager_driver.dll

三、总结

本文提供了代码黑盒测试的第二种方法——库接口测试,可以利用工具为API创建测试用例,来验证应用程序库函数的正确性,而无需访问源代码,感兴趣的同学可以尝试下。

VectorCAST/C++作为Vector公司的代码动态测试工具,支持自动生成测试用例,提供完善的覆盖度信息,还可以与Git/SVN/Jekins等工具集成等等;后续也会为大家带来更多基于VectorCAST/C++的动态测试相关内容;同时也欢迎垂询和沟通,共同探讨测试相关问题。

北汇信息作为Vector中国的合作伙伴,始终专注于汽车电子领域的新技术和新产品,为整车厂和零部件企业提供完整的研发、测试解决方案,为工程师在汽车领域提供“趁手装备“!

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

    关注

    8

    文章

    6028

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    创建一个Library工程

    -> Empty Project,工具链选择RISC-V Cross GCC,具本如下图 创建一个Library工程工程 将Library文件放入工程中,并点击工程,右键 在设置
    发表于 10-20 09:30

    淘宝商品的API接口测试

    前两天我们简单的说了一些现有的几大电商平台,现在我们来介绍API接口测试操作。 使用说明: 首先需要开放平台注册账号并创建应用,获取 App Key 和 App Secret 将代码
    的头像 发表于 10-08 09:22 119次阅读

    嵌入式软件测试与专业测试工具的必要性深度解析

    。专业工具通过虚拟化硬件接口(如GPIO、CAN总线),允许开发者在早期验证代码逻辑,实现软硬件并行开发。例如,硬件在环(HIL)测试通过FPGA模拟硬件时序,尽管设备成本较高,但能显著提高
    发表于 09-28 17:42

    测试小白3分钟上手,零代码自动化测试平台,15分钟搭建自动化测试方案

    还在为不懂代码、搭建测试方案耗时久而发愁?ATECLOUD 零代码自动化测试平台,专为自动化测试量身打造,小白3 分钟就能轻松上手,15 分
    的头像 发表于 09-22 17:52 613次阅读
    <b class='flag-5'>测试</b>小白3分钟上手,零<b class='flag-5'>代码</b>自动化<b class='flag-5'>测试</b>平台,15分钟搭建自动化<b class='flag-5'>测试</b>方案

    Simulink模型测试典型问题分享-接口定义不完整

    典型测试问题分享-接口定义不完整 问题描述: 计算模块未定义数值范围,存在越界风险。 信号未规定精度和误差范围,导致背靠背测试未通过。
    的头像 发表于 09-22 15:40 954次阅读
    Simulink模型<b class='flag-5'>测试</b>典型问题分享-<b class='flag-5'>接口</b>定义不完整

    边聊安全 | 软件单元测试的设计方法

    上海磐时PANSHI“磐时,做汽车企业的安全智”软件单元测试的设计方法写在前面:软件单元测试的设计是一个系统化的过程,旨在验证代码的最小可测试
    的头像 发表于 09-05 16:18 4316次阅读
    边聊安全 | 软件单元<b class='flag-5'>测试</b>的设计方法

    芯片硬件测试用例

    用例是项目开始的关键,利用白盒和黑盒覆盖,保证产品质量。根据芯片功能,目标市场,进行测试立项:依据BRD/MRD/PRD;计划:测试需求分析、人力资源时间线;测试用例设
    的头像 发表于 09-05 10:04 521次阅读
    芯片硬件<b class='flag-5'>测试</b>用例

    LambdaTest推出全球首个AI智能体测试平台

    领先的AI原生测试平台LambdaTest已推出其智能体对智能体测试(Agent-to-Agent Testing)平台的封闭测试版。这是全球首个专为验证与评估AI智能体而设计的平台。
    的头像 发表于 08-26 17:37 711次阅读

    Green Testing Lab联合CSM开展电池温度测试

    ,奥地利的Green Testing Lab联合CSM,在此类极端工况开展电池温度测试,致力于在开发早期提出改进措施,有效降低潜在安全风险。
    的头像 发表于 08-26 11:46 707次阅读

    “System Level EOS Testing Method”可以翻译为: “系统级电性过应力测试方法”

    “System Level EOS Testing Method”可以翻译为: “系统级电性过应力测试方法”
    的头像 发表于 05-05 15:55 683次阅读
    “System Level EOS <b class='flag-5'>Testing</b> Method”可以翻译为: “系统级电性过应力<b class='flag-5'>测试</b>方法”

    绝缘电阻测试仪使用方法

    缘电阻测试仪(Insulationresistance testing instrument)又称数字绝缘电阻测试仪、兆欧表、智能绝缘电阻测试仪等,是一种常用的仪器设备,用于测量电气设
    的头像 发表于 04-12 10:53 3661次阅读
    绝缘电阻<b class='flag-5'>测试</b>仪使用方法

    STM32U5驱动从1.6.0更新至1.7.0后,LPBAM的一个接口返回错误是怎么回事?

    LPBAM的一个接口返回错误导致出错,我通过反复对比,使用旧代码工程没问题,只要听从提示更新代码后重新生成就出现此问题,
    发表于 03-07 07:35

    嵌入式软件测试的实战洞察:从代码漏洞到安全屏障

    转换逻辑未考虑ARM Cortex-M7芯片在低温的运算精度偏移。这种硬件与代码的耦合性问题,正是传统测试方法难以捕捉的“致命暗礁” ‌ ‌ ‌。 案例解析:芯片特性与代码的隐秘博弈
    的头像 发表于 02-28 13:09 627次阅读

    SDRAM控制器设计之control_interface.v代码解析

    control_interface.v文件里已经写了非常详尽的代码备注。本文继续对该文件代码进行讲解,并给出SignalTap波形辅助读者理解。
    的头像 发表于 02-19 15:31 876次阅读
    SDRAM控制器设计之control_<b class='flag-5'>interface</b>.v<b class='flag-5'>代码</b>解析

    快速上手RK3588常用接口测试

    前言:在之前的几期中,我们详细介绍了RK3588开发板的大部分基础功能调试方法,本期是针对常用通信接口以及IO口的测试,主要包括的调试内容有:USB2.0测试、CAN通信测试、UART
    的头像 发表于 12-26 08:33 4276次阅读
    快速上手RK3588常用<b class='flag-5'>接口</b><b class='flag-5'>测试</b>