Loading
0

Parasoft C/C++test如何在hightec+Trace32环境下进行单元测试

在嵌入式软件测试中,针对特定工具链进行单元测试与覆盖率分析是确保代码质量的关键环节。Parasoft C/C++test 是一款专业的C/C++代码自动化测试工具,它支持与HighTec等嵌入式IDE集成。下面将会详细阐述如何配置C/C++test,以捕获HighTec项目中的编译数据,并完成后续的单元测试与覆盖率收集。

>>点击获取Parasoft C/C++test试用

1、获取bdf

通过ide界面抓取。

创建一个bat文件,帮我们打开hightec的ide,然后我们在hightec ide里面手动clean再build一下项目就可以了,就会在对应的位置生成一个bdf文件。这里我的bdf文件会在 C:\Users\gew\Desktop\cpptest\下面生成一个cpptest3.bdf文件。

cpptesttrace --cpptesttraceOutputFile=C:\Users\gew\Desktop\cpptest\cpptest3.bdf --cpptesttraceResponseFilePrefix=-Wl,@ --cpptesttraceTraceCommand=tricore-gcc --cpptesttraceProjectName=hightec-demo "C:\HighTecc\ide\htc-ide-v2.3.1\htc-ide.exe"

重要点:一定要检查下bdf文件是否正确,比如说包含的.c 文件,链接阶段的.o

如果碰到链接阶段的.o没有抓取出来,一定要想办法展开这个包含.o的文件。--cpptesttraceResponseFilePrefix这个参数就是这个作用的。

2、导入项目

导入项目前,开启cpptest注意事项:

如果hightec使用的浮动的许可证,可能cpptest内部调用许可证就会出现license问题,这个时候我们需要这样来启动cpptests,创建一个bat来启动,bat里面的内容是这样的:

set RLM_license=192.168.9.245@5053

C:\parasoft_cpptest_professional-2022.2.0-win32.x86_64\cpptest\cpptest.exe -data C:\Users\gew\Desktop\workspace

导入项目,选择bdf导入。然后打开项目的属性,我们需要配置下图的两个地方。


将c编译器,c++编译器,链接器的路径都换成对应的绝对路径。

在将 编译器选项 中的内容替换成下方这个:

${cpptest:original_options} -DPARASOFT_CPPTEST
-DCPPTEST_SYSTEM_ATOMIC_INCREMENT_ENABLED=0 -DCPPTEST_MEMORY_ANALYSIS_ENABLED=0
-DCPPTEST_SETJMP_ENABLED=0 -DCPPTEST_TIME_MODE=CPPTEST_TIME_NOTIME
-DCPPTEST_THREADS_ENABLED=0 -DCPPTEST_ALLOC_IMPL=1
-DCPPTEST_EPT_void_main_no_args -DCPPTEST_MULTI_PROCESSES_COVERAGE_ENABLED=0
-DCPPTEST_USE_LAUTERBACH_FDX_COMMUNICATION

3、处理项目

3.1 找到入口,将入口修改成main

找到代码当中跳转core0_mian的位置,也就是这样的代码: Ifx_Ssw_jumpToFunction(core0_main),在他的上方加上这样几行代码:

#ifdef PARASOFT_CPPTEST
    extern void main(void);
    Ifx_Ssw_jumpToFunction(main);
#else
    Ifx_Ssw_jumpToFunction(core0_main);
#endif

3.2 去插桩

对一个文件去插桩,我们一般这样去处理,左键选中这个.c文件,再右键打开它的属性,找到 执行设置,去掉 插桩。

这样不是特别方便,有一个快捷方式可以对多个文件去插桩。方案如下:
1、将控制台等级调整到高,然后对整个项目进行一个静态分析。在控制台中找到如下信息:

将这个里面的.h去除掉,剩下的.c文件,就是我们可以进行去插桩的所有对象了。

2、找到.parasoft文件
.parasoft文件在工作空间下,项目文件夹下面

3、在这个文件中加入内容,将文件去插桩
举个例子:

想要把/hightec-demo/TC377_imu4050/Mcal/EB_Cfg/src/Adc_PBcfg.c这个文件去除插桩,只要在.parasoft文件中加入这样一行内容就行:

/hightec-demo/TC377_imu4050/Mcal/EB_Cfg/src/Adc_PBcfg.c//com.parasoft.xtest.execution.api.cpp.options.instrument.file=false

同理对步骤1当中的文件做这样的处理。下图是处理好的展示结果:

4、对需要测试的.c文件进行插桩

在上一步中,我们对所有的文件进行了去插桩,这意味着cpptest都不会处理这些文件,所以我们没办法做单元测试,如果我们相对某个文件进行单元测试,就在 .parasoft文件当中,把相关的语句删掉就好,代表对他进行插桩。

5、修改Build Test Executable - Generic Embedded System

1、修改下可执行程序的位置,以及后缀。

<LinkStep result="${cpptest:testware_loc}/${project_name}Test.exe"/>

修改成:

<LinkStep result="${cpptest:testware_loc}/${project_name}Test.elf"/>

2、开启debug信息

<BuildRuntimeLibStep ignoreDbgOpts="true" />。

修改成

<BuildRuntimeLibStep ignoreDbgOpts="false" />

3、关闭安全桩。

6、修改cmm

修改下原始的cmm文件,将可执行程序的位置修改成cpptest生成的新的elf位置。


7、创建一个trace32 fdx传输文件的cmm


文件名随便叫什么,这里就叫做 cpptest.cmm,里面的内容是这样的:

B::

FDX.EnableChannel TestsSendChannel

FDX.METHOD BUFFERE

FDX.OutChannel TestsSendChannel

FDX.write TestsSendChannel "C:\Users\gew\Desktop\workspace\.cpptest\hightec-demo\unit-data\current_tubf179707\cpptest_results.raw" 1.

提示点:

在5和6中都出现了这个路径C:\Users\gew\Desktop\workspace.cpptest\hightec-demo\unit-data\current_tubf179707\,它到底在哪里,其实这个路径在工作空间下的.cpptest文件下面,这个文件夹下面有一个项目文件夹,项目文件夹中有一个unit-data文件夹,下面会有一个current_tubfxxxxxx文件夹。

8、准备一个加载测试结果的测试配置

我已经准备好,直接使用就行。

9、进行单元测试

step1:使用Generate unit tests测试配置生成单元测试用例。

step2:选中测试用例,执行5中处理好的Build Test Executable - Generic Embedded System测试配置,生成一个新的elf文件。

step3:打开trace32,运行6中准备的cmm文件,将新的elf刷写进去。

step4:运行7中准备的cm文件打开fdx。

step5:在trace32中进行debug,输入 g main,检查一下是不是进入到了main函数,如果ok,就 g exit。

step6:关闭fdx窗口。

step7:回到cpptest,运行8中准备的测试配置加载结果。

step8:可以在cpptest当中看到覆盖率了。

通过以上步骤我们成功实现了在HighTecTrace32环境中利用C/C++test执行单元测试的全流程。除了上述功能,Parasoft C/C++test还提供强大的静态代码分析、测试用例自动化生成与团队报告等功能,能够全面帮助客户提升代码质量、确保合规性并加速开发进程。

关于慧都

慧都科技(EVGET)成⽴于2003年,是⼀家⾏业数字化解决⽅案公司,⻓期专注于软件、油⽓与制造⾏业。公司基于深⼊的业务理解与管理洞察,以系统化的业务建模驱动技术落地,帮助企业实现智能化运营与⻓期竞争优势。

慧都科技作为Parasoft公司在中国区的官方授权合作伙伴,为国内企业提供Parasoft C/C++test产品的正版授权、定制化部署与全生命周期技术支持与服务。我们致力于助力客户精准贯彻功能安全标准、全面提升软件开发效率、有效管控项目风险,最终构建符合国际标准的高质量软件体系。