靖焱林,唐 涛
(北京交通大学 轨道交通控制与安全国家重点实验室,北京 100044)
车载设备是列控系统的重要组成部分,其功能和性能符合规范的要求,才能保证列车的安全运行,因此在设备投入使用前,要对其进行全面的测试。测试用例生成是实现自动化测试的关键,对于车载设备的测试,基于UML模型的测试具有很大的优势。UML 2.0活动图适合于描述各种运营条件下车载设备的功能执行过程,不同抽象层次的活动图可以对系统不同层次的行为进行建模,可以生成用于不同用途的测试用例。本文主要研究CTCS-2级列控系统车载设备的功能测试用例生成方法。
CTCS-2级列控系统是基于轨道电路和点式应答器,传输列车运行信息,并采用目标距离模式监控列车运行的列车运行控制系统。系统包括列控车载设备和列控地面设备。
车载设备由车载安全计算机、轨道电路信息接收模块、应答器信息接收模块、人机界面、速度传感器、列车接口单元、运行记录单元、轨道电路信息接收天线、应答器信息接收天线等部件组成。
车载设备具有的基本功能有轨道电路信息和应答器信息接收功能、载频锁定功能、速度和距离计算功能、制动输出功能、防溜逸功能、记录功能、显示和提示功能、LKJ接口功能、与动态监测设备接口功能、与EMU的接口功能等。
UML 2.0活动图将系统行为过程建模为活动,活动由边所连接的节点集合组成。节点可以是动作节点、控制节点或对象节点。边代表活动中的流,可以是控制流或对象流。
仅当每条输入边上有控制流,并且系统状态满足节点的前置条件,动作节点执行其操作;在操作执行结束时,如果系统状态满足节点的后置条件,那么控制流转换到其输出边。常见的动作节点有调用动作、发送信号动作和接受事件动作。
控制节点管理活动内的控制流,它控制流如何从它们的输入边传递到输出边。常用控制节点类型有初始节点和终止节点、判决节点和汇合节点、派生节点和汇聚节点。初始节点表示活动开始,终止节点表示活动结束。对于判决节点,只有满足防护条件的输出边才能获得流;汇合节点则将输入边的控制流汇合给输出边。派生节点将控制流同时分给满足条件的并发输出进程;对于汇聚节点,仅当所有的输入边的控制流满足条件时,才传给输出边。
对象节点表明对象在活动中的特定位置可用。对象流是对象节点的输入和输出边,代表对象的活动。对象节点可以表示为活动参数或别针,它们在语义上都是相同的。活动参数与对象节点并无二异,表示活动的输入或输出参数。别针仅有一条边,输入别针仅有输入边,输出别针仅有输出边。
定义1:活动图D = {A, T, C, F}是一个四元组,其中:
(1)A是有限节点集合,且A为非空集合;
(2)T是有限边集合,且T为非空集合;
(3)C是相应边上的转移条件表达式;
定义2:D = {A, T, C, F}是活动图,CA表示当前活动状态,CA是A的子集,对于T中的任意元素t,有:
(2)C(t)表示t上的转移条件,E(CA)表示CA可触发的边集合,则•t 是CA的子集。
(3)f(CA)表示在某一时刻CA能够触发的唯一发生转换的边,则f(CA) = {t | t∈E(CA)且(CA为空},t触发后的新状态CA* = (CA-,如果满足条件的t不止一个,那么任选其中一个。
(4)EP表示活动图的执行路径,即:
CA0是EP的起始活动状态,CAn是EP的终止活动状态,CAi是当前活动状态,ti= f(CAi),i =
定义3是测试场景的形式化定义。
定义3:D = {A, T, C, F}是一个可测试活动图,即D至少有一个初始节点。D的初始活动状态是CA0,表示初始节点集合,终止活动状态是CAn,表示终止节点集合。D的一个测试场景TS是从活动的初始节点到终止节点的执行序列,即:
其中,CAi是当前活动节点集,且ti∈E(CAi),Ci是ti的转换条件,i = 0, 1, 2,…, n-1;CAi= (CAi
定义4是测试用例的形式化定义。
定义4:D = {A, T, C, F}是一个活动图,D的一个测试用例TC是包含特定测试场景和输入输出数据的三元组,即:
TC = {TS, ID, ED}
其中,TS是测试用例所属的测试场景,ID是输入数据,ED是ID对应的输出数据。
测试数据可以通过分析活动的输入对象节点、输出对象节点、转移边上防护条件得到。输入数据取值可采用等价类划分、边界值分析等方法设计,然后通过组合覆盖原则定义满足测试覆盖要求的测试用例。
(1)节点覆盖准则:活动图上的所有节点至少要执行一次。(2)转移覆盖准则:活动图上的所有转换至少要执行一次。(3)基本路径覆盖准则:活动图上的所有路径至少要执行一次。对于循环,按照不进入循环和进入循环一次处理,这样生成的路径叫做基本路径。
当并发线程比较多时,由于并发线程可以任何顺序排列构成基本路径,会导致路径爆炸问题,因此需要对并发线程的基本路径组合进行约束。测试人员可以对活动进行约束,规定执行顺序;也可以指定路径权值,规定权值大的路径在测试场景中所占比例较大。
在生成测试场景前,定义活动图的数据模型,该模型描述了活动图构成及其与测试用例间的关系。活动图类由分区、节点和转换边组合而成;节点有两种,分别是控制节点和动作节点,此外节点的属性有输入数据、输出数据、输入边、输出边和防护条件;转换边的属性有头节点、尾节点和防护条件。每一个活动图对应于多条测试场景,每一条测试场景至少属于一条测试用例。
根据测试覆盖准则,采用带回溯的深度优先搜索遍历算法,遍历活动中所有基本路径生成测试场景。遇到决策节点拆成不同场景,对于循环,至多进入循环一次,因此在遍历基本路径的同时,也可以遍历活动的所有节点和转换。
测试场景生成算法的输入是活动图,输出是该活动图的所有场景(scenarios),定义节点栈(VertexStack)、转换边栈(TransStack),可触发的转换边栈(Enabled-Stack),当前状态集(CurrStateSet)、当前状态集的可转换边集(EnabledTrans)、新的状态集(NewStateSet)、下一次触发的转换边(Se-Transition)、找到的基本路径(scenario)、判断是否到终止节点的标识符(SeAnother)。算法流程如图1。
测试用例的生成算法是提取测试场景信息的过程,将测试场景中的信息转换成输入、输出数据和操作组成的序列,并以数组或序列的形式输出。
测试用例生成算法的输入是测试场景序列(scenarios[]),输出是测试用例序列(Testcases[])。当前测试场景(currScenario)由节点序列(vertex[])和转换边序列构成(trans[]),当前测试用例(currTestcase)由输入数据(Input),输出数据(Output)和约束(Constrains)构成,i和j是自然数。算法具体流程如图2。
图2 测试用例生成算法
系统活动图模型既要精确描述系统的行为过程,也要保证其可测试性。车载设备工作过程中,需要与多个外部接口进行信息交互,同时还要实时监控列车运行。结构复杂的活动图模型虽然能够详细地描述系统的活动,但是不利于理解,也难以生成好的测试用例集。为方便测试用例设计和生成,规定车载ATP活动建模遵循以下规则。
规则1:每一个活动只有一个初始节点,至少有一个终止节点,派生节点和汇聚节点须成对出现,不同分支的活动必须异步执行。
规则2:除了初始节点和终止节点,其他节点至少有一条输入边和输出边,从而保证了图中每一节点都是可达的,即没有孤立节点。
规则3:对于结构化活动或原子动作节点,标识其输入输出对象节点,使用输入和输出别针来表示。
规则4:对于控制节点,需要标识其输出边上的转移条件,作为约束。
下面以车载设备的制动输出功能为例说明基于活动图模型的车载设备测试用例的生成。车载设备的制动指令与制动模式曲线相关,对于设备制动优先方式,当运行速度达到常用制动模式曲线时,车载设备触发最大常用制动,并按照一定条件在触发最大常用制动之前的时机发出弱常用制动命令;当运行速度达到紧急制动模式曲线时,列控车载设备发出紧急制动命令。图3为设备制动优先时的制动输出功能执行过程活动图。
图3 制动输出功能活动图
在UML建模工具中创建的活动图模型可以XMI格式导出,使用XMI格式表示的UML模型具有良好的数据定义,也便于自动化处理和与数据库连接。本文采用标准的Java DOM API分析XMI格式的活动图,生成的测试场景和测试用例以Acess数据表的形式给出。根据我们实现的测试场景生成程序,可得出上述活动图有7条基本路径,图4为部分测试场景信息。
图4 制动输出功能的测试场景
通过分析每条测试场景节点的输入输出对象内容和转换的防卫条件,可以生成相应的测试用例,图5为部分测试用例信息。
图5 制动输出功能的测试用例
本文重点研究基于活动图的车载设备的测试方法,包括测试场景和测试用例的生成。基于节点、转换和路径覆盖准则生成的测试场景可以满足现场中的运营条件需要,测试用例中的测试数据详细描述了系统与外部的交互信息,为在实验室仿真环境下对系统进行测试提供了有力的支持。
只是包含描述性测试信息的测试用例是无法直接执行的,因此还需要深入分析这些描述性信息,研究如何生成具体的测试数据和可执行的测试用例,这是未来的研究重点。
[1]方贵宾,胡辉良. UML 2.0和统一过程[M]. 北京:机械工业出版社,2006:184-212.
[2]徐啸明. 列控车载设备(CTCS2-200H型)[M]. 北京:中国铁道出版社,2007:8-11.
[3]牟 凯,顾 明. 基于UML活动图的测试用例自动生成方法研究[J].计算机应用,2006,26(4):844-846.
[4]袁洁松,王林章,李宣东,郑国梁. UMLTGF:一个基于灰盒测试方法从UML活动图生成测试用例的工具[J]. 计算机研究与发展,2006,43(1):46-53.