王 洋 薛 静 刘春龙 武咏晗
北京航天自动控制研究所,北京100854
随着航天产品在信息化、体系化、自主化和智能化等方面的飞速发展,软件在整个系统中的重要性日益提高,软件的规模越来越大、关键程度越来越高,软件的质量与可靠性已经成为影响航天产品质量与可靠性的重要因素。软件测试是目前普遍采用的提高软件质量的重要手段,是软件质量保证工作中的重要环节之一[1]。
根据QJA30A的要求,需要针对航天型号软件进行软件配置项测试和系统测试[2]。在配置项测试时通常采用全数字仿真测试平台作为测试工具,该工具的优点是透明性好,可控性强,易于注入测试数据,对小概率、安全关键功能的测试可以提供有效的手段支持。另外,被测软件代码不需要插桩,在不做任何改动的情况下,就可以完成对被测软件的非侵入式测试[3]。这种方法能够较好地验证被测软件内部的功能和性能特性,在软件系统复杂度较低的前提下,通过配置项测试可以得到较好的验证效果,但是配置项测试是一种较为孤立的测试,难以发现软件系统中配置项之间的接口和时序匹配方面可能存在的缺陷。
随着航天系统复杂度提高,系统状态空间与软件运行剖面的数量膨胀,由于很多问题都是各子系统之间时序与运行状态不匹配造成,因此系统级软件测试越来越重要。而现阶段的系统级软件测试仍然摆脱不了对硬件设备的依赖,故障仿真的难度大,很多情况下由于受限于安全性和成本,系统测试的覆盖性难以达到预期。因此急需开展系统级虚拟测试环境的研究工作。
本文研究了系统级测试环境构建方法,基于操作系统提供的进程间通讯技术,突破了多虚拟测试环境数据交换与时间同步的技术难点,为系统级测试环境构建提供了一个高效、可行的解决方案。
虚拟测试环境以真实箭载目标代码为对象,利用软件仿真技术逼真地模拟物理硬件目标系统,使运行于真实目标系统上的嵌入式软件,可以不加修改直接在全数字仿真测试平台上运行,并且其运行的动态特性与在真实目标机上一致,能够让硬件和软件开发人员同时进行系统定义、软件开发、集成和部署。单处理器的虚拟测试环境分层结构如图1所示。
图1 虚拟测试环境分层结构图
由图1可知虚拟测试环境是基于虚拟内核的分层结构,而系统级测试环境需要使多个虚拟测试环境形成一个闭环互联的有机整体,在构建过程中需要解决2个关键问题:
1)数据交换:在运行过程中,一个虚拟环境通过接口的输出将作为另一个虚拟环境的接口输入,为了保证系统级虚拟环境运行的正确性,必须实现嵌入式系统之间的数据流仿真;
2)同步运行:在Windows操作系统中,每个虚拟测试环境作为一个单独的进程运行。由于Windows不是实时操作系统,因此每个进程获得的运行时间片并不相同,导致每个虚拟环境中运行的嵌入式软件的虚拟时间有偏差。为了保证系统时序的一致性,必须实现多个虚拟测试环境的同步机制。
虚拟测试环境是操作系统中的一个进程,为了实现多个虚拟测试环境协同运行,考虑采用操作系统提供的进程间通讯机制,设计相应的数据传输与同步运行流程。在选择进程间通讯机制时,需要从运行效率、可靠性2方面进行考察,既要保证虚拟环境之间的同步协作不会对运行时间造成过多负载,也要确保虚拟环境彼此发送的数据能够完整可靠地发送到目的地址。
IPC是进程间通讯(interprocess communication)的简称。传统上该术语描述的是运行在某个操作系统之上不同进程间消息传递的不同方式。最早的IPC机制由UNIX提出,主要有以下几种方式[4]:
1)进程共享留存于文件系统中某个文件上的某些信息。为访问这些信息,每个进程都需要通过系统调用穿越内核。当一个文件有待更新,某种形式的同步是必要的,这样既可以保护多个写入者,防止彼此相互串扰,也可以保护一个或多个读出者,防止写入者的干扰。
2)进程有一个双方都能访问的共享内存区。每个进程一旦设置好该共享内存区,可以根本不涉及内核就访问其中的数据。Windows中的管道就是这种方式。
3)进程之间的数据传输通过网络接口,进程可以在同一台主机也可以在网络互连的不同主机。进程的交互可以是基于流模式(TCP)——流模式中的数据需要确定的格式,以保证区分不同消息的边界;也可以是消息模式(UDP、SCTP)[5]。
通过本地文件系统进行IPC的方式在每次进程同步过程中都要访问磁盘,对运行效率有很大影响,因此本文在基于网络和基于共享内存2种IPC方式之间进行选择。
DDS是对象管理组织(OMG)制定的实现订阅/发布通讯模式、满足实时性要求的软件设计标准和规范,该规范对分布式实时系统中的数据发布、传递和接收的接口和行为进行了标准化。DDS纯粹以数据为中心分发数据,用QoS参数描述资源状况、对资源的期待程度及网络状况等,大大增强了通讯的实时性和灵活性,简化了分布式系统中数据的有效发布,为实时环境下以数据为中心的分布式应用提供高效、有用的通讯服务,其特点如下[6]:
1)具有开放式体系结构,提供规范的接口、服务和数据格式,使业务应用系统软件可以轻松正确地实现移植、互操作和交互的功能;
2)具备共享数据能力,无需考虑数据生产者和使用者实际的物理地址和在组织架构中的位置;
3)支持以数据为中心的、高效的订阅/发布模式。
DDS规范描述了2个层次的接口:以数据为中心的发布/订阅层(DCPS)和数据本地重构层(DL-RL),其结构如图2所示。
图2 DDS结构图
DCPS层是DDS的基础层,为应用软件提供了数据发布和订阅的功能,使发布者能够识别数据对象并发布数据;DLRL层是建立在DCPS层之上的一个可选层,能够将服务简单地集成到应用层,在数据更新后自动重组数据,并通知订阅者及时更新。该模型中数据收发双方均无需了解对方物理驻留位置、驻留形式,实现了通信双方时间、空间和数据通信的多维松散耦合[7]。
管道(PIPE)是一个以共享内存为基础的进程间通讯技术。创建管道的进程作为管道服务器(pipe server),连接该管道的进程作为管道客户端(pipe client)。管道一端的进程向该管道中写入数据,管道另一端的进程就能够读取到该数据。
Windows系统中的管道分为匿名管道与命名管道:
1)匿名管道:创建匿名管道不需要名称作为参数,匿名管道是半双工管道,管道服务器和管道客户端各操作2个句柄,原理如图3,进程1和进程2使用各自的2个句柄HD[0]和HD[1]操作管道。
图3 匿名管道
2)命名管道:命名管道是一个全双工管道,管道双方可通过一个句柄完成数据收发操作,由操作系统维护独立的接收缓冲与发送缓冲,Windows中的命名管道客户程序本质上通过文件接口使用命名管道[8]。同时,命名管道提供了一对多的功能,可以使管道服务器并行地与多个管道客户端交互,原理如图4。
图4 命名管道
为了尽量提高虚拟测试环境的运行效率,要保证多个测试环境之间数据传输的高效率,因此需要对2种常用的进程间通讯技术的数据传输吞吐量与代码执行效率进行对比。本文通过实现2个示例进程,进程间传递的数据选取2种数据块粒度,分别为1K字节和4K字节;传输次数为10000、50000、100000次;分为持久化和非持久化2个执行场景,编写用例进行考核。具体比对条件及硬件平台规格见表1:
表1 传输速率及执行效率比对条件
通过在相同执行平台执行上述比对条件,得到的DDS与PIPE执行时间(单位:s),具体结果见表2和3。
表2 数据非持久化场景下传输速度与执行时间
表3 数据持久化场景下传输速度与执行时间
由表2和3的结果可知,PIPE在非持久化场景下的传输速率远高于DDS,说明共享内存方式与基于套接字的网络传输在执行效率上有很大差别。在持久化场景下,2种方式的运行时间差别不明显,说明硬盘的读写速度是代码执行效率的瓶颈,弱化了2种进程间通讯机制的效率差别,目前系统级虚拟环境对于持久化的需求并不大。从可靠性角度观察,2种方式在数据可靠性方面均可以保证不丢数。
综合数据传输效率和可靠性2方面的数据结果,本文选择采用PIPE作为构建系统级测试环境的基础。
虚拟环境之间的数据发送与接收是异步操作,彼此没有约束条件。为了正确模拟该行为,需要采用多个线程实现,其中虚拟环境1作为管道服务器(PIPE Server)完成管道建立和外设仿真,管道服务器的主线程创建管道,并等待管道客户端连接。虚拟环境2作为管道客户端(PIPE Client)阻塞接收数据。每个虚拟环境根据自身对外的硬件接口数量,建立对应的管道数目,并维护管道的数据收发逻辑(图5)。
图5 数据交换顺序图
嵌入式系统需要按照设计的时序运行,为了保证系统中每个节点的状态转换操作一致,系统测试环境中的每一个节点也需要统一节拍进行计时。通过引入一个同步管理主节点(Syn master),专门去同步不同节点(Syn slave)的运行周期。具体实现方法如图6。
1)当所有子节点已经处于就绪状态后,同步管理主节点发送同步信号,所有子节点均反馈同步好信号后,平台初始化工作结束;
2)平台中任意一个节点先启动运行,运行1ms后,把自己的输出心跳输出给同步节点,然后该节点停止运行,等待同步节点下一次心跳数据。其他节点类似,当同步节点收到通道中所有节点的心跳数据后,平台该周期运行完成;
3)平台中所有节点运行完一个周期(1ms)后,同步管理主节点输出心跳数据,通知平台中所有节点继续下一周期的运行。如此循环直至整个嵌入式软件运行结束。
图6 时间同步顺序图
在某型号飞行控制软件的测试过程中利用了本文所实现的高速系统级虚拟测试环境。该型号的飞行控制软件采用多核处理器,不同于以往单核处理器架构,运行在多个处理器核心的飞行软件构成一个嵌入式系统,该系统中多处理器核随着软件运行,彼此间存在数据交互和同步。图7为该型号在平台上运行与理论仿真导航速度的相对误差和绝对误差曲线,图8为导航位置的相对误差和绝对误差曲线。由曲线可知,平台计算结果与理论仿真数据误差在允许范围之内。
图7(a) 三方向导航速度相对误差曲线
图7(b) 三方向导航速度绝对误差曲线
图8(a) 三方向导航位置相对误差曲线
图8(b) 三方向导航位置绝对误差曲线
表4为该型号在平台上运行时2个节点时间同步情况表。表中虚拟仿真时间始终保持在0.1ms内,能够保证在同步周期内运行。而真实运行时间由于各节点的机器性能有较大差距。
表4 时间同步结果
该高速系统级虚拟环境实现技术已在型号中得到验证。随着系统级测试方法论的发展,该技术将逐步应用到其它型号软件的系统级测试中。