2024年3月9日发(作者:)
高性能嵌入式软件测试工具
—— CodeTEST
作为全球第一台专为嵌入式系统软件测试而设计的
工具套件,CodeTEST为追踪嵌入式应用程序,分析
软件性能,测试软件的覆盖率以及存储器的动态分配等
提供了一个实时在线的高效解决方案。CodeTEST同
时还是一个可共享的网络工具,它将给整个开发和测试
团队带来高品质的测试手段。
CodeTEST能同时测试出软件的性能,代码覆盖率以及存储器动态分配,捕获函数的每一次运行,无
论是在检测一个局部的软件模块还是整个软件系统测试,工程师只须简单地将CodeTEST的仿真探头
(probe)连接到目标系统的处理器、总线或接头上,预处理待测的源程序,启动CodeTEST,运行测试处理
软件,测试结果即可在测试进行过程中或在测试结束后随时翻阅。
CodeTEST可同时监视整个应用程序,避免了选择程序的哪部分来进行观测以及如何配置相应工具对
各部分进行测试时而带来的麻烦,即便是在程序超出高速缓存(cache)或被动态再分配时,CodeTEST仍能
生成可靠的追踪及测试结果。
CodeTEST采用了专利--插桩技术为嵌入式开发者设计了高性能的测试工具 CodeTEST系列产品包
括三种嵌入式软件测试和分析工具:
a. CodeTEST Native
b. CodeTESTSoftware-In-Circuit c. CodeTEST Hardware-In-Circuit。
其中每一种工具代表了嵌入式系统开发的每一个周期的不同开发阶段
CodeTEST系统软件包括以下四个模块:
a) 性能分析(Performance):
CodeTEST 能够同时对多达128000个函数进行非采样性测试,精确计算出每个函数或任务(基于RTOS
下)的执行时间或间隔,并能够列出其最大和最小的执行时间。对于每两个函数或任务之间的调用也能够
计数,从而确认出其中失败的调用和调用次数。CodeTEST的性能分析功能也能够为嵌入式应用程序的优化
提供依据,使软件工程师可以有针对性地优化某些关键性的函数或模块,以及改善整个软件的总体性能。
b) 测试覆盖分析(Coverage):
CodeTEST提供程序总体概况,函数级代码以及源级覆盖趋势等多种模式来观测软件的覆盖情况。由于
CodeTEST是一种完全地交互式工具,测试者可以在对系统进行操作的同时追踪覆盖情况。CodeTEST覆盖
率信息包括程序实际执行的所有内容,而不只是采样的结果,它以不同颜色区分运行过和未运行的代码,
CodeTEST可以跟踪超过一百万个分支点,特别适用于测试大型嵌入式软件。
CodeTEST可以通过确认高隐患的代码段,显示哪些函数、代码块、语句、决策条件和条件已执行过或
未执行过,来提高产品的质量。高级覆盖工具完全符合高要求的软件测试标准(如:RCTA/DO-178B,A级
标准),可以实现语句覆盖(SC级)、决策覆盖(DC级)和可变条件的决策覆盖(MC/DC)。CodeTEST还
能够生成一个融合多种测试结果的综合性报告,以使测试者看到整套测试的总体效果。
c) 动态内存分配分析(Memory):
在CodeTEST诞生之前,动态内存分配情况是难以追踪观测的。CodeTEST的分析能够显示有多少字节
的内存被分配给了程序的哪一个函数。这样就不难发现哪些函数占用了较多的存储空间,哪些函数没有释
放相应的存储空间。测试者甚至还可以观察到内存分配情况随着程序运行动态的增加和减少,即CodeTEST
可以统计出所有的内存的分配情况。随着程序的运行,CodeTEST能够指出内存分配的错误,测试者可以同
时看到其对应的源程序内容。
d) 执行追踪分析(Trace):
CodeTEST可以按源程序,控制流以及高级模式来追踪嵌入式软件。最大追踪深度可达150万条源级程
序,其中高级追踪模式显示的是RTOS的事件和函数的进入退出,给测试者一个程序流程的大框图;控制
流追踪增加了可执行函数中每一条分支语句的显示;源级追踪则又增加了对被执行的全部语句的显示。在
以上三种模式下,均会显示详细的内存分配情况,包括在哪个代码文件的哪一行,哪一个函数调用了内存
的分配或释放函数,被分配的内存的大小和指针,被释放的内存的指针,出现的内存错误。
CodeTEST工具的工作原理与实现过程:
程序员编写的源代码首先会通过CodeTEST的编译驱动器调用原编译器对进行预编译,然后CodeTEST
的插桩器(源代码分析程序)对预编译好的源代码进行自动的插桩,即在需要插桩的关键位置写入一条赋
值语句(如:Metrowerks_ctrt=0x74100009),并把插入的标记送入一个数据库文件中生成一个符号数据库
暂存起来,以备为以后分析时调用。然后,CodeTEST的编译驱动器又会调用原编译器对插桩后的代码进
行编译生成可执行目标代码送到目标板上运行。当程序在目标系统运行到插桩点的位置时,目标板的控制
总线和地址总线上会出现相应的控制信号和地址信号。当CodeTEST的辅助硬件(信号捕获探头)从控制
总线和地址总线上监视到符合以上条件的信号时,CodeTEST会主动地从数据总线上把数据捕获回来送到
CodeTEST的内存中暂存并对这些数据进行预处理,然后将预处理后的数据通过局域网送到工作平台上。
通过与前面生成的符号数据库中的数据进行比较,我们就此得知当前程序的运行状态,借此完成对嵌入式
软件的性能分析,高级覆盖率分析,内存分析和大容量的代码跟踪。
由此可知,CodeTEST是一个硬件辅助软件的测试与分析工具,它一方面吸取软件打点技术,并对这
种技术进行了改善,纯软件工具插入的是一个函数,而CodeTEST插入的是一条赋值语句, 它在汇编级
也是一条语句,所以它执行的时间非常短,同时避免了被其它的中断所中断,所以它对目标系统的影响非
常小(1%-15%)。另一方面,CodeTEST从纯硬件的测试工具那里吸取了从总线捕获数据的技术并且对它
进行了改善,CodeTEST不再是采样的方式,它是通过监视系统总线,当程序运行到插入的特殊的点的时
候才会主动的到数据总线上把数据捕获回来,借此,在同样的处理能力下,CodeTEST可以做到精确的数
据观察。
CodeTEST支持的环境及CPU:
目标机CPU系列:有PPC, MIPS, x86, ARM, ColdFire, DSP (TI, ADI, Starcore) ,
主机环境:SunOs, Solaris, HP-UX, WINDOWS 98/Me/2000/XP, Linux等,
实时操作系统:VxWorks, AE, OSE, QNX, Chorus, pSOS, OS20, Linux, Lynx OS, WinCE, RTXC等。其对应
的编译系统为这些平台所支持的主流编译系统。


发布评论