李晓洁
(西南交通大学 交通信息工程及控制,成都 610031)
列车自动防护系统是列车控制系统的重要组成部分,对列车安全负有直接责任,因此对其进行全面的功能测试,确保其正确完成系统需求规范所要求的功能,对高速铁路建设具有十分重要的意义。本文主要研究如何将UML自动测试技术引入到列车自动防护系统的测试中。
列车自动防护(ATP,Automatic Train Protection)系统作为列车自动运行控制系统的重要组成部分,其主要任务在于保证行车安全、防止列车进入前方列车占用的区段以及防止列车超速运行。ATP系统属于安全苛求系统,对列车安全负有直接责任,因此,对ATP设备进行系统功能测试等评估测试工作具有重要意义。
ATP系统属于大规模集成系统,若采用传统测试方法对其进行安全评估测试,不但无法保证测试的科学性与严密性,还会因为测试工作的重复性耗费大量的时间、成本、人力和物力资源。因此,将自动测试技术引入ATP系统的测试很有必要。基于UML的自动测试技术是近年来自动测试技术发展的主流趋势,本文以ATP系统的动态速度监控功能为例,采用此方法对ATP系统测试进行分析。ATP系统的动态速度监控用例图如图1所示。
图1 ATP系统的动态速度监控用例图
在软件测试过程中,测试用例和数据设计是非常困难和繁重的工作。测试用例的生成方法主要有2种:基于代码的测试用例生成和基于规格说明的测试用例生成。
基于代码的测试用例生成并不适用于大规模的集成测试和系统测试,ATP车载系统属于大规模集成系统,在开发用于ATP系统的测试用例时,本文选择基于规格说明的测试用例生成方法。
基于UML的软件测试的优点在于比其它的形式化方法具有更广泛的适用性。通过将系统需求规范转换成标准的UML模型,并将其作为测试需求的直接来源,驱动整个测试过程。基于UML的软件测试过程如图2所示。
图2 基于UML的软件测试过程
要使UML支持软件测试,首先需要研究UML模型的可测试性,针对不同类型不同阶段的测试,给出严格的可测试的UML模型[1]。可测性问题实际上就是研究一个UML模型是否包含足够的信息来产生测试用例的问题。
一个可测试的模型需要满足的条件有:
(1)模型是对被测系统完整且准确的描述,而且还描述了所需测试的所有功能特性;
(2)模型是对系统细节的抽象描述;
(3)模型保留了被测系统中有利于发现错误和验证系统一致性的关键细节;
(4)对状态模型而言,模型应该描述了所有的动作、状态和事件,并且对所有状态进行了明确的定义。
UML作为一种半形式化的建模语言,具有高度的灵活性,因此在建模的过程中,只要遵循了UML的语法和语义,并且遵循一定的建模方法,得到的UML模型是可以达到可测试性标准的。
建立了良好可测的UML模型后,就需要进一步研究如何从UML模型生成测试用例,自动测试技术要求测试用例具有良好的通用性和可移植性,使用XML规范来对测试用例进行描述满足上述要求,因此本文采用基于XML的测试用例描述方法。
可扩展标记语言(XML)是一种通用语言规范,它以一种开放的自我描述方式定义数据结构,在描述数据内容的同时能突出对结构的描述,从而体现出数据之间的关系[2]。
测试用例是测试系统与被测系统的交互信息集合,包括输入序列、期望的系统执行操作序列和期望的输出序列。其本质就是一种数据对象,因此使用XML描述这种数据对象有着相当的优势。
本文采用一种从UML到XML Schema的3层设计方法来实现从需求分析的UML模型到XML测试脚本的转化方法。这种3层设计方法是基于UML类图实现的[3],其设计思路如图3所示。
图3 从UML生成XML测试脚本的3层设计方法
该过程可以描述为3个步骤:(1)根据系统需求规范,创建所需测试系统的UML图。在创建过程中,要遵守可测试建模规则;(2)根据一系列的转换规则,将概念层的UML图转换为使用XML Schema说明的逻辑层UML类图;(3)根据逻辑层UML类图,导出XML Schema文档[4]。
概念层模型无法直接转换为XML Schema,这是由于概念层模型中的数据类型以及类之间的关系等与XML Schema之间没有必然关联,而且概念层模型中没有对类的结构从属和嵌套关系的定义,所以需要根据XML Schema定义的构造型来构建逻辑层的UML类图[5]。
(1)对UML中定义的符号进行扩展,即用UML类图表示XML Schema中的概念。UML提供了特有的扩展机制,包括构造型、约束和标签值。在构造逻辑层类图模型时,只用到构造型扩展机制,这是由于基于一个已经存在的模型元素来定义一种新的模型元素时,构造型的信息内容和形式与已经存在的基本模型元素相同,只是其含义和使用不同。这样就能使XML Schema中的元素类型嵌入到逻辑层模型中。
(2)需要通过这些扩展过的构造型对属性的数据类型进行转化。在逻辑层模型中,有3种适用于描述各种数据类型的构造数据类型:XSDSimpleType、SimpleType和ComplexType,这3种类型分别对应于XML模式中的内置简单类型、简单类型和复杂类型。其转化规则如下:
a.属性中的数据类型若是内置简单数据类型,则将其直接转化为XSDSimpleType构造型,仅在数据类型前加上xsd,表示该数据类型是逻辑层的内置数据类型。例如,string可以直接映射为xsd:string。
b.属性中的数据类型若是仅在内置简单数据类型上进行了一定限制,如枚举类型、列表类型和对数据的上限下限进行限定等,则将该数据类型转换为SimpleType构造型。在其中将限制内容设定为属性和值,并被一个XSDSimpleType约束。
c.属性中的数据类型如果是具体类,则将其转换为ComplexType构造型。
(3)要确定类的关系走向。将类表示成结构化的关系,即通过类之间的关系确定类的嵌套关系。
根据以上规则,以列车自动防护系统中动态曲线生成功能为例,可以构造其逻辑层UML类图,如图4所示。
图4 动态曲线计算的逻辑层UML类图
物理层测试案例是从逻辑层的模型映射得到的XML Schema,由于在构建转换逻辑层模型是已经用到了根据XML Schema定义的构造型,所以映射关系为互相对应的,映射方法如下:
表1 结构对应关系:物理模型中的元素、数据类型及关系用逻辑模型表示
表2 文档包含对应关系:物理模型中的模式文档包含关系用逻辑模型表示
表3 内容模型及类型对应关系:物理模型中的内容模型以及类型用相应的逻辑模型表示
根据以上对应关系,可以写出图4的物理层XML Schema文档,由于篇幅有限,此处仅对其进行部分描述:
type=”xsd:integer” /> type=”xsd:integer” /> type=”xsd:integer” /> 本文对列车自动防护系统测试用例的生成方法进行了描述,以ATP系统动态速度监控功能为例,采用由UML生成XML测试脚本的3层设计方法,从构建测试案例的概念层UML图开始,使用转换规则及对应关系,最终生成了测试案例的XML Schema文档。这种方法基于统一建模语言UML,采用可扩展标记语言XML来对测试案例进行描述。生成的测试文档具有通用性,有利于自动化测试技术的展开和发展。 由于列车控制系统的复杂性,其自动化测试技术的实现依然存在诸多难点,在得到了测试用例之后,如何分析其可行性,具体生成实际测试中的测试序列,依然是未来研究的重点。 [1] 徐宏喆,陈建明.UML自动化测试技术[M] . 西安:西安交通大学出版社,2006,8. [2] 高怡新.XML基础教程[M] :北京:人民邮电出版社,2006,11. [3] Routledge N, Bird L, Goodchild A.UML and XML schema[J] . Australian Computer Science Communications, 2002,24(2):157-166. [4] David Carlson,Modeling XML Applications with UMLPractical e-Business Applications[M] .Pearson Education,2001. [5] 王明文,朱清新.基于UML的XML Schema设计[J] .电子科技大学学报,2006,35(3):389-391.4 结束语