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)进行软件集成测试。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

POI操作EXCEL增加下拉框

文章目录 POI操作EXCEL增加下拉框 POI操作EXCEL增加下拉框 有时候通过excel将数据批量导入到系统&#xff0c;而业务操作人员对于一些列不想手动输入&#xff0c;而是采用下拉框的方式来进行选择 采用隐藏sheet页的方式来进行操作 String sheetName "supplier_hidden_s…

Python记录

1.冒泡排序 时间复杂度O&#xff08;n^2) 选择、插入都是 def bubble(data, reverse):for i in range(len(data)-1):for j in range(len(data)-i-1):if data[j] > data[j1]:data[j], data[j1] data[j1], data[j]if reverse:data.reverse()return data 2.快速排序 时间…

基于深度学习的文本情感原因提取研究综述——论文阅读

前言 既然要学习情感分析&#xff0c;那么肯定还要了解情感原因对抽取的发展历程&#xff0c;所以我又搜了一篇研究综述&#xff0c;虽然是2023年发表的&#xff0c;但是里面提及到的历程仅停留到2022年。这篇综述发布在TASLP期刊&#xff0c;是音频、声学、语言信号处理的顶级…

【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL21

根据状态转移表实现时序电路 描述 某同步时序电路转换表如下&#xff0c;请使用D触发器和必要的逻辑门实现此同步时序电路&#xff0c;用Verilog语言描述。 电路的接口如下图所示。 输入描述&#xff1a; input A , input clk , …

结构设计模式 -装饰器设计模式 - JAVA

装饰器设计模式 一. 介绍二. 代码示例2.1 抽象构件&#xff08;Component&#xff09;角色2.2 具体构件&#xff08;Concrete Component&#xff09;角色2.3 装饰&#xff08;Decorator&#xff09;角色2.4 具体装饰&#xff08;Concrete Decorator&#xff09;角色2.5 测试 结…

【HTML5】html5开篇基础(1)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

【优选算法之前缀和】No.6--- 经典前缀和算法

文章目录 前言一、前缀和例题模板&#xff1a;1.1 【模板】前缀和1.2 【模板】⼆维前缀和1.3 寻找数组的中⼼下标1.4 除⾃⾝以外数组的乘积1.5 和为 K 的⼦数组1.6 和可被 K 整除的⼦数组1.7 连续数组1.8 矩阵区域和 前言 &#x1f467;个人主页&#xff1a;小沈YO. &#x1f6…

Python酷玩之旅_mysql-connector

前言 Python作为数据科学、机器学习等领域的必选武器&#xff0c;备受各界人士的喜爱。当你面对不同类型、存储于各类介质的数据时&#xff0c;第一时间是不是要让它亮个相&#xff1f;做个统计&#xff0c;画个图表&#xff0c;搞个报表… 等等。 正如Java中的JdbcDriver一样…

亲测好用,ChatGPT 3.5/4.0新手使用手册,最好论文指令手册~

本以为遥遥领先的GPT早就普及了&#xff0c;但小伙伴寻找使用的热度一直高居不下&#xff0c;其实现在很简单了&#xff01; 国产大模型快200家了&#xff0c;还有很多成熟的国内AI产品&#xff0c;跟官网一样使用&#xff0c;还更加好用~ ① 3.5 大多数场景是够用的&#xff…

OpenCV特征检测(12)检测图像中的潜在角点函数preCornerDetect()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算用于角点检测的特征图。 该函数计算源图像的基于复杂空间导数的函数 dst ( D x src ) 2 ⋅ D y y src ( D y src ) 2 ⋅ D x x src − 2 …

【Linux】解锁管道通信和共享内存通信,探索进程间通信的海洋

目录 引言&#xff1a; 1、进程间通信基础介绍 1.1为什么需要在进程之间通信&#xff1f; 1.2进程间通信是什么&#xff1f; 1.3我们具体如何进行进程间的通信呢&#xff1f; a.一般规律&#xff1a; b.具体做法 2.管道 2.1什么是管道 2.2匿名管道&#xff1a; 创建…

Zotero进阶指南:7个插件让文献管理变得前所未有的简单

还在为海量文献管理头疼吗?还在为找不到合适的插件犯愁吗?别急,今天我就要带你解锁Zotero的终极武器 - 那些让你爱不释手的必备插件! 作为一个从小白到文献管理达人的过来人,我可以负责任地说:没有这些插件,你的Zotero只能发挥一半功力!安装了这些插件,你的效率绝对能飙升! …

计算机毕业设计之:基于微信小程序的电费缴费系统(源码+文档+讲解)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

关于LLC知识18(公式的理解)

公式中有三个未知数&#xff1a;x,k,Q 1、其中&#xff0c;x为归一化频率&#xff0c;开关频率f与谐振频率fr的比值&#xff1b; k&#xff1a;励磁电感和谐振电感的比值Lm/Lr Q&#xff1a;第一谐振频率点的感抗与Rac的比值2fL/Rac 2、KLm/Lr&#xff0c;其中fr11/2&#…

Qt/C++ 多线程同步机制详解及应用

在多线程编程中&#xff0c;线程之间共享资源可能会导致数据竞争和不一致的问题。因此&#xff0c;采用同步机制确保线程安全至关重要。在Qt/C中&#xff0c;常见的同步机制有&#xff1a;互斥锁&#xff08;QMutex、std::mutex&#xff09;、信号量&#xff08;QSemaphore&…

deepin桌面版连接windows远程桌面

在Linux系统中&#xff0c;要登录到Windows系统&#xff0c;通常可以使用远程桌面协议(RDP)。你需要在Linux系统上安装RDP客户端。 使用如下命令安装rdp协议&#xff1a; sudo apt-get install xrdp 安装成功后&#xff0c;启动rdp服务。 sudo systemctl start xrdp 有了r…

【诉讼流程-健身房-违约-私教课-诉讼书提交流程-民事诉讼-自我学习-铺平通往法律的阶梯-讲解(3)】

【诉讼流程-健身房-违约-私教课-诉讼书提交流程-民事诉讼-自我学习-铺平通往法律的阶梯-讲解&#xff08;3&#xff09;】 1、前言说明2、流程说明3、现场提交&#xff08;线下&#xff09;4、网上提交1-起诉书样例2-起诉书编写&#xff08;1&#xff09;原告信息&#xff1a;&…

Vue3.0组合式API:使用reactive()、ref()创建响应式代理对象

Vue3.0组合式API系列文章&#xff1a; 《Vue3.0组合式API&#xff1a;setup()函数》 《Vue3.0组合式API&#xff1a;使用reactive()、ref()创建响应式代理对象》 《Vue3.0组合式API&#xff1a;computed计算属性、watch监听器、watchEffect高级监听器》 《Vue3.0组合式API&…

漏洞挖掘 | Selenium Grid 中的 SSRF

Selenium 网格框架上的基本服务器端请求伪造 最近&#xff0c;我正在阅读漏洞文章看到Peter Jaric写的一篇 Selenium Grid 文章&#xff1b;他解释了 Selenium Grid 框架上缺乏身份验证和安全措施强化的问题。 在网上进行了更多搜索&#xff0c;我发现 Selenium Grid 开箱即用…

音视频入门基础:FLV专题(3)——FLV header简介

一、引言 本文对FLV格式的FLV header进行简介&#xff0c;FLV文件的开头就是FLV header。 进行简介之前&#xff0c;请各位先从《音视频入门基础&#xff1a;FLV专题&#xff08;1&#xff09;——FLV官方文档下载》下载FLV的官方文档《video_file_format_spec_v10_1.pdf》和…