软件测试是保证软件质量和可靠性的重要手段。但由于嵌入式软件的嵌入性、实时性、反应性等特点[1],使其测试变得非常困难。实践证明,仿真测试是发现嵌入式软件缺陷、提高其可靠性的一种非常有效的方法。
嵌入式软件仿真测试先后发展起来三种主要方案:全实物仿真测试环境、全数字仿真测试环境、半实物仿真测试环境[2-3]。半实物仿真测试能够逼真地模拟、组织被测软件运行所需的真实物理环境输入信号,驱动被测软件运行,同时接收被测软件的输出结果,对被测软件进行自动、实时、非侵入性的闭环测试。由于半实物仿真解决方案能够较好地兼顾真实性和可操作性,从而得到国内外的重视,具有良好的发展前景。典型的半实物仿真测试工具有:德国TechSAT公司的ADS2,美国Opal-RT公司的RT-LAB,德国dSPACE公司的dSPACE等。
1 ADS2测试环境体系结构
1.1 硬件体系结构
ADS2(Avionics Development System/2nd Generation)硬件包括实时主机、工作站、接线矩阵、故障注入单元FIBO(Fault Insertion & Break-Out Unit)、外部设备和被测件等,如图1所示[4]。
ADS2实时主机为VxWorks实时系统,底层采用VME总线,通过不同的VME接口转换板实现CPU板与不同接口之间的连接。接线矩阵用来实现对系统I/O信号的连接和切换;故障注入单元用来模拟实际系统中信号可能产生的故障现象;外部设备是与被测件交互的真实设备,可连接多个;工作站是用户进行测试管理、配置、执行的终端,可以有多个工作站分别执行不同的任务。
1.2 软件体系结构
ADS2软件包括用户工具套件devSMART bench、实时内核VxWorks、仿真模型、接口驱动程序等[5],如图2所示。
用户工具套件用来实现测试场景管理、系统配置、变量观察和数据记录、脚本编辑、仿真建模等。
用户开发接口devExchange提供了一种运行仿真模型的机制,能够使其运行于非实时的工作站或实时主机上。
2 仿真建模实现原理
仿真建模必须满足通用化、实时性的基本要求[6],才能快速构建测试环境,有效进行嵌入式软件测试。
2.1 仿真建模的通用化
嵌入式软件外部设备的I/O接口类型和实现功能差异很大,这就要求在仿真建模时要有很大的灵活性,能够支持不同I/O接口类型,快速实现各种功能算法。
基于CVT(Current Value Table)数据库进行内部数据交换是ADS2仿真建模通用化的核心技术。CVT是一个分布式的实时数据库,存储着ADS2内部的各种I/O数据及其相关的变量名、缺省值、最大/最小值等数据描述。实时内核提供访问CVT变量的方法,ADS2内部所有被测件、真实交联设备、仿真模型、信号仿真工具、数据显示记录工具等之间没有直接的接口,均以CVT为核心进行数据交换,如图3所示。其中,仿真模型、信号仿真工具中的输入输出数据与CVT变量之间的对应关系在仿真接口文档中进行配置;被测件、真实交联设备的I/O接口数据与CVT变量之间的对应关系在硬件接口映像文件中进行设置;数据显示记录工具直接访问CVT变量。
ADS2仿真建模的通用性主要体现在以下几方面:
(1)支持多种I/O接口类型。ADS2支持接口控制文档ICD(Interface Control Document)数据库,可根据每个交联设备的ICD配置相应的IOM文件,支持多种I/O接口类型,如数字I/O、模拟I/O、RS-232、RS-422、ARINC429、MIL-STD-1553、CAN以及非标信号等。
(2)以CVT数据库为核心进行数据交换,使硬件I/O接口与仿真模型算法有效隔离,这样在仿真建模时不需要关心硬件接口类型,而专注于软件功能算法的实现。
(3)利用MATRIX、Matlab/Simulink等第三方工具,能够实现复杂算法的仿真模型。
(4)在测试中,只需修改配置文件,就可实现真实交联设备与仿真模型之间的切换,快速构建各种测试场景。
ADS2在仿真建模通用化方面存在不足之处:仿真模型一旦开发、编译完成之后,仿真参数值不能修改,而在实际测试中,经常需要输入不同参数值的多个用例进行测试,频繁地编译仿真模型很不方便。
2.2 仿真建模的实时性
对于嵌入式软件测试,仿真模型的实时性是最关键的问题之一。影响仿真模型实时性的主要因素有以下几点:
(1)操作系统
ADS2实时主机采用VxWorks嵌入式操作系统。VxWorks具有良好的可靠性和卓越的实时性,保证了能在限定的时间内执行完仿真计算,并能及时对任务进行调度和响应外部事件。
(2)调度策略
ADS2调度策略采用时间驱动模型,VxWorks实时内核以帧为基本时间单位,对各任务进行统一调度。在一个帧周期内:I/O设备可以进行一次完整的数据输入或输出;仿真模型可以进行一次输入变量读取、计算和结果输出;可视化工具可以进行一次CVT变量值读取等。
(3)仿真周期
ADS2每一个仿真帧中包含许多基本帧,基本帧的帧速度、帧数等可由用户设定。仿真程序既可在实时内核上运行也可在工作站上运行,运行于工作站的非实时仿真程序采用环路连接(TCP/IP),运行于实时主机的实时仿真程序采用直接连接(VME、共享内存、反射内存)。直接连接方式下,可以支持很短的帧间隔,典型间隔时间为5 ms,最小可为1 ms。
3 仿真建模方法研究
对嵌入式软件进行仿真测试时,通常需要两种类型的仿真模型:数据源模型和交联设备模型[7]。数据源模型为被测软件的正常运行提供所需的激励信号数据,建模时要重点考虑激励信号的数据类型、时序控制等;而交联设备模型是对与被测件有数据交互关系的外部设备进行建模,建模时要重点考虑交联设备功能的内部算法实现。
3.1 数据源模型建模方法
ADS2提供的信号仿真工具SST(Signal Simulation Tool)拥有良好的图形化编辑界面,可以图形定义测试时序,使用方便、直观,能够用来快速编辑、产生多种类型的信号源数据,如正余弦、斜坡、脉冲信号和用户自定义波形等,并可检查预期行为。
3.2 交联设备模型建模方法
交联设备模型重点在于功能算法的实现,ADS2提供了2种方法。
3.2.1 手工编写仿真模型
针对不同功能的交联设备仿真测试,ADS2提供了用户开发接口devExchange用来连接外部仿真模型。devExchange提供了一种运行仿真程序的机制,用户可以采用C、Fortran、Ada等编程语言进行仿真模型的编写。
手工编写仿真模型的过程如下:
(1)创建测试场景工程文件;
(2)配置基本帧数、帧速度等系统参数;
(3)利用配置管理工具创建CVT文件,添加需要的CVT变量;
(4)硬件接口连接,在I/O映射文档中,将接口数据映射到输入和输出CVT变量;
(5)利用配置管理工具创建仿真接口定义SID文件,建立CVT变量与仿真模型中输入或输出变量的对应关系;
(6)按照ADS2格式编写仿真模型源代码,模型中使用的仿真输入或输出变量要与SID文件中定义的一致;
(7)编辑malefile文件,指明编译目标文件的格式,如:ARCH=PPC表示在VxWorks 55系统上执行,ARCH=win32表示在Windows XP/2000系统上执行等;
(8)利用make命令编译仿真模型源代码,生成目标程序;
(9)添加SID文件和目标程序文件;
(10)设计并添加数据显示记录组件,如数据观察面板、数据记录器等;
(11)执行测试场景。
3.2.2 第三方仿真建模工具实现
ADS2提供的用户开发接口devExchange也支持MATRIX、Matlab/Simulink等第三方建模工具,实现复杂算法仿真模型的快速开发。
利用Matlab进行ADS2实时仿真模型开发的基本方法为:利用Simulink以及控制、通信、鲁棒等工具箱进行仿真模型开发[8];设置RTW(Real-Time Workshop)编译参数,系统目标文件选择为“Generic Real-Time Target”,“template makefile”为ADS2专用的grt_ads2_vxworks.tmf;编译生成目标程序。
4 ADS2仿真测试实例
利用ADS2构建半实物仿真测试环境,对某型DSP处理板进行了测试,测试环境如图4所示。DSP程序从ADC接口读取输入波形数据,经过处理后将结果数据从DAC接口输出;DSP程序通过RS232接口从控制台仿真器接收工作模式等控制命令。
测试时,在工作站上设计数据面板和数据记录器查看、记录输入数据和输出数据,判断程序功能实现是否正确;利用c语言编写仿真模型产生输入波形数据,仿真模型编译生成目标程序后载入ADS2主机实时运行,它能够根据测试数据面板中手工输入的波形时间间隔参数产生不同的输入波形;编写能够产生大数据量的仿真模型,对程序处理速度性能指标进行测试;利用仿真模型产生各种异常输入数据,对程序接口的冗错能力进行测试。
测试中发现,被测软件存在功能实现与设计需求不一致、对一些异常输入未进行冗错处理而导致程序崩溃等问题,经回归测试所有发现问题均关闭,有效提高了软件的质量和可靠性。
本文采用半实物仿真技术,将被测软件的外部设备数字化来进行嵌入式软件测试,不需要消耗时间和精力去连接、调试真实设备,避免了设备在测试使用中的损耗和意外损坏,降低了测试成本,加快了测试环境构建过程。另外,采用仿真模型不但可以进行长时间连续测试,而且可以仿真某些特殊的故障现象、危险条件、超负荷状态等,有效拓宽了软件测试范围。ADS2能够满足嵌入式软件仿真测试的通用化、实时性要求,有效支持数据源、交联设备等多种仿真模型的设计开发,为嵌入式软件测试提供了一种方便、有效的手段。
参考文献
[1] 孙昌爱,靳若明,刘超,等.实时嵌入式软件的测试技术[J].小型微型计算机系统,2000,21(9):920-940.
[2] 康一梅,张永革.嵌入式软件测试[M].北京:机械工业出版社,2008.
[3] 蔡建平.嵌入式软件测试实用技术[M].北京:清华大学出版社,2010.
[4] TechSAT GmbH.ADS2模块目录(B3版)[Z].2002.
[5] TechSAT GmbH.ADS2用户参考手册(C1版)[Z].2003.
[6] 张虹,阮镰,刘斌.嵌入式软件测试中的仿真建模方法研究[J].测控技术,2002,21(3):37-38,42.
[7] 蒋崇武,杨顺昆,刘斌.面向嵌入式软件测试的仿真建模[J].计算机工程,2008,34(4):87-89.
[8] 卓金武.MATLAB在数学建模中的应用[M].北京:北京航空航天大学出版社,2011.