用创新架构实现实时嵌入式软件测试环境
扫描二维码
随时随地手机看文章
日常生活当中我们经常接触到的软件是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的仿真源实现仿真和激励,从而对软件施加仿真测试。
硬件与软件结构
GESTE的体系机构采用主从式设计,整个测试环境由两台通过以太网连接的计算机构成,宿主机主要负责测试准备阶段的任务,实时处理机主要负责测试运行时任务。测试环境与被测系统之间的连接是依靠实时处理机与被测系统之间的硬件I/O接口(图2)。
GESTE的这种主从式结构,通过基于Windows的宿主机为用户提供图形化的测试用例管理、测试脚本和仿真模型的开发环境,而基于VxWorks的实时处理机用来运行测试用例,实现自动化的测试执行过程,并满足被测系统的实时性要求。宿主机和实时处理机之间是非实时通信机制,实时处理机则采用强实时通信机制,确保与被测系统之间的实时数据通信。
实时处理机软件是仿真测试环境与被测系统之间的桥。用户在宿主机上开发的测试脚本和仿真模型通过以太网下载到实时处理机,以测试任务的形式在实时处理机上实时地运行,并且被有序地组织成被测系统可以接收的数据,通过I/O驱动发送到被测系统,同时接收从被测系统返回的数据结果并进行保存。
实时处理机软件采用三层结构设计:应用层、系统服务层和核心层。核心层是软件的关键部分,它提供了整个系统的任务管理和实时调度机制,以及测试任务间数据通信的实现机制。系统服务层是测试环境为满足测试要求而提供的一系列系统服务的集合,包括数据的实时收集、显示,以及下载数据信息等测试服务。系统服务层建立在核心层中提供的各种机制之上,同时又为应用层提供服务。应用层面向用户,用户可以根据测试需求,并通过服务层提供的各种服务组织测试过程,其中包括开发仿真模型和编写测试脚本等。
通常一次完整的系统仿真测试包括:测试准备、测试执行和测试结果分析三个阶段。GESTE可以在上述三个阶段都提供相应的工具支持,尽量提高测试的自动化水平。
刘斌总结到,GESTE把传统的技术和通用原理巧妙地组合在一起,把基于半实物仿真的平台扩展到嵌入式软件的实时测试。自1998年设计出这个体系结构以后,迄今为止都没有大的改动。在GESTE中以模型为单元运行。在模型间通过协议保证协同工作,模型间通过测试总线相连,称为测试统一通信协议。各个模型可以组合,也可分开,可以有时序,也可以并行执行。GESTE在测试脚本和硬件测试中间加了一层,解决了性能和通用性问题。
刘斌透露,GESTE的后继版本也可能支持QNX、RTLinux等RTOS,并且,有一个小组正在开发基于开源RTOS的专用于嵌入式软件测试的操作系统,把一些软件测试的常用服务和模式做成一个服务,这样就可以大大提高应用性、系统精度和性能。由于GESTE采用分层设计,已经把操作系统屏蔽掉了,只要设计新的接口,就可以在新的操作系统上运行起来。