日常生活当中我们经常接触到的软件是PC机上运行的桌面软件,我们用这些软件写文章、填报表、玩游戏、浏览互联网。但实际生活当中使用最多的其实是嵌入式软件,从最简单的电子表、遥控器、MP3播放器,到手机、汽车、工业控制系统,再到极其复杂的飞机、火箭、核电站,在所有采用电子控制装置的系统中,都或多或少地存在着嵌入式软件的踪迹。从使用数量来看,世界上绝大多数的软件是嵌入式软件。
嵌入式软件的测试挑战
由于其自身的特点,嵌入式软件的测试与传统桌面软件的测试有很大不同。嵌入式软件的开发环境是通用的PC,但运行环境是内嵌的一个小型计算机系统,导致测试时的运行环境不是实际的运行环境,因此在开发环境中对嵌入式软件的测试必然是不充分的。

其次,大多数嵌入式软件都有实时性的要求,要求测试环境本身也是实时的,否则软件的实时特性就无法测出来。在PC机上的测试往往是仿真运行的,很难测出软件的时序关系、逻辑关系,以及精度、性能等和时间相关的因素。
第三,是对整个测试环境的构建。如心脏起搏器和飞机的飞控系统软件,是无法在实际的运行过程中测试的。因此如何构建仿真的测试环境,并尽可能提高测试环境的
真实程度是一个挑战。
中航一集团计算机软件可靠性管理与测评中心是国内专业的嵌入式
软件测试工具和服务提供商,先后推出了通用嵌入式软件仿真测试环境GESTE 1.0和2.0版,为解决嵌入式软件的测试提供了易用、灵活、可扩展的解决方案。
本刊记者采访了中航一集团计算机软件可靠性管理与测评中心、中航二集团计算机质量可靠性管理与测评中心的主任刘斌博士,详细了解了GESTE 2.0的特点和创新之处。
组件化与分层设计实现通用性
刘斌介绍说,GESTE 2.0采用了组件化和构件化设计,可以通过模块直接的叠加,完成对通用的嵌入式软件进行测试。GESTE把半实物仿真的技术应用于嵌入式软件的测试,同时又实现了通用性,这是它的创新之处(图1)。
仿真方式首先是要让被测系统感觉到它捕捉到的信号和控制的东西都是真实的,接口输入和输出的都是真实的模拟量和数字量,只是接口后面的模型是仿真的,不需要使用实物来产生信号。
由于嵌入式软件一般是实时软件,算法、时序关系和代码是非常精巧的。如果在测试时改变它,如插装,或改写一些程序,软件的时序关系就变得不确定了,无法保证测试的准确性。为了避免这个问题,GESTE采用了非侵入式的方式,不对软件进行改动,而是从外部的接口来测试、触发。从模块到组件,从组件到软件系统,再从软件系统与硬件系统结合到一起,到运行环境,是自下而上、自低级到高级的测试环境。单元和组件是可以改变和侵入的,只有到软件集成阶段,才是GESTE要解决的。

另外,通用和性能之间是一对矛盾。GESTE采用基于模型驱动的仿真测试原理,相当于把原来嵌入式软件测试的两层模型改成了三层模型,又通过精巧的算法解决了多增加一层所带来的性能损失问题。
在仿真建模方面,GESTE提供了代码自动生成功能。GESTE可以直接从接口控制文件,或者称接口协议,自动地把这个仿真模型的框架生成出来,使测试人员可以专注于测试,而不用去管如何与环境之间交联,这是GESTE所独有的创新功能。
可定制的测试环境
刘斌领导的开发小组还设计了专用的测试脚本语言,解决了并发性、时序关系的描述性、多任务等测试需求。新脚本语言的解释器和实时虚拟机是建立在实时操作系统VxWorks上,既可以半编译半解释执行,也可以完全编译后执行。
GESTE在易用性、切合测试人员的实际需求方面下了很大功夫。如GESTE提供了测试用例的管理功能,采取了分级管理的方式。GESTE使用了Windows风格的界面和使用方式,迎合了中国用户的习惯和实际情况。
GESTE 2.0里面有专门的数据收集模型,由设计人员进行定义,既可以机械地把数据全部采集进来,也可以设定触发条件,如到某个时间点采集数据,或出现某种情况后采集,从而实现数据压缩。
GESTE的特点之一是可以通过二次开发,变成专用的测试平台。设计人员可以通过MatLab的建模生成模型框架,也可以通过统一通讯协议把其它工具开发的算法内嵌进来,使各个模型之间关联起来。GESTE可以直接调用其它软件生成的可执行的目标码。刘斌说,统一通讯协议是测评中心自主开发的软件接口,吸取了航天、军工等很多行业在开发软件接口方面的诸多经验,现已成为标准的接口。

GESTE可以从早期的快速原型验证,到中期的单元测试、集成测试中,起到辅助作用,而在系统测试中起到主导作用。在原型没有做出来的时候,可以在GESTE上把所有的部件或接口仿真出来,看设计的时序关系是不是正常,也可以把MatLab引入进来。进行了单元测试与集成测试之后的软件需要在实际运行环境中运行,这时可以利用GESTE的仿真源实现仿真和激励,从而对软件施加仿真测试。