星载软件可靠性仿真测试环境研究*
2016-03-15郑重石柱
郑 重 石 柱
(中国航天系统科学与工程研究院 北京 100048)
星载软件可靠性仿真测试环境研究*
郑重石柱
(中国航天系统科学与工程研究院北京100048)
摘要软件可靠性测试是验证和评估软件可靠性水平的重要方法,要求软件运行环境的真实性,因此,测试环境的建立是进行可靠性测试的难点,也是决定测试结果正确性的关键因素。论文阐述了针对某星载嵌入式软件可靠性测试环境的设计,包括测试平台的构建,以及测试脚本的构造,该环境已成功应用于某星载嵌入式软件的可靠性测试,效果较好。
关键词星载软件; 软件可靠性测试; 测试环境
Simulation Test Platform of Spaceborne Software Reliability
ZHENG ZhongSHI Zhu
(China Academy of Areospace Systems Science and Engineering, Beijing100048)
AbstractSoftware reliability testing is an important mothod of qualifying and evaluating software reliability. The facticity of test platform is the most difficult thing during the reliability testing, and establishing test platform is also the key factor which determines the effect of software reliability testing. A set of design of an spaceborne software testing platform is described, which consists of testing flat established, and testing script constructed.And it has been applied in an spaceborne embedded software testing project successfully and effectively.
Key Wordsspaceborne software, software reliability testing, testing platform
Class NumberTP311.5
1引言
星载软件的可靠性仿真测试是保证星载软件安全可靠运行的重要手段,通过地面进行的全面、充分的分析和测试,尽可能把存在的错误暴露在地面测试阶段,才能保证产品最终在航天器这种特殊的环境中长期稳定的工作。通过可靠性测试能有效地暴露并纠正在实际使用过程中影响可靠性要求的软件缺陷,提高其可靠性水平,并验证其是否达到了规定的可靠性要求[1]。
星载软件的可靠性测试必须使软件在模拟空间复杂多变的环境下运行。以往的星载软件可靠性仿真测试环境,仅从模拟卫星对星载软件的功能实现角度设计,或针对特定故障进行设计,而本文针对某具体星载嵌入式软件设计仿真环境,通过构造运行剖面,模拟软件真实运行时的输入,通过构造各种环境模型模拟软件真实运行环境,可测试星载嵌入式软件真实的可靠性水平,同时可测试该软件的故障对策的优劣及其容错性能,大大提高可靠性仿真测试覆盖度,同时实时显示各关键参数和状态[2]。
本文的设计方法为其他航天器嵌入式软件可靠性仿真测试环境设计提供了重要的参考。
2软件可靠性测试过程
软件可靠性测试是指为了保证和验证软件的可靠性要求而对软件进行的测试,与一般软件测试不同,软件可靠性测试的主要目的不是发现所有的软件错误和缺陷,而是通过获取软件失效数据进行分析,评估软件当前的可靠性水平,预测未来可能达到的水平,从而验证软件可靠性的定量要求是否得到满足[3]。
根据以上特点,参考以往经验,此次软件可靠性测试工作过程主要包括构造运行剖面、产生测试用例、执行测试、结果分析和可靠性评估五个环节[4],其中:
1) 构造使用剖面:使用剖面是指软件各种使用情况及其发生概率的集合。在使用信息分析的基础上,按照被测软件的实际使用规律,构造软件的使用剖面。
2) 生成测试用例:基于上述构造的软件使用剖面,通过程序生成测试数据及自动测试驱动工程文件(含多个脚本文件),该工程文件相当于测试用例集,以驱动仿真器对该软件进行测试。
3) 执行测试:在上述工作准备就绪的情况下,执行可靠性测试,并通过可靠性测试平台中的监测功能收集测试数据及发生的失效数据,测试人员分析发生的失效事件,并将有效的失效记录下来。
4) 结果分析:根据监测设备和监测软件记录的故障数据,以及用户定义的失效,收集失效数据,包括失效的严重程度。
5) 可靠性评估:根据测试期间发生的失效次数和时间,利用可靠性模型,评估软件的可靠性指标是否达到预期的可靠性指标要求,得出拒绝或接受被测软件的结论[5]。
可靠性测试环境的构建原理图如图1所示。
整个可靠性仿真测试环境包括三个部分:激励器,目标系统和主控机。
1) 激励器:根据运行剖面解析产生测试数据,对数据进行仿真处理,产生并控制激励信号,驱动被测软件运行。
2) 目标系统:运行激励器产生的测试用例,生成测试过程数据,包括被测件的运行状态数据和软件处理数据,采集并传输数据到主控机。
3) 主控机:接受并处理目标系统的监测数据,记录、分析并显示监测数据,并监控测试过程。
3测试环境的基本结构
构建该试验平台的目的是为可靠性测试提供试验环境,从而验证可靠性设计改进后的软件是否能达到连续有效运行六个月的定量指标。为尽可能确保该软件在真实环境下进行可靠性测试,全面考核该软件的所有对外接口及运行剖面,在受试设备的整机环境中运行该软件,即应保持该软件与星上其他设备进行正常的数据与信号交换。
3.1测试环境框架
某星载嵌入式软件可靠性试验环境包括运行平台和监测平台两个部分,其中运行平台设备主要包括受试设备(包括监测数据采集模块);监测平台设备主要包括高动态仿真器、计算机、监测设备及监测软件等。可靠性测试试验平台能为该软件可靠性测试提供稳定的试验环境。
被测软件是一个对外部信号进行连续采集、实时处理的运行体。在每套设备中,为消除受试设备与监测设备间接口通讯失效,将采用硬件上独立的UART及FPGA两种方式传送监测数据。
试验平台构成如图2所示。
图2 可靠性测试平台设备连接示意图
3.2硬件设计
整个平台硬件的设计如下:
1) 高动态仿真器:通过高动态信号仿真器模拟接近真实运行状态的信号,并可通过改变电文原码、伪码类型、传播误差等因素考核该软件在各种信号输入条件下的故障发生率。通过构造软件的运行剖面从而生成高动态仿真器可执行的测试脚本,来激励受试设备的运行,由运行剖面生成测试脚本的方法。
2) 受试设备:受试设备在原有技术状态基础上,增加监测数据采集模块完成通道板软件动态运行特征量的采集、测量及存储功能。该功能通过FPGA与数据转发模块实现,并将采集数据高速传送至外部监测设备进行处理分析。
增加监测数据模块后,能够实现受试设备固有的重要过程变量监测、DSP的时序实时监测、重要脉冲监测、以及部分硬件数据的监测。
3) 监测设备:受试设备在测试过程中产生的实时运行数据将发送给监测设备。监测设备将分别接收监测数据采集模块的USB监测数据、星上接口仿真模块采集的总线数据(如CAN总线)以及经接口电平变换后的自检数据;并对数据进行实时显示、分析、存储和回放。
监测设备具有良好的通用性和可扩展性,可灵活配置各种数据源接收格式及处理格式,从而适应不同受试设备平台类型及测试类型,同时兼备在轨数据分析功能。
3.3软件设计
为实现对软件实时动态性能的监测,开发了监测软件,该软件具备功能如下:
1) 实现与CAN等星上总线数据交换功能;
2) 实时采集来自受试设备“监测数据采集模块”及自检口的软件动态运行特征量,包括:实时存储监测软件运行过程数据;实时存储监测受试设备相关信号的幅度或脉宽与周期;实时存储监测软件运行时序与架构性能,分析系统总体执行的时间和每个子程序最大、最小、累加执行时间与次数,跟踪当前运行点位;
3) 对上述软件动态运行特征量,以文字或图形化方式进行实时跟踪显示、性能统计与比对分析,并对异常值进行报警;
4) 按数据类别定时存储软件动态运行特征量;
5) 可根据菜单或配置文件灵活配置分析曲线的各维参数,并自定义边界值;
6) 可选择记录时间段对所有存储数据进行数据回放显示。
监测软件的组成如图3所示,由监测数据处理模块、星上接口处理模块、自检接口处理模块及数据后处理模块组成。
图3 监测软件组成图
监测软件四大模块将分别接收受试设备监测数据采集模块的USB监测数据、地面检测设备采集的总线数据(如CAN)及接口电平变换后的自检数据,并对数据进行实时显示、分析、比对、存储和回放。
该软件可靠性试验平台的组成充分考虑了冗余设计、多方位监测的原则,监测设备和监测软件共同构成了一套不同方位、相互独立的监测体系。
4测试脚本的构造
4.1运行剖面生成测试数据的方法
运行剖面生成测试数据的过程就是根据建立的运行剖面生成测试用例并且根据可靠性要求确定测试用例数量,并根据分配的概率抽取操作序列及参数的约束条件,来生成可靠性测试数据的过程[6-7]。其详细过程如下:
1) 根据运行剖面,获得所有的运行对应的概率;
2) 根据运行序列的概率按照一定的随机抽样的方法抽取运行序列;
3) 在抽取运行序列的时候,结合参数的约束信息,生成相应的测试数据;
4) 重复2)~3)的步骤,直到生成的测试数据的数目符合指定的数目[8];
应用于此次测试中,即根据各剖面中各事件在星载导航软件运行过程中发生的概率,按时间序列抽取各剖面中各事件作为测试用例并生成自动化测试脚本。
按时间序列抽取各剖面中各事件作为测试用例并生成自动化测试脚本的方法为对于连续变化的数据,根据其函数分布随机抽取测试数据,并按照固定的时间间隔均匀分布在时间轴上[9];对于离散型数据,把每个剖面事件发生的概率与实际区间[0,1]的一个子区间相联系,该子区间的大小等于事件发生的概率,然后对所需的每个测试数据生成区间[0,1]中的一个随机数,根据随机数落入的子区间来确定对应的测试数据,再将这些测试数据按照固定的时间间隔随机分布在时间轴上[10]。
4.2测试数据的生成
下面以电文剖面测试数据生成方法为例。
1) 电文剖面的构造
由于电文参数在实际运行中绝大多数情况下都较为稳定,但在某些情况下会出现异常,因此,电文剖面可根据电文参数正常和异常对电文进行划分。
(1)根据与开发方沟通,电文正常的概率为0.99,异常的概率为0.01,按照导航电文不健康类型、电文精度和其他极端情况,又可将电文的异常类型分为九类。
(2)每次发生电文异常的星数是随机的,即可能是一颗星,也可能是多颗星,对于单一导航星和所有导航星来说,电文的某一或全部的参数错误是随机和均等的。
电文参数异常可以根据以上导航星数和异常类型的不同组合和概率来构造剖面,最终共生成289个剖面。在测试用例设计中,电文正常范围值由高动态仿真器来保证,对于异常值需要构造测试用例。根据导航星电文异常发生的概率和运行时间计算,需从288个异常剖面中随机抽取20个电文异常操作,最后将20组异常数据随机分配到168天的时间轴上。由于该软件的一个轨道周期大约是2个小时,因此,设定每个异常持续2个小时,一台仿真器需要构造10个不同的用例,即从288个电文异常剖面中抽取10个用例。
2) 测试数据的生成
假设电文异常剖面中的事件包括3个(P1,P2,P3),根据分析,从这3个电文异常剖面中抽取10个事件,这3个电文异常剖面事件概率为P1=0.3,P2=0.2,P3=0.5,则P1与实际区间[0,0.3]相联系,P2与实际区间[0.3,0.5]相联系,P3与实际区间[0.5,1]相联系。
下一步,生成区间[0,1]中的一个随机数(该随机数生成可由计算机完成),生成区间[0,1]中的10个随机数,根据随机数落入的子区间来确定对应的测试用例。例如:若随机数为0.457,则抽取P2事件。最终抽取的测试数据集合如图1所示。
表1 测试数据集合
将这10组测试数据随机分布在时间轴(从0天00:00:00~55天23:59:00,时间间隔2小时)上的输入序列。
5结语
本文给出了一个星载实时性嵌入式软件可靠性测试环境的设计实例,该环境既满足系统真实性的要求,又能实时监测、显示运行时的重要参数,在一定程度上实现了自动化测试。该平台已经成功应用于开展某星载嵌入式软件的可靠性测试工作,发现了一般功能测试无法发现的缺陷和错误,并给出该软件的可靠性指标值,从而进一步验证了该测试平台的正确性和可用性。
参 考 文 献
[1] Michael R. Lyu. Hand Book of Software Reliability Engineering[M]. IEEE Computer Society Press. New York: McGraw-Hill,1996,4:168-189.
[2] Michael R. Lyu. Software Reliability Engineering: A Roadmap[C]//Future of software Engineering,2007,FPSE,07,HongKong:153-170.
[3] 阮镰,刘斌,陈雪松.软件可靠性测试及其测试环境[J].测控技术,2000,19(2):9-12.
RUAN Lian, LIU Bin, CHEN Xuesong. Software Reliability Test ang It’s Testing Enviroment[J]. Measurement and Control Technology,2000,19(2):9-12.
[4] 石柱,郑重.星载软件可靠性测试实践[J].计算机工程与设计,2013,34(2):721-724.
SHI Zhu, ZHENG Zhong. Spaceborne Software Reliability Testing Practice[J]. Computer Engineering & Design,2013,34(2):721-724.
[5] 郑重,石柱.星载软件可靠性工程研究与实践[J].计算机与数字工程,2013,41(8):1273-1276.
ZHENG Zhong, SHI Zhu. Study And Practice on Spaceborn Software Reliability Engineering[J]. Computer & Digital Engineering,2013,41(8):1273-1276.
[6] 王乾宇,朱小冬,王毅刚,等.基于TestQuest的嵌入式软件可靠性测试环境框架研究[J].中国测试,2012,38(1):106-109.
WANG Qianyu, ZHU Xiaodong, WANG Yigang, et al. Framework of reliability test environment for embedded software based on TestQuest[J]. China Measurement & Testing Technology,2012,38(1):106-109.
[7] 郭坚,付连芳,翟君武.一种星载软件系统测试环境的设计[J].计算机测量与控制,2005,13(5):499-502.
GUO Jian, FU Lianfang, ZHAI Junwu. [J]. Computer Measurement & Control,2005,13(5):499-502.
[8] 张旭,石柱,王崑声.基于使用剖面的软件可靠性测试用例生成方法[J].计算机仿真,2009,26(12):82-85.
ZHANG Xu, SHI Zhu, WANG Kunsheng. A test Case Generation Approach of Software Reliability Based on Usage Profile[J]. Computer Simulation,2009,26(12):82-85.
[9] Vincent Almering, Michiel van Genuchten, Ger Cloudt, et al. Using Software Reliability Growth Models in Practice[J]. IEEE Software,2007,24(6):82-88.
[10] Zeng Fuping, Lu Minyan. Application research of software reliability testing[C]//2012 IEEE International Conference on Computer Science and Automation Engineering, Zhangjiajie: IEEE Beijing Section,2012.
中图分类号TP311.5
DOI:10.3969/j.issn.1672-9722.2016.02.024
作者简介:郑重,男,硕士,工程师,研究方向:软件可靠性工程,软件安全性。石柱,男,博士,研究员,研究方向:软件工程,软件可靠性,软件安全性和软件过程改进。
基金项目:国防科技工业局民用航天科研预先研究项目(编号:B2120080307)资助。
*收稿日期:2015年8月12日,修回日期:2015年9月25日