没有合适的资源?快使用搜索试试~ 我知道了~
首页嵌入式软件测试工具codetest
嵌入式软件测试工具codetest

作为全球第一台专为嵌入式系统软件测试而设计的工具套件,CODETEST为追踪嵌入式应用程序,分析软件性能,测试软件的覆盖率以及存储体的动态分配等提供了一个实时在线的高效率解决方案。CODETEST还是一个可共享的网络工具,它将给整个开发和测试团队带来高品质的测试手段。 CODETEST可同时监视整个应用程序,这就避免了在选择程序的哪部分来观测以及如何配置相应工具来对各部分进行测试时带来的困难。即便是在程序超出高速缓存(cache)或被动态再分配时,CODETEST仍能生成可靠的追踪及测试结果。 在进入连续运行模式时,CODETEST能够同时测试出软件的性能,代码覆盖以及存储器动态分配,捕获函数的每一次运行,无论是在检测一个局部的软件模块还是整个软件系统测试,工程师只须简单地将CODETEST的仿真探头(probe)插到目标系统的处理器上,预处理待测的源程序,启动CODETEST,运行测试处理软件。测试结果在测试进行过程中或在测试结束后均可随时翻阅
资源详情
资源评论
资源推荐

CODETEST——嵌入式软件实时测试工具
作为全球第一台专为嵌入式系统软件测试而设计的工具套件,CODETEST 为追踪嵌入式应用程序,分析软件性能,测试软件的覆盖率以及存储体
的动态分配等提供了一个实时在线的高效率解决方案。CODETEST 还是一个可共享的网络工具,它将给整个开发和测试团队带来高品质的测试手
段。
CODETEST 可同时监视整个应用程序,这就避免了在选择程序的哪部分来观测以及如何配置相应工具来对各部分进行测试时带来的困难。即便
是在程序超出高速缓存(cache)或被动态再分配时,CODETEST 仍能生成可靠的追踪及测试结果。
在进入连续运行模式时,CODETEST 能够同时测试出软件的性能,代码覆盖以及存储器动态分配,捕获函数的每一次运行,无论是在检测一个
局部的软件模块还是整个软件系统测试,工程师只须简单地将 CODETEST 的仿真探头(probe)插到目标系统的处理器上,预处理待测的源程序,
启动 CODETEST,运行测试处理软件。测试结果在测试进行过程中或在测试结束后均可随时翻阅。
CODETEST-ACT(Codetest Advanced Coverage Tools)使得软件测试符合美国 FAA,DOD178B,波音飞机等标准。
基本的 CODETEST 系统包括以下四个模块:
1. 性能分析:¾
CODETEST 能够同时对多达 32000 个函数进行非采样性测试,精确计算出每个函数或任务(基于 RTOS 下)的执行时间或间隔,并
能够列出其最大和最小的执行时间。对于每两个函数或任务之间的调用也能够计数,从而确认出其中失败的调用。CODETEST 的性
能分析功能也能够为嵌入式应用程序的优化提供依据,使软件工程师可以有针对性地优化某些关键性地函数或模块,以及改善整个软
件地总体性能。
2. 测试覆盖分析:
CODETEST 提供程序总体概况,函数级代码以及源级覆盖趋势等多种模式来观测软件地覆盖情况。由于 CODETEST 是一种完全地
交互式工具,测试者可以在对系统进行操作地同时追踪覆盖情况。
CODETEST 覆盖率信息包括程序实际执行的所有内容,而不是采样的结果,它以不同颜色区分运行和未运行的代码,CODETEST 可
以跟踪超过一百万个分支点,特别适用于测试大型嵌入式软件。
CODETEST 还能够生成一个融合多种测试结果地综合性报告,以使测试者看到整套测试地总体效果。
3. 动态存储器分配分析:
在 CODETEST 诞生之前,动态地存储器分配情况是难以追踪观测的。CODETEST 的分析能够显示有多少字节的存储器被分配给了
程序的哪一个函数。这样就不难发现那些函数占用了较多的存储空间,那些函数没有释放相应的存储空间。测试者甚至还可以观察到
存储体分配情况随着程序运行动态的增加和减少,即 CODETEST 可以统计出所有的内存的分配情况。随着程序的运行,CODETEST
能够指出存储体分配的错误,测试者可以同时看到其对应的源程序内容。
4. 执行追踪分析(TRACE):
CODETEST 可以按源程序,控制流以及高级模式来追踪嵌入式软件。最大追踪深度可达 150 万条源级程序,其中高级追踪模式显示
的是 RTOS 的事件和函数的进入退出,给测试者一个程序流程的大框图;控制流追踪增加了可执行函数中每一条分支语句的显示;源
级追踪则又增加了对被执行的全部语句的显示。在以上三种模式下,均会显示详细的内存分配情况,包括在那个代码文件的那一行,
那一个函数调用了内存的分配或释放函数,被分配的内存的大小和指针,被释放的内存的指针,出现的内存错误。
CODETEST-ACT(Codetest Advanced Coverage Tools)扩展了 CODETEST 的简单语句覆盖(SC)为决策覆盖(DC)以及条件决策覆盖
(MC/DC)如下:
SC(Statement Coverage)每一条源代码语句执行过即视为这一条语句 100% 覆盖。
DC(Decision Coverage)对于每一条条件语句(if/switch/do/while/for)语句的每一个不同的决策值至少出现一次才可被视为 100%覆盖。例如
每条 if 语句至少执行两次,至少一次结果为 true 且至少一次结果为 false 才可视为完全覆盖。
MC/DC(Modified Condition/Decision Coverage)对于每一条条件语句的条件,在分解为乘积最小项的加法的真值表中,至少每一个最小项的
条件都被满足一次才可视为完全覆盖。
AMC 公司推出全新产品:万用型嵌入式软件在线测试系统(CodeTEST ),支持所有的 32/16 位 CPU 和 MCU,支持总线频率高达 100MHz,
可通过 PCI/VME/CPCI 总线,MICTOR 插头对嵌入式系统进行在线测试。无需改动用户的 PCB,与用户系统的连接极为方便。
1

CODETEST 嵌入式软件在线测试与分析工具在嵌入式系统开发中的应用
摘要:嵌入式软件的应用与开发是当今计算机软件发展的一个热点。本文首先分析了在嵌入式系统开发中软件开发的重要性,
接着分析了传统测试方式的缺点,并在此基础上介绍了 AMC 公司的 CODETEST 嵌入式软件在线分析与测试解决方案。
关键字: 嵌入式 软件分析 软件测试 动态测试 实时 白盒测试
引言:随着嵌入式技术的发展,嵌入式应用的不断增长以及嵌入式系统复杂性不断提高,要求嵌入式软件的规模和复杂性也
不断提高,嵌入式软件的质量和开发周期对产品的最终质量和上市时间起到决定性的影响,嵌入式软件的开发、分析与测试成
为了研究的热点。针对这一变化,本文提出了一种为嵌入式软件的开发、分析与测试特别设计的一种测试方法。
嵌入式软件分析与测试的重要性
随着计算机硬件技术的进步和元件质量逐步提高,元件的集成量也大大增加,从而使嵌入式设备的硬件性能得到了极大的提
高;与此同时,通过采用成熟的商用操作系统,使系统运行在一个高性能的、可靠的软件平台上,为实现各种大型的复杂的应
用打下了良好的基础。面对系统复杂性的增加,自然需要功能强大、性能稳定的应用软件与之相适应。所以,在嵌入系统开发
中软件的代码量也越来越大,电子类产品的代码量以每两年就翻一翻的速度增长。同时,系统又要求应用也要精简高效、稳定
可靠,使软件的开发在整个系统开发中所占的时间也越来越长,软件的质量对产品的最终质量起到了决定性的作用。但是事实
上由于软件的开发缺乏科学的管理手段,开发的软件得不到很好的测试与分析,所编写的程序没有得到有效的测试就交付给用
户使用。那些没有运行过的代码带着潜在的危险交付到客户手中,经常会给用户带来巨大的经济损失、为产品供应商带来信誉
上的损失,在一些特殊的领域甚至会危及人的生命安全。
综上所述,随着嵌入式系统的发展,我们迫切需要一种工具能够在软件开发的单板阶段、集成阶段、系统阶段等各阶段对嵌
入式系统的软件进行实时在线的测试与分析,以保证系统的性能和可靠性。
市面上流行的测试工具大致分为纯软件的测试工具和纯硬件的测试工具(如逻辑分析仪和仿真器等),下面我们从原理上分
析使用传统的测试工具对嵌入式软件进行分析和测试的优缺点。
纯软件的测试工具
2

纯软件的测试工具采用的是软件打点技术,在被测代码中插入一些函数,用这些函数来完成数据的生成,并上送数据到目标
系统的共享内存中。同时在目标系统中运行一个预处理任务,完成这些数据的预处理,将处理后的数据通过目标机的网口或串
口上送到主机平台。这一切都需借助于用户的目标处理器完成。通过以上过程,测试者得以知道程序当前的运行状态。 从上述
分析可知,纯软件的测试工具的测试原理有两个必然存在的特点——插桩函数和预处理任务。
由于插入插桩函数和预处理任务的存在,使系统的代码增大,更严重的是这些代码会对系统的运行效率有很大的影响(超过
50%)。函数本身要有它的实现过程,它要完成数据的生成和暂存,而且这些函数在它的实现过程中还可能被其他优先级更高
的中断程序所中断,预处理任务需要占用目标系统 CPU 处理时间、共享内存和通信通道完成数据的处理、数据的上送。由于这
些弊端的存在,当采用纯软件测试工具对目标系统进行测试时,用户目标系统是在一种不真实的环境下运行的,我们所捕获的
数据也是不够精确。
所以采用纯软件的测试工具缺乏性能分析,它不能对用户目标系统中的函数和任务运行的时间指标进行精确的分析。
当做覆盖率分析的时候,因为要大量打点,而打点多于 200 时就会影响系统的运行,所以只能做单元覆盖率分析且单元的程
序量不能太大。
它不能对内存的动态分配进行动态的观察。
纯硬件的测试工具
纯硬件工具通常用于系统的硬件设计与测试工作。当它用于软件的分析测试时,却无法满足用户的基本要求。
以逻辑分析仪为例,逻辑分析仪是通过监控系统在运行时总线上的指令周期,并以一定的频率捕获这些信号,通过对捕获的
信号进行分析来判断程序当前运行的状况。由于它使用的是采样的方式,难免会遗失一些重要的信号;同时,分析的范围也及
其有限。以性能分析为例,当使用某种逻辑分析仪进行性能分析时,我们只能以抽样的方式,同时对80个函数做性能分析,
得到一个不精确的结果;而若使用 CodeTEST,我们可以同时对 128 000个函数做性能分析,得到一个精确的结果。
3

当对程序做覆盖率分析时,因为硬件工具是从系统总线捕获数据的,如当 CACHE 打开我们会采用指令预取技术,从外存中
读一段代码到一级 CACHE 中,这时逻辑分析仪在总线上监视到这些代码被读取的信号,就会报告这些代码已经被执行了,但实
际上被送到 CACHE 中的代码可能根本没有被命中。为了避免这种误差必须把 CACHE 关闭掉,而 CACHE 关掉就不是系统真实
的运行环境了,有时甚至会由于 CACHE 关闭而导致系统无法正常运行。
而仿真器通常采用内存标记技术,它所关心的也是处理器从外存的代码段读取数据的情况。所以也无法在 CACHE 打开的方
式下工作。而它的性能分析也是以仿真器的时间系统以抽样的方式进行的,也无法时实对系统进行真实的分析。所以我们所得
出的结果也是不精确的。
纯硬件工具根本不能对内存分配进行分析和检查的能力。
CodeTEST 对软件分析测试功能的实现原理
AMC 公司吸取了纯软件测试工具和纯硬件测试工具的优点,并对它们进行改善和提升后推出了 CodeTEST。
由上图我们可以看出,程序员编写的源代码首先会通过 CodeTEST 的编译驱动器调用原编译器对进行预编译,然后
CodeTEST 的插桩器(源代码分析程序)对预编译好的源代码进行自动的插桩,即在需要插桩的关键位置写入一条赋值语句
(如:amc_ctrt=0x74100009),并把插入的标记送入一个数据库文件中生成一个符号数据库暂存起来,以备为以后分析时调用。
然后,CodeTEST 的编译驱动器又会调用原编译器对插桩后的代码进行编译生成可执行目标代码送到目标板上运行。当程序在
目标系统运行到插桩点的位置时,目标板的控制总线和地址总线上会出现相应的控制信号和地址信号。当 CodeTEST 的辅助硬
件(信号捕获探头)从控制总线和地址总线上监视到符合以上条件的信号时,CodeTEST 会主动地从数据总线上把数据捕获回
4

来送到 CodeTEST 的内存中暂存并对这些数据进行预处理,然后将预处理后的数据通过局域网送到工作平台上。通过与前面生
成的符号数据库中的数据进行比较,我们就此得知当前程序的运行状态,借此完成对嵌入式软件的性能分析,高级覆盖率分析,
内存分析和大容量的代码跟踪。
由此可知,CodeTEST 是一个硬件辅助软件的测试与分析工具,它一方面吸取软件打点技术,并对这种技术进行了改善,纯
软件工具插入的是一个函数,而 CodeTEST 插入的是一条赋值语句,它在汇编级也是一条语句,所以它执行的时间非常短,同
时避免了被其它的中断所中断,所以它对目标系统的影响非常小(1%-15%)。另一方面, CodeTEST 从纯硬件的测试工具那
里吸取了从总线捕获数据的技术并且对它进行了改善,CodeTEST 不再是采样的方式,它是通过监视系统总线,当程序运行到
插入的特殊的点的时候才会主动的到数据总线上把数据捕获回来,借此,在同样的处理能力下,CodeTEST 可以做到精确的数
据观察。
CodeTEST 强大的测试分析功能。
由于 CodeTEST 对软件打点技术和从总线捕获数据进行了改善和提升,正是这种原理上的优势,所以 CodeTEST 具有强大的
性能分析、内存分析、高级覆盖率分析和代码跟踪功能。
1.强大的性能分析:CodeTEST 能同时对 128000 个函数和 1000 个任务进行性能分析,可以精确的得出每个函数或任务执行
的最大时间、最小时间和平均时间,精确度达到 50ns;能够精确的显示各函数或任务之间的调用情况,帮助你发现系统瓶颈、
优化系统和提升你的系统性能。
2. 强大的覆盖率分析。 CodeTEST 可以在系统真实的环境下,可以从单元级、集成级、系统级以及产品终端现场阶段进行
嵌入式软件的分析与测试。帮助测试工程师掌握当前的测试覆盖率数据,指导测试用例的编写。
3. 强大的内存分析。CodeTEST 可以动态追踪内存分配,报告内存出错和相应的原始数据。他不仅可以在程序运行时报告
为每条语句分配多少字节的内存,而且他可以鉴别 20 多种内存分配的错误。例如:CodeTEST 可以捕捉“释放空指针(freeing a
null pointer)”一样常见的程序错误,报告发生错误的函数和代码行帮,助你尽早发现动态内纯泄漏,而无需到系统崩溃时。
5
剩余25页未读,继续阅读















安全验证
文档复制为VIP权益,开通VIP直接复制

评论13