testbed常见问题及处理(1)

article/2025/10/23 11:35:44

1.序列名不规范
为了工程化的管理测试用例,单元测试时,建议为每个被测函数(uut)创建一个序列,而序列名使用函数名,以便后期维护管理。

2.未确认代码是否编译通过,就开始测试
应当在确定代码编译成功后,再开始用testbed进行静态分析和单元测试
而且如果时间允许,清确保完成了编码规则检查后,再进行静态分析。

3.当被测文件较大时,可将文件只抠出变量定义、函数申明以及被测函数的实现。以加快测试执行进度。
抠代码时,只保留最开始的函数定义和需要的函数,为了提高效率,可以一次扣多个函数的代码
抠代码前清做好源代码的备份工作。
由于抠的代码少了一些函数,创建用例时可能会找不到一些函数,在callview中可以看到一些未知函数,这时我们可以打桩。您可以可以根据实际需要为桩函数设置返回值等。

4.testbed有三种模式,单元测试通常使用Unit test only模式。
testbed的.三种测试模式
Unit test only 纯单元测试
Integraton test 集成测试(所有的函数都集成起来)
Isolate test 集成测试(适合增量测试,只有选定的函数集成,未选中的将被打桩)
当然使用integeration test模式也是可以的,里面的那些函数会使用实现,而不是桩,从某种意义上说,它的值也可以看成是桩。

5.testbed单元测试用例采用分步骤执行以发现问题出现的阶段
在测试用例视图上,选中一个用例,依次点击以下右键菜单,即可实现分步骤执行测试用例。
Gnerator driver、
build driver
execute driver
split regression driver output
process regression driver output
在这里插入图片描述

6 测试用例不能导出到中文目录,否则提示 文件没有写权限
导出到中文路径时,提示没有权限,其实是因为中文路径,我曾今在坑里呆过。:)

7 .编译测试用例时,提示undefined symbol 未定义标识**
在文件树上删除该变量,重新编译

8.编译测试用例,提示申明与调用不兼容(imcompitable)
例如,提示与memset 不兼容。
解决方法:将memset打系统桩,并设置参数和返回值的数据类型。

9 testbed测试嵌入式程序时,由于在模拟器上没有指定地址,导致执行到这些地址时,指针跑飞,
解决办法1: 使用修改代码,定义变量
例如, ( int) 0x80000001=9;
由于地址0x80000001未定义
程序改为: int p;
P=9;

解决方法2:在测试用例的预定义代码(通过测试用例的右键菜单打开)中定义宏,让一个变量来替换地址
例如 #define 0x80000001 p;
定义全局变量p,
这样要控制地址中存放的数据,直接设置用户全局变量p的值即可,

10 函数中使用到的指针,要确保值有效。
例如,使用p->name,那么p所指向的结构体struct student需要时存在的,否则程序会跑飞。
修改的方法是,定义一个用户全局变量aaa ,类型为struct student,设置p的值为 & aaa。

11.TESTBED测试程序处理过程
程序编译的大概过程,先生成桩文件(instrument file),然后编译生成测试驱动文件.
桩文件同源文件一个目录,名称为ixxx.CPP
驱动文件在workfls文件夹下,名称为 S_…CPP

12. testbed中用例的输入参数是有顺序的。不合适的顺序可能导致结果不正确或者程序异常。
例如 pstudent参数应当在 pstudeng->name之前赋值。否则可能由于pstudent尚未设置有效值,就去取成员变量,而异常。

13. testbed中用例的界面输入参数是在initial code后执行的。若同时在用例的输入界面和initial code中定义输入参数值,清一定注意顺序。
例如 您在initial code 中 设置全局变量 pNode->next = NULL,而用例输入界面上设置 .pNode = &g_my_code,由于initial code 先执行,程序会异常。

13. 桩函数可以设置多个值,值用逗号分隔,各次调用取一个值。
例如,值设置为1,2,3 ,那么桩函数第一调用时使用1,第二次使用2,第三次使用3

14. 程序跑飞的调试
先看序列文件夹下是否生成exh文件(执行历史文件),如果没有,说明用例参数有问题,删除不必要的参数,检查参数顺序是否正确。
如果有exh文件,查看代码的执行情况,了解到执行了那些块,最后出错时执行的代码是哪个快。可大致分析问题出现的范围后,通过注释桩文件中的代码,逐步缩小范围。
具体方法:找到.exh最后一行编号值,在源程序同目录下找到对应的桩文件inszz_xxx.c 文件,查找该编号值,该编号到下个编号之间的代码就是程序跑飞的范围、

15. 测试用例有问题时,可设置为suspend,先处理其他测试用例。

17. 测试用例可以复制粘贴多份,修改参数后,通过resequence来执行指定参数及其后的测试用例。

18. 桩程序和驱动程序
桩程序和源文件在同一个目录,主要用于进行覆盖率的统计。名称通常为ixxx.c或 ixxx.cpp
驱动程序在序列文件夹(xxxseqwrkfls)测试用例执行就是在执行该程序
先生成桩程序,创建测试用例时,生成驱动程序。

19.testbed 静态分析闪退
该问题有可能是由于源代码中存在大段的注释引起。

20.测试用例build时,提示变量confilct
根据错误提示查看,通常是由于两处定义不同,例如,一处为数组,一处不是,
解决方法1:最方便的是在用户定义全局变量中将那个冲突的全局变量删除掉。这样就只剩余一处,就不冲突了。
解决方法2:也可以修改用户全局变量,使其不冲突。

21 误删除了用户全局变量怎么办?

误删除了用户全局变量,点击工具条上的 在这里插入图片描述按钮,系统自动会将误删除的变量补充回来,
在这里插入图片描述
22 tonado模拟器异常后,再执行用例结果会有问题。
使用 vxworks 的tonado环境进行嵌入式程序测试时,清注意观察模拟器的状态。例如是否已经有异常等,有问题了及时重启。

23 注意位域对值得影响
有时测试时,明明给全局变量给定了值,结果并没有进入预期的分支。
这时可能有以下几种情况:
a。该变量的值进入用例后,到达分支之前,值被改变了(被赋值,或者其间的其他函数中改变了它的值);
b。是否全局变量为一个位域,如下结构体,成员b的取值只能为0,1,2,3,
当您为其赋值4(对应的二进制位 100)的时候,其真正保存的值为0.
当您为其赋值6(对应的二进制位 110)的时候,其真正保存的值为2.
struct student
{
int a:8;
int b:2;
int c:6;
};

24 用例执行出错,原因可能是:
a 某个全局变量可能被误删除掉了 ,
这个在日志视图可以看到相应的错误。点击工具条上G,恢复全局变量。
b 用例参数值设置的顺序不对,导致程序跑飞。
例如,pstudent为结构体类型的指针,如果用例中先设置 pstudent->name=“aaa”,再设置pstudent=&student1, 由于设置顺序的问题,程序会跑飞。
解决办法:调整输入顺序。
c 被测函数中使用到的指针未被初始化,导致执行异常。
例如,被测代码中 pstudent->sex=1;
由于pstudent为初始化,程序跑飞。
解决办法,定义一个类型为student的用户全局变量student1,在测试用例中将pstudent 设置为&student1,这样指针指到一个有效地址,程序就不跑飞了,

25.测试用例丢失了怎么办
用例丢了怎么办?还好testbed有很好的备份机制,可以到备份文件夹中寻找。
如下图所示,备份文件夹在 LDRA_workarea下的tbwrkfls下,文件夹以tbtcffiles结尾。在这里插入图片描述

26 testbe的编译器环境配置?

1.安装tbconfig;
2.启动tbconfig,点击菜单导出序列号,发送给厂商,然后将厂商反馈的ctl文件导入,方可打开;
在这里插入图片描述

3.点击菜单 developer tools,在子菜单中选择需要的编译器后,在弹出窗口中设置testved的安装目录,编译器的安装路径等,点击ok,即可完成环境配置。
环境配置完成,在testbed的对应的编译器目录下会生成相应的配置文件。
在这里插入图片描述

28 如何为未识别的函数打桩。

首先在call view视图中,选中该函数,点击右键菜单create Mnanaged Stud ,设置其为桩函数。 在这里插入图片描述
然后在call view中,选中该函数,依次点击菜单 Managed Stud Properties->parameters、Return type 设置输入参数,和函数返回类型。 在这里插入图片描述
在这里插入图片描述

27 如何设置桩函数的指针型参数保存的值

桩函数最常用的是设置桩函数返回值,但有时我们希望退出桩函数时设置这些指针参数所指地址保存的值,该怎么办呢
1.首先在桩函数管理窗口中,选择该桩函数,点击右键菜单 Set Parameter on Exit,
在这里插入图片描述
在弹出窗口上点击impirt,选择参数名前带有*的加入,
在这里插入图片描述
加入后,设置要给定的值后,点击ok按钮即可。
在这里插入图片描述
28 编译时提示参数不匹配。
这可能是由于某个桩函数由于函数原型没有找到原型,它的形式参数和返回值少了,我们只要在右侧的call view的列表中找到该函数,点击右键菜单 Managed stub properties ->return type \ parameters 可设置返回值和函数参数值。正确设置参数值后,编译错误。
如果还有问题,吧system stub 勾选上,试一下,有时这个也需要悬选上。在这里插入图片描述
29 ccs编译器环境配置注意事项。
tbconfig中正确选择ccs硬件系列(如c6x),testbed的路径,ccs的路径后点击ok。
这样生成的文件还是需要根据具体硬件型号、以及项目依赖的库修改对应compile.bat、build.bat、xxxmenu.cmd
cmd文件修改依赖的lib文件(参照项目工程的lib即可)
两个bat文件修改编译参数,如-mv6700,具体的编译参数在ccs中编译一下即可看到,


http://chatgpt.dhexx.cn/article/jdT8hLUU.shtml

相关文章

Testbed静态分析

使用testbed进行代码的静态分析主要有四个步骤: 选择分析对象 分析前的设置 分析项的选择与分析过程 查看分析结果 1、选择分析对象 可通过两种方式选择被分析对象:单个文件分析、以集(set)的形式分析,其中以set…

Testbed单元测试

在testbed中C代码中的"单元"指的是一个函数,单元测试就是针对每个函数进行测试。 在使用testbed进行单元测试前需要先确认当前使用的编译器是否正确,且current compiler和default compiler是否是一致的。如果当前编译器不正确,可点…

中山大学2019年研究生复试机试题目(数据科学与计算机学院)

\qquad 本人在2019年9月参加了中山大学数据科学与计算机学院的推免面试,将模拟机试的题目记录如下。(正式机试时有原题出现) 小伙伴们复试加油哇!!!!! \qquad 详细内容已放进网盘&am…

关于我考研的这一年随记 —— 2022暨南大学电子信息计算机技术专业初试第三复试第一

出成绩了,初试第三,复试第一,成功圆梦。这一刻,我与17岁的自己和解。四年前的遗憾终于在今天得到了圆满。这一路走来,我迷茫、焦虑、惶恐与不安,似乎对自己的执念有一股莫名的冲动和那么一丝后怕。出成绩前…

中山大学软件工程专硕考研经验(双非跨考)

我是一名双非医科大学的本科生,因为不是很喜欢这个专业,并且对计算机感兴趣(喜欢写代码),最后就决定跨考计算机了。为什么选择中大呢?说来话长,很多人可能觉得我自不量力,双非跨考还…

2023中山大学计算机考研经验分享

最新数据见:中山大学考研经验分享历年真题_N诺计算机考研 中山大学数据科学与计算机学院官网 中山大学人工智能学院:http://sai.sysu.edu.cn/ 中山大学软件学院:http://sse.sysu.edu.cn/ 中山大学系统科学与工程学院 :http://sss…

【计算机考研院校推荐】广东地区汇总-22考研版

本篇文章由皮皮灰收集 数据来源21考研,仅供22考研参考 收集招生081200 计算机科学与技术、083500 软件工程、083900 网络空间安全、085400 电子信息-计算机方向的院校 更为详细的院校信息可在后台回复获取 广东地区院校目录 1.(10558)中山大学【985/211】 2…

2023 暨南大学计算机专硕(电子信息计算机技术方向)考研经验分享

文章目录 前言数学二专业课 848英语二政治复试杂七杂八考试地点与考试方式作息坐姿群848 资料 总结 前言 2023 年暨南大学计算机专硕考生(电子信息计算技术方向),初试成绩 392 分(复试线 344 分)。非常感谢前人的经验…

2020暨南大学计算机考研经验分享

前言: 主要介绍了今年暨南大学计算机考研的相关情况、848真题的部分回忆内容、自己的一些经验教训,还有复试名单拟录取名单等第一手资料,文章很长,可以只看自己目标专业的情况和真题部分。 一、个人情况介绍 报考的是暨南大学电子…

2022年中山大学计算机考研复试分数线预测

中山大学属于34所自划线院校之一,考研复试分数线分国家线和院校自划线,院校自划线公布时间一般早于国家线,报考中山大学计算机研究生的考生,复试分数线请以院校官网公布的分数线为准! 2021年中山大学计算机考研复试分数线公布日期…

中山大学计算机考研资料汇总

中山大学数据科学与计算机学院官网 中山大学(Sun Yat-sen University, SYSU),简称“中大”,由孙中山先生创办,有着一百多年办学传统,是中国南方科学研究、文化学术与人才培养的重镇。中山大学是教育部和广…

考研 | 2020中山大学软件工程/计算机考研初试经验分享

考完很久了,心血来潮写个经验贴,由于今年线上复试,与往年形式差异很大,而且题目难易程度差异很大,抽到什么题全看运气,所以不太想写复试的经验贴,如果有小伙伴想看的话可以留言~ 1 关于我 1.1 …

321分排第二?985中山大学计算机考研超级爆冷?

大家都知道,今年计算机考研超级火爆,前所未有的爆炸,400的高分到处都是: 神仙打架!今年计算机考研爆炸实况! 但是这么爆炸的计算机考研,有没有学校爆冷呢? 网上流传这么两张图&#…

2024中山大学计算机考研信息汇总

中山大学数据科学与计算机学院官网 中山大学(Sun Yat-sen University, SYSU),简称“中大”,由孙中山先生创办,有着一百多年办学传统,是中国南方科学研究、文化学术与人才培养的重镇。中山大学是教育部和广…

2021年一战上岸中山大学计算机专硕考研经验(详细时间规划)

2021年7月29日上午11点25分,从公布拟录取名单起,等了四个月,终于从快递员手中接到了我的录取通知书,悬了一年半的心也终于踏实了,不会有差错了,是的,中山大学,我来了! 之…

Spfa算法总结(C/C++)

文章目录 一: Spfa算法分析二: 代码分析 一: Spfa算法分析 1. 问题介绍:  2. 问题分析:  当我们遇到单源最短路边权为负值问题时这时候该如何处理呢?  其实我们现在就可以使用Floyd()算法了,我们可以从两个方面来理解这个算法…

第十八章 SPFA算法以及负环问题(利用dijkstra推导出该算法,超级详细!!)

第十八章 SPFA算法以及负环问题 一、dijkstra算法的弊端二、dijkstra算法的优化1、SPFA算法(1)算法思路:(2)算法模板:问题:模板:逐行分析: 三、SFPA解决负环问题&#xf…

SPFA算法理论体系终极论证

SPFA相关详细论证 历史事件Bellman-Ford算法简述和证明SPFA的正确代码段凡丁的贡献正确复杂度分析 历史事件 众所周知,SPFA是一种对Bellman-Ford算法的优化。国内业界首次提出是1994年西南交通大学的段凡丁在学报上发表的论文。但实际上早在1956年Bellman-Ford算法…

spfa判定负环

算法思想: 我们用数组记录每个结点的最短路径估计值,用邻接表来存储图G。 采取的方法是动态逼近法: 1、设立一个先进先出的队列用来保存待优化的结点。 2、优化时每次取出队首结点u,并且用u点当前的最短路径估计值对离开u点所指向…

SPFA算法详解——判断负权环

算法核心代码实现负权环判断负权环 根据松弛次数根据最短路径上的死循环 SPFA(Shortest Path Faster Algorithm)(队列优化)算法是求单源最短路径的一种算法。它是在Bellman-ford算法的基础上加上一个队列优化,减少了冗…