陈子杭 肖 刚* 郭晓燕 姚志超 李洪宇
(1. 上海交通大学,上海 200240; 2. 上海飞机设计研究院,上海 201210)
根据SAE ARP 4754A所规定的民用飞机研制流程,民用飞机应在早期设计阶段进行飞机级需求的确认与验证工作[1]。在传统的工作中,这一过程主要基于需求文档完成。近年来,以场景作为工具,在场景中进行测试工作,完成需求的确认与验证的方法逐渐受到工业界的关注。而要实现基于场景的测试,首先要解决的问题是测试用例的生成[2],在以往的工作中测试用例由测试人员手动编写完成,存在着效率低和容易遗漏的缺点,基于场景模型自动生成测试用例逐渐成为研究的热点。本研究采用SysML活动图构建民用飞机运行场景模型,提出了基于场景模型的测试用例生成和排序方法,为后续实施基于场景的自动化测试提供了理论基础。
基于场景的测试最早应用于软件工程领域,通过软件的具体应用场景来生成测试用例,以期找出软件中的错误[3]。近年来,逐步应用于自动驾驶等领域,通过建立测试场景数据库来进行驾驶安全性测试工作[4-5]。在民机领域,主要利用场景分析来进行需求的捕获工作[6-7],但由于民机本身作为一个复杂产品,加上其所处的环境具有多重影响因素,基于场景进行相应的工作还处在初步阶段[8-10],有很大的进步空间。
民机运行场景是指飞机在交付后投入载客运行阶段所处的环境。在建立场景模型的过程中首先需要明确构建场景的目的,即构建场景的用途。其次明确场景中的主要参与方,根据飞机所处不同的飞行阶段,由飞机、航空公司和空中管制单位交替参与,最后需要确定各参与方自身在场景中所需完成的任务和参与方之间的交互过程。
根据前文所述,场景模型应具备描述各参与方本身的任务流程和各参与方之间交互过程的功能,可采用SysML活动图建立运行场景模型,构成场景模型的基本元素如表1所示。
表1 场景模型基本元素表
本研究以飞机在进近过程中触发TAWS模式1下降率过大告警这一场景为例,建立模型。根据2.1小节所述的建模步骤,首先应明确的是建立场景的目的,即验证飞机在遭遇下降率过大这一情况时能否脱离告警包线爬升至安全高度,进而确定本场景的参与方为飞机和进近管制,最后确定各参与方相应的任务流程。下降率过大告警的示意图如图1所示。告警包线方程如图2所示。当飞机进入外层告警包线时,系统将发出“SINKRATE”语音警告,直至飞机脱离告警包线。若飞机继续进入内层告警曲线时,则将发出“PULL UP”语音告警。值得说明的是,本研究不考虑陡峭进近等特殊情况。
图1 TAWS模式1告警示意图[11-13]
图2 TAWS模式1告警包线[11-13]
图2中外层告警包线斜线部分方程如公式(1)所示:
RA=-572+0.603 5*DR
(1)
式中,RA为无线电高度,单位为ft,DR为下降率,单位为ft/min。
内层告警包线方程底部斜线如公式(2)所示:
RA=-1 620+1.113 3*AR
(2)
上部斜线公式如公式(3)所示:
RA=-400+0.4*DR
(3)
式中,变量名称与单位与公式(1)一致。
根据以上信息,可以建立如图3所示的场景模型。
图3 场景模型实例
测试用例生成方法如图4所示,场景的测试用例由测试路径和测试数据组合而成。对于测试路径,从建立的模型中提取结构信息,搜索初始点到终点的路径即可得到测试路径。对于测试数据,则需要分析模型各节点的内容信息,确定关键参数的取值范围,进而获得测试数据。最后将测试路径和测试数据结合可以得到测试用例,进而可以得到用于该场景的测试用例集。
图4 测试用例生成方法
在以往利用活动图生成测试路径的过程中,首先将活动图转化为有向图,在有向图中搜索测试路径,然而由于循环结构和并发结构测试路径的多样性,这种方法所产生的测试路径充分性难以得到保障。因此本文提出如图5所示的测试路径生成方法,首先将建立的场景活动图模型保存为XML文件,从XML文件中提取出原活动图的节点和边的信息,将活动图转换为有向图,然后识别出有向图中的循环与并发结构,并用复合节点替代,生成简化后的有向图。利用深度优先搜索算法,在简化后的有向图中搜索从初始节点到流终点和初始节点到结束节点间的所有路径,即可得到初始测试路径。在得到初始测试路径后,处理其中的复合节点,即可得到最终测试路径。
3.1.1 初级测试路径生成方法
根据前面所述的方法,将2.3小节所建立的场景活动图模型转化为图6所示的有向图模型。
图6中各节点编号所对应的原活动图内容如表2所示。替换规则是用活动图节点的简称加数字序号代替原活动图节点。
图5 测试路径生成方法
图6 有向图模型
表2 节点内容替换说明
进而识别图6中的循环和并发结构,采用复合节点L1代替循环结构,用复合节点C1代替并发结构,可以得到图7所示简化后的有向图。
图7 简化后的有向图
3.1.2 最终测试路径生成方法
在生成初始的测试路径后,还需处理复合节点所替代的循环与并发结构以生成最终的测试路径。
1)循环结构测试路径生成方法
如图8所示是一个典型的循环结构,根据不同的输入情况,可能多次触发判断条件,执行循环活动,通过设置循环次数得到测试路径。本研究设置循环次数为1次。可以得到两条测试路径:
(1)A1→A2→A3→DN1→A4
(2)A1→A2→A3→DN1→A2→A3→DN1→A4
图8 循环结构
2)并发结构测试路径生成方法
图9所示的是一个典型的并发结构,并发结构由分叉节点开始,当控制流进入分叉节点后会分成具有并发关系的多个线程,当执行完各自线程上的活动后,这些线程汇聚到汇合节点,在汇合节点同步后,控制流才能继续向下执行。
图9 并发结构
并发结构的测试路径基于排列的方式生成,首先对并发结构内的所有活动做一次排列可以得到4!=24种组合,添加A2>A3>A4这一限制条件后可以得到如下四条测试路径:
(1)FN1→A1→A2→A3→A4→JN1
(2)FN1→A2→A1→A3→A4→JN1
(3)FN1→A2→A3→A1→A4→JN1
(4)FN1→A2→A4→A4→A1→JN1
利用3.1.1及3.1.2节所述测试路径生成方法处理建立的场景模型,可以得到14条测试路径,表3中展示部分测试路径。
表3 部分测试路径
测试用例中的测试数据是从活动图的节点中获取的,要生成测试数据,需要分析活动图的节点的内容,找到能生成测试数据的信息。以本研究所建立的场景模型为例,关键参数是飞机的无线电高度(RA)和下降率(DR),有三个节点A1、A3和A8需要测试数据。
首先需要确定飞机初始的下降率和无线电高度,本研究设置飞机的初始下降率为2 000 ft/min,初始无限电高度为2 500 ft,即为A1节点的测试数据。
图10 测试用例
参考模式1外层告警包线的判断条件确定 RA的取值范围为10 ft~2 450 ft,DR的取值下界为964 ft/min,取值上界无限制。若想触发外层告警,DR与RA的取值还应满足外层告警包线方程,可将A3节点测试数据取为(DR=3 500,RA=1 400)。
参考模式1内层告警包线的判断条件确定RA的取值范围为10 ft~2 450 ft,DR的取值下界为1 482 ft/min,取值上界无限制。若想触发内层告警,DR与RA的取值还应满足内层告警包线方程,可将A8节点测试数据取为(DR=4 500,RA=1 000)。
将生成的测试数据插入到最终测试路径中即可获得如图10所示的5条测试用例。
为了提高后续测试工作的效率,引入测试用例重要度这一参数,将生成的测试用例进行排序,优先执行重要度高的测试用例。测试用例重要度计算如式(4)所示:
(4)
(5)
式中,n为该条路径上活动节点的数量,Wi为活动节点的权值。
测试路径上活动节点权值的分配原则如下:活动节点位于单一泳道内,且不与其他泳道交互的权值定为1;活动节点与其他泳道有交互的权值定为2。
测试预期结果也即测试用例的期望输出,表现为场景中飞机的最终状态。测试预期结果权重可以按如下规则分配:
若测试预期结果表明飞行安全未受到影响,飞机可以继续完成飞行任务,则其权值定为1;若测试预期结果表明飞行安全受到中等程度影响,但飞机经过调整后可以继续完成飞行任务的,权值定为2;若测试预期结果表明飞行安全受到较严重影响,可能造成飞机损毁、人员伤亡,例如迫降等情况,权值定为3;若测试预期结果表明飞行安全受到非常严重影响,造成飞机严重损毁、人员伤亡,例如飞机坠毁,权值定为4。
按照上述方法计算图10所给测试用例的重要度,其排序结果如表4所示。
表4 测试用例重要度
本文构建民用飞机典型运行场景,基于场景模型生成测试用例,引入测试用例重要度这一概念,对生成的测试用例进行排序,解决了进行基于场景测试的初步问题。下一步研究将细化场景模型的颗粒度,同时构建场景的仿真模型,关注测试用例的自动执行,打通基于场景的自动化测试途径,实现基于场景的需求确认和验证。