赵 文 文
(中铁第一勘察设计院集团有限公司,陕西 西安 710043)
高速磁悬浮中央控制子系统具有操作与显示、列车自动运行、诊断等功能,是列车安全运行的重要保证。系统测试可提早发现系统设计的缺陷并进行有效修复,提高系统现场联调的效率。因而,测试质量直接决定了中央控制子系统的研发成果和效率,在投入使用前必须进行系统的测试验证。
而作为测试工作的核心,测试用例的好坏直接影响到测试的效率,Tsai[1]提出了一种适用于数据处理系统的测试用例生成方法,其主要是通过从规格说明中生成测试数据。Hall[2]也对测试用例生成方法进行研究,提出基于Z规格说明进行测试用例的生成。随着面向对象技术的不断发展,基于UML模型生成测试用例的方法受到了人们越来越多的关注,主要讨论如何选取UML的动态模型如状态图、顺序图、活动图、协作图来生成符合覆盖准则要求的测试用例。A.J.Offutt等[3]提出了一种基于UML状态图的测试用例生成方法及四种测试覆盖准则,并开发首个可基于UML自动生成测试用例的工具。季丽丽[4]针对A.J.Offutt提出的UML状态图上仅限于布尔类型的转移条件的局限,进行了表达式方面的扩展。Falk F[5]讨论了一种基于UML顺序图进行测试的方法,并介绍了SeDiTeC工具。王林章等[6]基于UML协作图提出了集成测试用例的生成方法,并依据所设计的模型来生成测试用例。Chris Rudram[7]对UML活动图的语义及语法进行了扩展,并提出了形式化的活动图。张楣等[8]设计出一种三级转换过程,即由UML活动图模型转换到测试大纲模型,进而再到测试用例模型。但目前大多研究都是根据单一的某种模型图,较少分析多种模型图的组合建模。
高速磁浮运行控制系统是其运行安全的关键保障,而对系统进行测试则是系统安全的必要保证。本文基于对被测中央控制子系统功能特征的提取,提出基于UML模型的测试用例生成方法,并将生成的测试用例实例在实验室测试平台中全部执行,来实现对中央控制子系统的测试验证。
验证系统是否满足功能需求的所有要求,解决办法就是对该系统进行功能测试。但是若考虑将系统中的每一个需求都使用测试用例来表达,则会得到数量庞大且有所重复的测试用例,不仅成本巨大,且会降低测试效率。为此,从系统功能需求中提炼精简后的功能特征是十分必要的。
功能特征即是根据系统功能需求提取的功能实体,是由一组需求归结而来,针对一个功能特征又可设计多个测试用例。为了确保功能特征的全面性和合法性,功能特征集必须反映所有的功能需求,每一个独立的功能特征都来自于系统需求。系统需求、功能特征及测试用例三者之间的关系如图1所示。
首先,分析系统需求中所有要求的功能和属性,按照特征将其分组,形成一个或多个需求相对应的组合,即需求功能组;其次,对这些需求进行分析、概括、提取,便可得到相应的功能特征。中央控制子系统的功能测试验证实质上是为了验证系统是否满足系统需求规范中的所有功能要求。中央控制子系统的功能特征提取过程如下:
中央控制子系统需求规范→需求功能组→划分功能实体→细化功能特征→功能特征列表。
基于提出的系统功能特征提取流程,针对中央控制子系统的功能需求,分别对其操作员终端系统、列车自动运行系统和中央诊断系统进行了功能特征的提取,结果如表1所示。
场景技术在测试设计阶段可以作为系统建模的依据,其可以描述客户需求和系统功能,有利于测试用例的设计。中央运控系统的每个子系统都具有各自的功能需求,根据系统功能特征,中央运控系统的运行过程可划分为若干个相对独立的场景,每个场景都包含着众多的操作与信息交互。主要场景包括:系统权限管理,操作员终端系统生成命令操作,操作员终端系统CR命令操作,操作员终端系统视图显示,系统协同交互,列车时刻表操作,运行计划处理,ATO状态改变,DCS命令运行监控,列车管理,诊断信息操作,列车运行流程等。
表1 功能特征提取结果
对中央控制子系统的运行场景进行建模,不仅可以详细地描述系统运行过程中的内部状态变化,而且可以反映系统与外界的信息交互情况,该建模过程是指导测试用例生成的重要依据。本文以中央控制子系统各功能场景为单位进行建模分析,采用UML分别建立用例图、顺序图、状态图和活动图,全方面表述中央控制子系统的动作时序逻辑。由于篇幅限制,下面就以单分区列车运行流程这一典型场景为例,给出详细的建模过程,其他场景建模过程与之类似。
1)列车运行流程用例图(见图2)。
由图2可知,单分区列车运行流程用例图中包含3个参与者,分别为操作员,DCS和VCS。三者之间通过用例来交互信息,完成系统此场景的功能需求。
2)列车运行流程状态图见图3。
列车运行流程状态图描述了OTS从初始状态至车辆完成运行停止这段时间中系统状态间的转换情况,如图3所示。图3中从OTS初始状态开始,经历登录车辆,预定进路,设置车辆运行,设置停车指令等一系列过程,一步步描述了单分区列车运行流程中OTS的状态及引起状态转移的触发事件。
3)列车运行流程活动图见图4。
列车运行流程活动图描述了系统从一个活动至另一个活动的流程,主要是强调对象之间的控制关系,如图4所示。图4中描述了列车运行流程中从一个活动到另一个活动的控制流,利用活动图模型可以明确OTS,DCS和VCS之间工作的信息流交互,着重表现的是系统行为。
4)列车运行流程顺序图见图5。
顺序图用来描述一个用例的行为,其呈现的是一组对象和通过这组对象接收到的消息,强调对象之间消息发送的顺序,顺序图仅仅表示了用例的一个具体场景,图5给出了列车运行流程各命令执行都正常情况下的顺序图。图5详细展现了整个列车运行流程中,OTS,DCS和VCS是依照时间顺序并且通过彼此交互来完成信息传递的过程。
根据建模图生成测试用例的过程如图6所示。具体用例生成步骤如下:
1)根据运行子场景选取相应的场景建模图;
2)依据用例图,确定该场景相关的外部具体设备;
3)依据状态图,计算该场景中最大程度覆盖所有状态所必需的测试用例数量;
4)依据活动图,明确每一个测试用例的测试步骤;
5)依据顺序图,确定每一步测试步骤所涉及的各设备间的信息交互情况;
6)根据设计的测试用例标准格式编写成具体的测试用例文档。
中央控制子系统的整个测试用例集的数量非常多,下面就同样以“单分区列车运行流程”场景为例,详细解释使用建模图来生成测试用例的过程。首先由列车运行流程的用例图可知,该场景在整个过程中所涉及到的外部参与者主要有操作员、DCS和VCS,即主要由他们来完成测试用例所需要的操作以及观测测试结果的。然后根据列车运行流程状态图,可以详细地看到OTS在此场景中的状态变化,由图3可知,要最大程度的覆盖其所有状态,需要5个测试用例。最后根据活动图和顺序图可以分别得到测试用例的具体操作步骤以及对应的交互信息。以列车运行流程各命令执行都正常的情况为例,其用例设计结果如表2所示。
表2 列车运行流程测试用例
基于提出的方法,本文最终对操作员终端系统设计测试用例85个,对列车自动运行系统设计测试用例68个,对中央诊断系统设计测试用例31个,且设计的测试用例全部通过测试平台得到执行,基本完全覆盖了中央控制子系统运行过程中的主要场景,对在测试中发现的错误或缺陷通过查找原因、修改代码等途径都得到解决,最终达到测试用例通过率100%。
本文提出了基于UML的测试用例生成方法,并在测试平台中执行生成的测试用例来实现对中央控制子系统的测试验证,测试结果表明,本文设计生成的测试用例,可充分地模拟运行现场可能出现的各种情况,达到提早发现系统设计错误或缺陷并进行有效修复的作用,这样在现场联调时就可以显著提高现场测试效率,有效减少测试时间和测试质量成本,并可为今后高速磁浮中央控制子系统的测试提供一定的理论依据和方法借鉴。