1、引言
嵌入式计算技术在现代信息技术中的应用越来越广泛,应用所涉及的软、硬件系统越来越复杂,对系统软件可靠性、健壮性及系统性能的要求越来越高。如何提高嵌入式计算系统的软、硬件可靠性和整体性能,及如何对这些指标进行有效测评,是目前嵌入式应用领域的重要课题和研究方向[1]。
2、嵌入式软件测试方法研究的现状>
从国内外目前的嵌入式系统软件测试研究现状来看,对于软件分支覆盖率、性能分析等重要指标的获取,无外乎采用的都是介入式[2]与非介入式[3]两种方法之一。介入式方法主要还是采用静态分析和产生可执行代码的插桩式动态分析等方法进行的。而非介入式测试方法则是主动采集被测试系统运行状态数据并根据测试需求进行必要的分析但不影响目标系统的运行,通过获取目标系统运行时全部或必要的状态信息,结合被测试目标软件的静态特征,来了解目标软件的实际执行情况。但是无论采取那种测试方法,到目前为止都仍然有其各自的不足和缺陷如表1所示。
表1 两种测试方法及测试项目对照表
从表中可以发现,对于应用比较普遍的介入式测试方法,由于人为插桩而引入的程序段诱发BUG的概率太高,给测试工作会带来额外的工作量,因此也就间接的延长了程序的研发周期,使研发效率大大降低。而测试效果较好的非介入式测试方法,由于对硬件环境的要求比较苛刻,需要一个特制的运行平台,适合于应用在特定程序的测试,到目前为止还没有形成可重用的架构环境,因此推广起来相对比较困难。
3、系统设计思想
我们在对国内外嵌入式软件测试方法的应用情况研究的基础上,通过长期的探索试验,参考已有研究成果[4],设计了一套基本上可以实现无干涉测试的应用工具和方法,其系统设计思想框架如图1所示。
图1 系统设计框架
从图中可以看出,核心实际上是两个部分:信号采集部件和综合分析模块。
(1)信号采集部件:
在所实施的实际系统中,信号采集部件的硬件实现如图2所示。
图2 信号采集硬件连接原理图
设计采集传感器的时候主要采用了并行接口芯片8255A作为信号采集卡的核心部件,结合数据锁存器(74LS245)、地址锁存器(74LS244)、地址译码电路(74LS138)等电路,外部接口采用PCI总线标准与HOST主机并行口相连,另一端连接JTAG下载板,JTAG下载板通过扁平排线连接ARM板,主要抓取目标机在程序运行过程中的缓冲器的信息,然后将采集到的所有信息上传到信息格式化处理器,对所关心的信号进行保留并进行格式化处理,根据宿主机发出的控制指令将处理好的信息暂时存入信息存储器,以备宿主机对这些信息进行分析。信息格式化处理的处理格式见表2所示。
表2 信息处理格式
其信号采集流程如图3所示。
图3 信号采集流程
信号采集实现程序块如下:
得到的信息如图4所示。
图4 信息表
得到采样信息后,要对其进行跟踪,看调入目标机缓存中的代码是否和采集到的信息完全相符,经甄别后将已经被执行的代码按照表2的格式给出(见图4)。
(2)综合分析模块:
在得到由采集模块送来的动态信息之后,要与预先经过静态分析得到的结果进行对照分析,对不符合静态条件下的结果地方予以给予标注并给出适当的调整建议。其分析对照流程如图5所示。
图5 综合分析流程
综合分析实现程序块为:
4、测试应用
我们将上述设计的测试工具和方法对一段程序进行了实验验证,具体被测程序如下(8086汇编指令, 此处机器码为X=12时的):在这个程序段中包含了两个条件分支和两个无条件分支语句,根据输入的数据X的值决定在哪儿进行条件转移,经过静态分析可以得出以下分析结果:
当X=12时,程序的语句执行序列是: 1,2,3,4,5,6,7,10,11,12,13
当X=-3时, 程序的语句执行序列是: 1,2,3,4,9,10,11,12,13
当X=0时, 程序的语句执行序列是: 1,2,3,4,5,10,11,12,13
当这段程序在目标机上运行时,我们得到的语句执行序列及消耗时间和语句地址记录为:
从上面的三种结果表中可以很清楚的看到,程序的执行结果与静态分析结果一致,并且指令执行序列、执行时间与静态分析结果完全相符,因此,可以得出一个结论:该程序满足设计要求。
但是从运行的结果看,无论所取数据是什么,语句8始终没有遍历到,所以可以得出这样一个结论:语句8为不可达指令,可以从源程序中将之删除,并不影响程序的正确性。
5、结论
我们设计的这种测试方案是介于干涉性与非干涉性测试手段之间的一种调和方法,数据的采集过程类似于一个软性的逻辑分析仪,对目标程序的运行过程不产生任何干涉性的影响,进而实现了目标软件的全实时运行,可以说这是一种测试手段和方法的新尝试。
这套测试方案的最明显的优点是不需要考虑源程序中是否含有不可达指令,只关心执行语句的序列,采样分析的过程相对比较简单,这种方法属于一种框架结构,比较适合更大范围的推广应用。
但是本方案也有其明显的不足和缺陷:第一,由于本方案的采集电路部分采用的是8255A并行接口芯片,工作频率相对比较低,在进行信号采集的过程中,明显感觉到实时效果不够好,如果能够将信号采集部分应用采样速度比较好的接口电路,则本方案的测试效果会得到明显改善;第二,本方案只是对被测软件的执行情况进行了跟踪和记录,并没有涉及到对程序的功能测试,因此在对此方案进行改进时可以考虑在综合分析模块中加入功能性分析的部分。到目前为止,本方案只是实现了一种测试工作,还有很多功能亟待扩充和完善。
嵌入式软件的测试方法与手段是随着应用的发展而发展,到目前为止,航天飞行器中,特别是导弹上使用的嵌入式软件的测试仍然是一个没有彻底解决好的难点,如何利用多种多样的测试方法和手段开发出一种更具有普遍意义的测试方法是我们国家军用软件行业需要努力奋斗的一个方向。
|