软件可靠性仿真测试平台实时技术研究
 

2009-03-24 作者:刘东艳 申功勋 来源:测控技术

 

软件可靠性测试是当前软件技术领域中一个比较热门的话题,软件可靠性对整个系统可靠性的影响越来越大,尤其对于航空类系统软件来说,软件故障往往是导致系统失败的主要原因之一。采用模拟被测目标软件实际运行环境对软件进行测试是目前国内外一致认为比较理想的软件测试方法之一。合理设计目标软件可靠性的运行环境,较为真实地模拟出被测软件的真实运行环境,不但可以检测到目标软件运行过程中存在的故障,而且也可以保证测试结果的真实性和置信度。

本文在介绍软件可靠性仿真测试平台的组成及功能的基础上,以仿真器分系统为例,对平台在实时测试过程中的一些实现技术进行了研究。

1 仿真测试平台系统功能及组成框架

整个仿真测试平台采用分布式结构,由主控机分系统(以下简称为主控机)、仿真器分系统(以下简称为仿真器)和激励器分系统(以下简称为激励器)三个分系统组成,各分系统与被测目标软件的交联关系如图1所示。其中,主控机是测试平台的控制中心,它负责生成原始测试数据,向仿真器、激励器分发测试用例,协调两个分系统的工作,并根据测试状况控制仿真器和激励器的工作模式。仿真器和激励器将主控机传送过来的测试用例数据,生成真正的目标软件可以接收的测试用例数据传送给目标系统,同时,仿真器和激励器负责将自身工作状态信息和从目标系统得到的测试结果数据通过底层网络实时或非实时地传送回主控机。

图1 仿真测试平台的交联关系图

由于目标软件由汇编语言写成,内部处理过程较为复杂,所以采用黑盒测试方法。目标软件的处理周期为25 ms,因此在实时测试过程中,需要每25 ms有一组测试用例数据由仿真器通过1553B总线,激励器通过并口同时输入给目标软件。仿真器和激励器不仅需要每25 ms产生目标软件的输入数据,同步向目标软件发送数据,而且仿真器还能接收目标软件的输出,并且对输出数据进行相应的实时处理,如结果数据的收集、保存及数据的显示等等。由于整个测试平台是在非实时、多任务的Win98操作系统上实现的,因此,如何利用Win98的多任务并发的特性,采用合理的任务调度策略,在任务处理周期内,按时完成各种任务,并将多个任务协调一致,是整个设计过程中主要应该解决的问题。

在图1所示的平台各分系统中,主控机与目标软件是通过仿真器形成实时闭环的。仿真器通过测试用例,实时给出目标软件闭环运行所需要的交联子系统发出的命令和数据,使得目标软件能够在较为真实的仿真任务剖面和交联环境中运行。因此,仿真器是仿真测试平台中的一个重要组成部分,仿真器的实时实现方法是整个平台系统设计的重点。

2 仿真器分系统的功能设计及实时实现技术

2.1 仿真器分系统功能结构

仿真器分系统是个实时任务系统,在整个测试过程的运行模式下,需要并发处理不同的任务,如数据实时存盘、提取、交互式显示、每25 ms驱动1553B总线等任务,任务调度涉及到CPU、内存、网络、硬盘、数据结构、I/O接口等资源,因而合理调度各个任务,正确分配其所占用的系统资源,是仿真器测试平台设计的关键之一。

为了提高平台系统的可靠性和故障快速恢复能力,仿真器采用功能模块化设计方法。不同任务对应的工作模块工作相对独立,可以随时依据新技术对相应模块的软件算法进行更新和扩充,这种设计易于发挥Win98的多任务的特性,提高平台系统实时工作的能力。其中,任务调度管理模块是仿真器平台系统的核心,其他各功能模块的运行都是在管理调度模块的统一管理控制下完成的。它与其他任务的功能模块之间的逻辑调用关系如图2所示。

图2 任务调度管理模块调用关系

在仿真器设计中,除了必要的网卡(和主控机连接)和MBI卡(和目标系统连接)等硬件设备以外,仿真器的各项功能均是通过软件来完成的,因而系统软件设计中采用合理的调度策略,避免操作系统的缺陷,以实现仿真器的功能。

2.2 仿真器分系统实时实现技术

2.2.1 任务调度管理模块

从上面的讨论知道,仿真器的实时性是通过仿真器的任务调度管理模块实现的。任务调度管理模块为仿真器分系统的主控模块,是分系统的全面管理者。该模块根据用户通过仿真器分系统人机接口界面输入的参数、显示过程的控制命令和主控机通过网络传送来的控制命令及参数,对并发执行的实时自检/维护、网络通信、交联仿真数据生成、数据/状态显示、数据记录、交联数据驱动、测试过程分析以及仿真器不同功能模式对应的任务队列进行管理和调度,协调各模块的工作,进行各模块的衔接,实现各线程的管理,完成与目标系统实时交联仿真任务。

2.2.2 仿真器分系统任务划分

由于仿真器分系统是用于目标软件的实时仿真测试,每个任务都必须根据目标软件运行的需要,满足实时交联仿真的定时限制,所以,为保证仿真器的实时性能,根据任务和平台系统工作模式的不同,在调度框架中集中不同的调度策略,任务调度涉及到实时任务和普通分时任务的调度。

按照仿真器所处的运行模式,将其任务划分为实时任务和非实时任务。

实时任务指在仿真测试过程中,仿真器需要在确定时间内完成的任务,包括:

  • 命令控制(包括测试开始、工作模式切换、驱动通信接口、测试结束等);
  • 与被测目标软件之间的实时交联数据驱动任务;
  • 与主控机分系统之间的实时网络通信任务;
  • 交联数据实时生成;
  • 测试数据和测试结果数据的记录和显示;
  • 测试结果数据的初步精度分析和状态逻辑验证。

非实时任务指对于任务完成的时间没有严格约束的任务,包括:

  • 用户通过界面进行的分系统参数和有关配置描述;
  • 分系统初始化及用户指定分系统自检和维护;
  • 测试数据的事后回放;
  • 数据库操作。

为系统任务调度管理的方便,根据任务的属性、等级和处理周期的不同,将实时任务划分为动态任务和静态任务,静态任务又包括长周期任务和短周期任务。

动态任务指动态跟踪系统状态,根据实际运行状况,临时加入的任务,如实时自检任务、系统发生故障时动态加入的异常处理任务等。

长周期任务指可以在多个时间标签内完成的任务,如有必要,这类任务可在时限还没有完成就终止。包括显示任务、记录任务、从数据库或数据文件中读取数据到内存的任务。

短周期任务指对任务完成的时间有严格的限定,必须在一个时间标签内完成的任务,即在25 ms周期内,完成对目标软件的一次驱动,同时接收目标软件的对外输出。包括交联数据的生成、交联数据的1553B驱动、从主控机接收和向主控机发送测试数据信息包、仿真器应答信息包的网络通信任务等周期性的任务。

上述各类任务在其生命周期内一般都包括创建、就绪、挂起、运行、取消和结束六种状态,其状态转换关系如图3所示,由总的任务调度控制器将各任务带入不同的状态。

图3 任务状态转换关系示意图

2.2.3 仿真器调度模块的设计

仿真器对于各类任务采用时间、事件以及数据驱动相结合的调度原则进行控制管理。为了提高系统的实时性和适应性,采用了动态和静态调度策略相结合、任务发生的周期和优先级相结合的调度方式。

在调度框架中集中不同的调度策略。在运行模式下:系统测试工作正常,则对于周期性的实时任务采用静态生成的调度策略;在系统发生故障时,则采用临时的动态调度策略,它根据系统的运行状况,实时加入动态任务,并根据动态任务的级别,决定该任务是立即执行还是按顺序执行。随着故障的排除,取消该任务,系统重新恢复到先前的调度策略。

仿真器根据任务运行占用时间的不同,以不同速率来调度不同模块,满足实时驱动的要求。采用优先级调度和分时调度相结合的方式:优先级调度方式即调度模块对于每一项任务都赋予了严格的优先级,按优先级的次序从高到低执行;分时调度方式是采用时间片轮转的方式来执行各个任务,这种调度方式多是在终止模式下采用(或在运行模式下,系统已经完成短周期的任务,还留有时间余量的情况下)。例如,对于1553B数据驱动和交联数据生成等短周期任务在每25 ms定时到时串行化执行,被赋予了较高优先级,而对于显示和记录数据等长周期任务分时执行或交叉执行,被赋予了较低优先级,以保证能正常驱动MBI卡。

在优先级调度方式中,采用优先级浮动的原则:即根据系统实时处理任务的不同,按照需要动态地改变优先级。系统在正常运行时,优先级不变;当系统发生严重故障时,调度模块动态触发异常处理任务,并根据故障类别和故障被维护的状况,动态调整模块处理级别。对于影响系统测试的重要模块,调度模块启动相应的备份储备模块,同时将“暂停测试”的申请通过网络发送到主控机。这样,系统就具有了故障恢复能力,实现了关键部分的冗余保护,提高了可靠性。

根据上述设计,在实时测试过程中,仿真器的实时调度层次模型如图4所示。

图4 RUN()模式下实时任务调度模型示意图

基于以上的调度策略,任务调度管理模块采用以下方式对各模块进行调度:

  • 中断方式:当总的任务调度器监控到消息队列中最高消息到来时,立即申请软件中断,或者有硬件中断申请时,系统立即停止当前执行的任务,执行相应的中断处理。
  • 定时方式:实时测试开始后,定时器每25 ms发出定时消息,定时将需要发送的测试用例数据送到MBI卡上。
  • 消息方式:基于Win98消息传递机制,由线程调度方式实现。
  • 信号量及全局变量方式:总的任务调度器监控到任务启动的信号量或状态量改变后,按任务的等级运行任务。

根据系统任务调度管理的方式,将任务消息的处理级别分为三个优先级:

①最高级消息:该类消息要求系统立即响应,具有此类优先级的模块在系统实时仿真中处于核心地位。该消息不放到Windows的系统消息队列中排队,而是直接送到相应的应用消息队列中,供应用程序处理。这样可以避免无节制的消息循环,保证了消息处理的及时性。

②时钟级消息:由精确定时器产生“定时时间到”的消息。在正常测试过程中,该消息为最高级别。时钟级的消息主要分配给在实时测试中的数据生成模块和驱动模块。

③普通级消息:该类消息主要分配给用户接口模块、记录模块等功能模块。

2.2.4 仿真器关键功能模块的实时性实现技术

①网络通信模块:非实时部分采用TCP/IP协议方式进行网络传输。实时部分利用设置网络通信缓存区的方式,从通信结果上可以部分实现网络传输的实时通信,其关键在于缓冲的深度。或者采用VXD技术,直接对网卡进行传输操作,可以避免由于网络延迟而影响系统实时性能的缺陷。

②显示模块:在实时测试过程中,通过该模块,可以显示测试数据,并且用户能对测试过程进行控制。在实时测试中,中心任务处理周期为25 ms,在任务周期的空余时间还需要进行其它处理。因此在每25 ms周期内,留给显示任务的时间就非常少,另外由于人眼对数据变化的敏感程度低于25 ms,因此每50 ms以上进行一次相关数据显示就可以满足系统的需求。在数据显示中,文本显示比图形显示占用CPU处理时间要少许多。在图形显示中,采用高性能的图形处理算法,可以保证图形处理的实时性。另外,随着图形卡硬件性能的提高,在图形加速卡性能保证的情况下,系统只需计算图形描述语句占用CPU的时间,图形绘制方面的时间可以不给予主要考虑。图形实时显示算法还有待进一步研究。

③交联数据1553B驱动模块:由于Win98处于安全模式,Win98中的虚拟内存地址与实际物理地址并不一致,用户不易直接访问硬件的实际物理内存地址和I/O口地址。为了满足实时驱动MBI卡的需要,通过WinDriver工具软件,直接映射MBI卡上的实际物理内存地址和I/O地址,并将硬件中断虚拟化,利用WinDriver生成的一系列读写内存和I/O口地址的函数,用户就可以直接快速地对硬件进行控制。实验结果表明,在Win98应用任务单一的情况下,用户操作MBI卡的速度同于在DOS下的速度。WinDriver工作原理如图5所示。

图5 WinDriver工作原理图

3 结束语

本文以实时测试某航空软件可靠性为背景,介绍了仿真器在仿真测试平台中的作用。按照模块化和可扩充的设计思想,给出了仿真器功能结构组成;并且着重介绍了仿真器的任务调度管理模块的设计思想,针对具体任务和系统工作模式,提出了集成动态调度策略;对于优先+级的调度方式,采用了优先级浮动的原则。另外,给出了实时网络实现的方法,讨论了图形实时显示的可行性,利用WinDriver实现了在Win98下对硬件MBI卡的直接驱动。实验结果表明,上述调度思想与相关技术综合运用,很好地满足了仿真器系统工作的实时性。

* 本课题由国防科技“九五”重点预研项目支持

参考文献

[1]蔡开元.软件可靠性工程基础.北京:清华大学出版社,1995

[2]Dunham J R Real-time Software Failure Characterization.IEEE AES Magazine,1990.11

[3]Kaneko H,Stankovic J A. A Multimedia Server on the Spring Real-time Systems Umass Computer Science Technical Report 96-11,1996.1

[4]唐荣锡.计算机图形学教程.北京:科学出版社,1994


火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织