引言
软件测试是保证软件产品质量的一个重要手段[1],软件测试包括单元测试、集成测试、配置项测试和系统测试。一般来说,承研单位内部测试完毕后,特殊的软件需要经过有资质的第三方测评机构独立进行测试。
本文针对某型号弹上软件的特点,结合真实的第三方测评项目,提出了一种基于弹上嵌入式软件数学模型的测试方法。
1测试类型选取与步骤
1.1 测试类型的选取
弹上嵌入式软件和一般的软件一样,在测试过程中需要详细分析软件研制任务书和需求提出的功能需求和性能指标,一般选取的测试类型包括文档审查、静态分析、代码审查、功能测试、性能测试、接口测试、边界测试、安全性测试等,但是针对弹上嵌入式软件中特有的模型和算法公式,我们需要选取数据处理测试的测试类型。
1.2 测试步骤
文档审查:在第三方测试过程中,文档审查是必不可少的步骤,文档审查需要和研制方、总体方一起开展,在文档审查的过程中,测试人员可以更加深入的理解当前软件的功能和设计,可发现一些在前期工作中的缺陷,避免在后续的测试过程中发现文档的一些低级错误和大的设计缺陷。
静态分析:使用静态分析工具辅助进行控制流分析、数据流分析、接口特性分析和表达式分析,给出软件检查结果。静态分析的方法和过程如下:
代码审查:代码审查是指对被测软件代码进行逐行代码审查。审查组人员仔细阅读相关文档,对软件设计充分熟悉,然后对照代码审查单,逐行认真阅读代码进行人工审查。人工审查中,重点关注无法通过工具自动分析发现的各种问题,如算法实现的问题、编码与设计不符的问题等。对人工审查中发现的问题,审查人员应及时记录。
动态测试:依据测试大纲和测试用例对被测软件进行实物测试,此过程需要搭建被测软件的测试环境,对于被测软件而言,这不仅仅是一种黑盒的测试,我们在测试过程中需要关注代码的逻辑,需要实时的在代码中插桩输出我们想要的中间变量和信号。
3 测试方法设计
结合弹上嵌入式软件的特点,不难发现,此类软件最难验证是数学模型。目前,对弹上嵌入式软件中数学模型的测试主要是通过半实物仿真[2]进行验证。但是在半实物仿真中,数学模型的输入来自其他部件的输出,无法对数学模型的输入进行有效的控制。基于此,提出了一种新的测试方法。该方法通过对测试输入的有效控制,充分测试弹上嵌入式软件中数学模型的正确性,提高软件测试的可靠性。
测试方法如图1所示,测试流程包括四个部分:提取数学模型代码、MATLAB工具搭建数学模型、给出输入、结果对比。
图 1弹上嵌入式软件模型测试流程
3.1 提取数学模型代码
提取数学模型代码:在源代码中将有关于数学模型的代码划分出来,并插入驱动程序和桩程序,驱动程序用于调用该数学模型部分的代码,桩程序则是输出我们模型中需要输出的变量和信号,通过驱动程序和桩程序,被测模块代码可以单独的被执行。
在软件的数学模型测试中,需要研发发人员提供或者由测试人员找出相应的程序接口,根据接口定义设计驱动程序和桩程序,然后对数学模型代码进行调用,就能提取到可执行的数学模型代码。
3.2 用例输入充分性
为了满足测试充分性的要求,本文采用基于需求覆盖的方法设计测试用例。目前,基于需求的测试用例生成方法中,采用形式化的方法对需求进行建模分析并生成测试用例是比较主流的研究方法[3],但在实际操作过程中这种方法并不太适用于弹上软件的测试过程。形式化方法对模型的要求度很高,弹上软件的研制时间和测试时间是有限的,在短时间内难以完成繁琐的建模工作,即便使用自动化的工具,绝大部分的工作仍然需要人工完成,这样不但达不到提高测试效率的目的,反而还增加了人力支出。
本文采用路径覆盖的方法,对模型中的文字进行分析,提取其中有关联的关键词。之后再采用传统的测试用例设计方法进行测试用例设计,这样就能确保满足测试充分性的要求。
设模型中测试需求集为R,,其中Si表示具有完整意义的文字表达。从Si中提取关键词Wi:i=1,2,3……n,则
。找到与Wi相关联的关键词Wj,j=1,2,3……n。如果Wj存在具体解释,则用其指代的有明确意义的关键词替换原词。根据关联的前后关系,建立有向路径,得到有向图G=<W,E>,其中:W={Wi,Wj,…WK},i,j,k=1,2,3……n,E={(Wi,Wj),(Wi,Wk),(Wj,Wk)……},遍历每一条路径,可得到全部的测试需求。操作过程分为以下几种情况:
一、模型中测试需求是文字时:
(1)将需求中表示一个完整意义的一个或几个句子划分为一组;
(2)标识出句中的关键词;
(3)找出与每一个关键词相关联的部分,可能是向上关联,也可能是向下关联,标识出关联内容,并将关键词与之相连;
(4)如果关联的部分不是一个有明确意义的词语,则用其指代的部分替换原词,如果关联的部分是一个文件或一段文字,对关联的部分重复进行步骤(2)和(3),直到划分结果为词时停止;
(5)完成上述步骤后,便形成了一个有向图,每一条路径就是一个划分好的测试需求,逐条进行测试用例设计即可满足需求覆盖的要求;
(6)对每一条测试需求完成测试用例的设计。
二、模型中测试需求是公式时:
(1)识别出公式中的每一个变量,将每一个变量作为一个关键词;
(2)如果输入变量之间存在制约关系,则将其互相关联;如果不存在制约关系,只需将其与输出变量相关联;
(3)如果变量有典型值或边界值,则用其典型值或边界值替代输入变量,从而得到一个有向图;
(4)将每一个节点的变量值带回到原公式,得出需要的解。
某型号弹上软件中判断某模式有效前提条件为“若XX计算结束标志JS1、JS2、JS3从未有效过,则软件根据DSP1核0送来的 “组合设备控制字”Zkzhsb判断是否进入模式X”,当满足Zkzhsb有效且距离△R大于等于1500m时进入模式X。将结束标志标记为“W1”, “组合设备控制字”Zkzhsb标记为“W2”,距离标记为“W3”,提取关键词“W1”、“W2”、“W3”,如图3所示。
图 3关键词提取
“W1”包括:JS1有效、JS1无效、JS2有效、JS2无效、JS3有效、JS3无效; “W2”包括:Zkzhsb有效,Zkzhsb无效;“W3”包括:△R大于等于1500,△R小于1500。对“W1”、“W2”、“W3”拆分可得到有向图,如图4所示,根据图可知,需要48个用例才能满足需求。
图 4 测试用例有向图
3.3 MATLAB建模
建模工具搭建数学模型的意义在于提供测试用例的预期输出,用以判定测试结果是否正确[4]。考虑到时间和难度问题,在建模过程中可直接借鉴总体单位或者设计单位给出的数学建模。本次软件的模型测试,就直接采用了设计人员给出的建模来执行测试用例,从而给出标准解。
3.4 结果比对
通过提取出的数学模型代码执行测试用例,可以得到软件被测模块实际的运行结果;通过MATLAB搭建的数学模型执行相同的测试用例,可以得到标准解(预期结果)。对比实际运行结果和标准解,即可判断该测试用例是否通过,若二者一致,用例通过;若不一致,则用例未通过。图3和图4是某型号软件其中两种模式计算出的最佳起爆延时。从图中可以看出这两种模式计算出来的延时一致,延时的误差无线趋近于0,这两个延时的用例执行结果均为通过。
图 5 XX1模式下延时计算
4 结论
文中介绍了一种针对弹上嵌入书软件数学模型的测试方法,并通过验证,证明该方法具有一定的通用性,可适用于大部分带有数学模型验证和计时器功能的弹上软件。在本文的基础上,如何针对弹上软件数学模型进行有效的测试用例输入,以及MATLAB模型搭建正确性验证等问题值得进一步研究。而对于本次被测软件的测试而言,根据导弹实际飞行过程的特点,软件测试还需要各种条件下的原始数据,以寻找其中的变化规律和内在联系。
参考文献
[1] 张敏,赵平,张荣.黑盒测试技术在指控分系统软件测试中的应用。[J].强激光与粒子束,2013,25(B05):4.DOI:doi:CNKI:SUN:QJGY.0.2013-S1-021.
[2] 高江林,吴晓燕,李勇君,等.半实物仿真系统VV&A研究[J].航天控制,2011,29(1):67—71.
[3] 刘飞,蒲海峰,李柯达,等.一种弹载嵌人式软件数学模型测试方法的设计与实现[J].弹箭与制导学报,2016,36(3):DOI:10.15892/j.cnki.djzdxb.2016.03.008.
[4] 李祝莲,熊耀恒.高精度事件计时器的设计与实现[J].中国激光,2008,35(12):4.DIO:
10.3321/j.issn:0258-7025.2008.12.033.
[5] 王红园,郭永飞,姬琪 面向需求覆盖的航天软件测试用例优化方法[J].光学精密工程,2014,22(1):228-234