高性能嵌入式软件测试工具——CodeTEST
作为全球第一台专为嵌入式系统软件测试而设计的工具套件,CodeTEST
为追踪嵌入式应用程序,分析软件性能,测试软件的覆盖率以及存储器的动态分配等提供了一个实时在线的高效解决方案。CodeTEST
同时还是一个可共享的网络工具,它将给整个开发和测试团队带来高品质的测试手段。
CodeTEST 能同时测试出软件的性能,代码覆盖率以及存储器动态分配,捕获函数的每一次运行,无论是在检测一个局部的软件模块还是整个软件系统测试,工程师只须简单地将CodeTEST
的仿真探头(probe)连接到目标系统的处理器、总线或接头上,预处理待测的源程序,启动CodeTEST,运行测试处理软件,测试结果即可在测试进行过程中或在测试结束后随时翻阅。
CodeTEST 可同时监视整个应用程序,避免了选择程序的哪部分来进行观测以及如何配置相应工具对各部分进行测试时而带来的麻烦,即便是在程序超出高速缓存(cache)或被动态再分配时,CodeTEST
仍能生成可靠的追踪及测试结果。
CodeTEST 采用了专利--插桩技术为嵌入式开发者设计了高性能的测试工具CodeTEST
系列产品包括三种嵌入式软件测试和分析工具:
其中每一种工具代表了嵌入式系统开发的每一个周期的不同开发阶段
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
可以做到精确的数据观察。
目标机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 等。其对应的编译系统为这些平台所支持的主流编译系统。