在LDRA Testbed中查看数据流,主要是确认某个变量在哪里定义、被哪些语句修改,又传到了哪些函数。路径中间突然断开时,先别急着判断代码有问题,还要检查分析范围、编译配置和测试覆盖情况。
一、Testbed数据流分析怎么查看
LDRA Testbed负责执行静态和动态分析,TBvision则用于查看源代码、调用图、流程图和数据流分析报告。数据流分析会结合控制流信息,判断变量赋值后可能向哪些位置传播。
1、先完成静态分析
数据流报告依赖完整的代码解析。项目刚导入,还没有执行分析时,通常看不到完整的变量传播关系。
①打开需要分析的Testbed项目。
②确认源文件和头文件已经加入分析范围。
③核对编译器、宏定义和头文件搜索路径。
④运行项目静态分析。
⑤等待分析结束后进入TBvision结果界面。
分析中出现解析错误时,先把错误处理掉。代码都没有被正确识别,后面显示出来的路径自然不太可信。
2、打开数据流分析结果
TBvision可以通过调用图、过程流程图和数据流分析报告展示代码结构。查单个变量时,最好从变量使用位置切入,不用一开始就看整套系统。
①在源代码中找到目标变量。
②选中变量名称或对应诊断结果。
③打开【Data Flow Analysis】相关报告。
④查看变量的定义、赋值和使用位置。
⑤双击结果,跳转到对应文件和代码行。
如果变量经过函数参数继续传递,还要配合【Call Graph】查看调用方和被调用方。只盯着当前函数,路径很容易看到一半就停住。
3、按变量的实际流向逐段检查
查看数据流时,可以按“定义—赋值—传递—读取”这个顺序往下走。
①找到变量首次声明或初始化的位置。
②查看后续赋值语句。
③检查赋值所在的条件分支。
④继续查看函数参数、返回值或全局变量传递。
⑤确认变量最终在哪些位置被读取。
遇到数组、结构体成员或指针时,要把具体成员一起看。变量名称一样,不代表指向的就是同一块数据,这里很容易看串。
4、查看动态数据流覆盖
静态分析展示的是代码中可能存在的传播路径,动态分析展示的是本次测试真正执行过的部分。LDRA的动态数据流报告可以标出测试过程中变量被修改和读取的位置;相关能力需要配置动态数据流覆盖模块。
①对目标代码执行插桩。
②编译并运行测试程序。
③将运行结果导回Testbed项目。
④打开动态数据流覆盖报告。
⑤对比已执行与未执行的数据路径。
静态路径完整、动态路径却停住,多半不是分析丢了,而是当前测试数据没有走到后面的分支。
二、Testbed数据流路径中断怎么定位
所谓路径中断,可能是图里没有继续显示,也可能是动态报告中后半段没有覆盖。两种情况原因不同,最好先分清楚。
1、先判断静态路径还是动态路径中断
①打开静态数据流报告。
②确认目标变量是否能继续传到下一个函数。
③再打开动态覆盖结果进行对比。
④记录两份结果开始出现差异的位置。
静态报告中已经没有后续关系,重点查项目配置和代码解析;静态路径存在,动态结果没覆盖,则要回头看测试输入和执行过程。
2、目标函数没有进入分析范围
变量传进另一个函数后突然断开,常见原因是该函数的实现文件没有加入项目,或者工具只能看到函数声明。
①在调用图中找到路径中断的函数。
②检查能否跳转到函数实现。
③确认实现文件已加入分析范围。
④检查相关头文件和库文件配置。
⑤重新运行静态分析。
第三方库、操作系统接口和编译好的目标库没有源码时,Testbed无法像分析普通源文件一样继续展开内部数据流。这种边界需要结合接口说明或测试桩单独处理。
3、宏和条件编译配置不一致
同一份代码在不同宏定义下,实际参与分析的分支可能完全不同。源码里明明有后续逻辑,当前配置却把它排除了,图上当然接不上。
①查看路径中断位置附近的【#if】和【#ifdef】。
②核对项目使用的宏定义。
③检查编译器和目标平台配置。
④确认头文件搜索顺序。
⑤按实际构建配置重新分析。
别只看编辑器里显示的代码。真正参与分析的是预处理后的内容,这一点很关键。
4、函数指针或间接调用没有解析完整
数据通过回调函数、函数指针或复杂指针关系传递时,调用目标可能无法唯一确定。
①检查中断位置是否存在函数指针。
②查看函数指针在哪里赋值。
③确认所有可能目标都已加入项目。
④检查调用图中是否存在未解析节点。
⑤必要时按不同调用目标分别验证。
这种情况别强行认定路径只有一条。嵌入式项目里回调和驱动接口不少,调用目标经常会随配置变化。
5、测试没有触发后续分支
动态数据流依赖实际执行结果。条件不满足、程序提前返回,或者测试中途异常结束,都会让路径停在某个节点。LDRA的动态图形会区分已经执行和未执行的流程,便于继续补充测试。
①找到动态路径停止前的条件判断。
②查看该条件需要什么输入。
③检查测试是否触发提前返回。
④补充能够进入后续分支的测试数据。
⑤重新运行并比较覆盖结果。
如果每次都停在同一个判断前,先看输入值。很多时候问题没那么复杂,就是测试条件一直没满足。
三、Testbed数据流路径怎么进一步复核
路径重新接上后,还要确认数据传递是否符合设计。图能连通,只说明存在关系,不代表这个关系一定正确。
1、结合调用图和源代码复查
①从变量定义位置开始。
②沿数据流报告查看每次赋值。
③通过调用图确认跨函数传递。
④返回源代码检查条件和边界处理。
⑤记录异常的读写顺序。
重点关注未初始化读取、赋值后未使用、跨模块全局变量以及参数被意外覆盖。这些位置通常比单纯的图形中断更值得处理。
2、对比静态与动态结果
静态分析能看到可能存在的传播范围,动态分析能确认测试真正覆盖了哪些位置。两份结果放在一起看,定位会更快。
静态路径中断时,先查源码范围和分析配置;动态路径中断时,先查测试条件和运行数据。这样分开判断,就不会一看到缺线条就反复重跑整个项目。
总结
处理Testbed数据流分析怎么查看Testbed数据流路径中断怎么定位,关键是把静态分析和动态覆盖分开看。先沿变量的定义、赋值、调用和读取检查,再排查源文件范围、宏配置和测试输入。思路理顺后,很多“路径断了”的问题其实很快就能找到原因。希望本文能为大家查看和定位Testbed数据流路径提供参考,如需进一步了解相关内容,可联系咨询。