系列文章目录
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)进行软件集成测试。