当前位置: 首页 > news >正文

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.mrgr.cn/news/35012.html

相关文章:

  • 紧急避坑 | MySQL 含有下划线的数据库名在特殊情况下导致权限丢失
  • 信息安全概论期末复习笔记
  • Java语言程序设计基础篇_编程练习题**18.38 (递归树)
  • JAVA开源项目 影城管理系统 计算机毕业设计
  • 【LeetCode面试150】——209单词规律
  • 【Python报错已解决】AttributeError: ‘Tensor‘ object has no attribute ‘kernel_size‘
  • 人生苦短,我用Python✌
  • markdown support in emacs
  • 【C++】容器适配器,stack,queue,priority_queue详解,模拟实现
  • 召回04 离散特征的处理
  • HyperWorks的实体几何创建与六面体网格剖分
  • 初识前端监控
  • 探秘链表:十大经典题目全解析
  • 使用 UWA Gears 测试小游戏性能
  • 828华为云征文 | 在华为云上通过Docker容器部署Elasticsearch并进行性能评测
  • vue2 实现简易版的模糊查询功能
  • 1.1 HuggingFists简介(二)
  • 华为云长江鲲鹏深度赋能,大势智慧稳居“实景三维+AI”领域排头兵
  • 解决银河麒麟桌面操作系统V10SP1 SSH连接“connection reset by ip地址 port 22”问题
  • Qt 每日面试题 -3