本发明涉及轨道交通领域,具体为列车运行控制系统安全关键软件测试用例生成方法。
背景技术:
列车运行控制系统,简称列控系统,是轨道交通系统的重要组成和安全关键系统之一,其核心作用是指挥和控制列车在高速度、高密度的追踪条件下安全运行,是轨道交通系统的“中枢神经和大脑”。随着计算机、通信、电子和自动控制等技术在列控系统中的广泛应用,软件已经成为列控系统的重要组成部分,其中,承担安全关键功能的软件被称为列控系统安全关键软件。列控系统安全关键软件承担的安全功能越来越多、软件规模越来越大、复杂度越来越高,在满足并发性、实时性等因素的同时,还需要考虑安全性的特殊需求。一旦列控系统安全关键软件发生逻辑错误,轻则可能导致系统运行中断,影响行车效率,重则可能导致行车事故,造成人员伤亡、重大财产损失及环境破坏等灾难性后果。因此,必须对列控系统安全关键软件进行系统、严格的测试,保证软件安全功能逻辑的正确性。
测试用例是列控系统安全关键软件测试的重要基础,测试用例的优劣直接影响测试工作的质量。若测试用例重复度高,则影响测试效率,可能导致人力、物力、时间、资源的极大浪费;若测试用例不完备,则影响测试的有效性,甚至隐藏在列控系统安全关键软件中的部分安全隐患不能得到有效辨识和控制,可能危及行车安全。且列控系统安全关键软件功能逻辑、数据交互及状态转移极其复杂,软件的输出是列控系统运营场景中多事件、多因素在特定时序、特定逻辑下相互作用的结果,给列控系统安全关键软件的测试工作带来了很大的难度。
目前,列控系统安全关键软件的测试主要依赖专家经验。通过参照欧洲列车运行控制系统ETCS的典型测试用例,结合中国列车运行控制系统CTCS的实际运营需求,借助专家经验,人工编制列控系统的测试用例,再根据技术规范构建测试场景,验证各种测试场景下系统的正确性,在列控系统发展的初期起到了重要作用。而依据专家经验的测试方法,受限于专家对系统故障及异常情况的认知,针对复杂系统的测试,人工编制的测试用例难免存在测试项遗漏的问题,难以对列控系统的功能、场景,尤其是特殊功能或场景的进行全覆盖,可能为运营阶段埋下安全隐患;另外,人工编制的测试用例容易存在测试项重复的问题,造成测试用例冗杂、测试工作繁重、测试效率低下、耗时费力,测试用例的合理性难以得到有效保证。国内外一些学者对列控系统测试用例生成技术进行了相关的学术研究,如基于模型的测试方法,但仍处于理论阶段,不能生成可执行的测试用例。
因而,需要针对列控系统安全关键软件的功能需求和具体特点,研究列控系统安全关键软件自动测试理论、方法和技术,构建自动测试平台和工具,科学编制测试用例,实现测试自动化,提高测试的完备性和高效性。
现有技术中,参考相关工程的测试用例,结合列控系统的具体特点,借助专家经验,通过人工编制测试用例、逐步完善的方式进行测试。以CTCS-3级列控系统为例,原铁道部颁布了《CTCS-3级列控系统测试用例(v3.0)》,作为列控系统实验室仿真测试、现场测试、联调联试以及互联互通测试的依据。CTCS-3级列控系统软件测试以该文件作为依据,人工编制测试用例,根据测试用例进行人工测试。该技术的缺点:
(1)新建项目时,若没有相关工程测试用例可供参考,则重新构建测试用例存在很大困难;
(2)依赖专家经验编制测试用例,存在一定的主观性,编制的测试用例难以保证合理性,可能存在测试项重复、遗漏或错误问题,导致测试效率低、测试不完备,部分安全问题测试难以覆盖,为列控系统的运营埋下安全隐患。
另外,基于状态图的列控安全关键软件测试用例生成方法是一种基于“状态图”和“图论”的自动生成测试用例的方法,主要包括以下方面:
(1)需求建模:采用状态图描述列控系统系统需求;
(2)需求分析:将UML状态图解析为“图论”技术中的相关边、节点等信息,然后利用“图论”的算法,解析出数量少但覆盖全的测试路径,主要包括两个阶段:
a)为了利用“图论”的算法分析(1)中的状态图,对该状态图进行标准化,将状态图转换为平坦化的图模型;
b)在平坦化的图模型的基础上,将对状态图的操作转化为图论中的边、回路及顶点关系,采用相应的图论算法对平坦化模型进行遍历,在满足测试覆盖标准的前提下,解析出数量少但覆盖全的测试路径。
(3)生成测试用例:根据(2)中解析出的测试路径,获取每一条测试路径对应在UML状态图中的需求信息,在此基础上为每条测试路径上的每一条边生成抽象的测试用例,进而每条测试路径的测试用例构成测试序列。
该技术的缺点:基于状态图的测试序列生成方法没有结合生成测试数据的方法,最终得到的是状态图上的迁移条件,仅为抽象测试用例,未提供抽象测试用例转换为具体测试用例的方法,不能用于列控系统安全关键软件的测试,不具有可实施性。
技术实现要素:
本发明旨在提出一种全面、高效的列控系统安全关键软件测试用例生成方案,为达到上述技术目的,本发明采取的技术方案为:
列车运行控制系统安全关键软件测试用例生成方法,包括以下过程:
(1)列车运行控制系统安全关键软件建模;
根据列车运行控制系统的需求规范,采用状态图形式化地描述列车运行控制系统需求,然后通过仿真及模型检测方法验证模型的正确性。
(2)根据步骤(1)所建立的状态图模型生成测试路径,包括以下过程:
a)首先对步骤(1)生成的状态图去层次化,得到平坦的状态图,然后将平坦的状态图等价转化为有向图模型,状态图的状态和迁移分别对应图模型的节点和边,同时记录图模型边与平坦状态图的迁移条件的映射关系;
b)利用广度优先算法遍历有向图模型进行,生成有向图的节点之间的路径集;
c)利用有向图模型、路径集,生成抽象测试集;
d)根据有向图模型,依据边覆盖、节点覆盖及主路径覆盖测试充分性准则,找出覆盖所有需求的超集测试需求集;
e)利用抽象测试路径集,对超集测试需求集进行拆分;利用采用前缀图匹配算法计算出最优测试路径,生成数量少但覆盖全面的路径,得到测试路径集。
通过图论算法分析测试路径的方法,也可以是除广度优先、前缀图匹配之外的方法。
(3)根据步骤(2)的测试路径生成测试用例;
步骤(2)生成的每条测试路径都包含多条边,每条边代表列车运行控制系统的测试场景,分析出边的测试场景的集合;采用组合测试的方式,根据边在路径中的顺序关系,对每条测试路径的边的场景集进行组合覆盖,计算出该测试路径的测试用例。
组合覆盖考虑了边场景之间的关系,包含了小概率事件场景,使得测试用例全面地覆盖列控系统可能的场景,保证了安全性方面的测试。
本发明提供的列车运行控制系统安全关键软件测试用例生成方法,通过图论算法的边、节点及路径分析和图边、路径的组合覆盖,提出测试用例自动生成算法。由于算法的完备性和约简性,测试用例能够覆盖列控系统安全关键软件的全部需求,同时不存在重复测试项;组合分析使得测试用例包含列控系统的小概率场景、异常事件,能够测试列控系统的安全性需求。
附图说明
图1是本发明的建模子系统示意图;
图2是本发明的测试路径生成方法子系统示意图;
图3是本发明的组合测试用例生成子系统示意图;
图3A是实施例步骤(3)的流程图;
图3B为实施例的有向图;
图3C为实施例的前缀图;
图4是实施例有向图生成测试用例的算法原理图;
图4A是实施例a)S21的流程图;
图4B是实施例b)S22的流程图;
图4C是实施例c)S23的流程图;
图4D是实施例d)S24的流程图;
图4E是实施例e)S25的流程图。
具体实施方式
下面参考附图,详细说明本发明的具体实施方式。
(1)列车运行控制系统安全关键软件建模;
根据列车运行控制系统的需求规范,采用状态图形式化地描述列车运行控制系统需求,然后通过仿真及模型检测方法验证模型的正确性,如图1所示。
(2)图2是本发明实施例的测试路径生成方法。其中由有向图生成测试用例的算法原理如图4所示,根据步骤(1)所建立的状态图模型生成测试路径,包括以下步骤:
a)S21,对建立的列控软件UML图模型进行平坦化、生成有向图。
具体地,对步骤(1)生成的状态图去层次化,得到平坦的状态图,分析状态图的迁移条件对应列车运行控制系统的可能的测试场景,然后将平坦的状态图模型转化为等价的有向图模型,其中状态图的状态转化为有向图的节点,状态图的迁移转化为有向图的边,同时记录平坦状态图的迁移条件和有向图的边的映射关系,如图4A所示;
b)S22,利用有向图模型,生成图中节点之间的路径集。
具体地,包括以下步骤:
S221,根据S21步骤产生的有向图,识别出图中的起始节点集,基于广度优先搜索对有向图进行遍历,以起始节点集中的每一个起始节点为根节点,建立广度优先搜索树集,得到有向图起始节点集到图模型中任一结点的路径集,如图4B所示;
c)S23,利用有向图模型、路径集,生成抽象测试集。
具体地,如图4C,包括以下步骤:
S231,根据S21步骤得到的有向图,识别出图中的终止节点集。
S232,遍历S22步骤生成的路径集,提取路径集中从起始节点到终止节点的路径,构成抽象测试路径子集,同时将路径集与抽象测试路径子集相交的部分从路径集中移除,更新路径集。
S233,遍历路径集,检查每条路径是否包含终止节点,如果包含,则将该条路径从终止节点处截断,构造出从起始节点到终止节点的测试路径,并将新构造的测试路径加入到抽象测试路径子集中,同时移除路径集中对应的路径。
S234,再次遍历路径集,依次判断路径集中的每条路径是否与抽象测试路径子集中的每条抽象测试路径是否有一个或多个重复的节点,如果有,则从与抽象测试路径的第一个重复节点开始,对路径集中的路径按照抽象测试路径进行扩展,得到新的抽象测试路径,并将该路径加入到抽象测试子集中,同时移除路径集中对应的路径。
S235,判断路径集是否为空,如果为空,则令抽象测试子集为抽象测试集。如果不为空,则抛出错误异常,终止执行。
d)S24,利用有向图模型,基于测试覆盖准则,生成超集测试需求集。
此处提到的测试覆盖准则,是指基于结构化的图覆盖准则,包括但不限于:节点覆盖准则、边覆盖准则、边对覆盖准则,简单路径覆盖准则,主路径覆盖准则以及全路径覆盖测准则。此处提到的超集测试需求集,是指对测试需求路径集进行优化后的路径组合集合。
具体地,如图4D,包括以下步骤:
S241,根据S21的有向图,基于上述某一特定的覆盖准则,生成测试需求路径集。
S242,对需求路径集中的路径进行两两比较,将路径之间的重复节点个数作为重复度。
S243,根据路径之间的重复度,构造前缀图,图的顶点为各条需求路径的最后一个节点;图的边为需求路径之间的重复条件,即路径之间有重复,则前缀图对应顶点之间有一条边相连;边的权重为路径之间的重复度。
S244,根据前缀图构造对应的二分图,并计算出二分图的一个最大匹配集。
S245,对最大匹配集中的路径构造圈覆盖集。
S246,循环执行步骤S245,直至圈覆盖集与最大匹配集中没有顶点相连。
S247,对于测试需求路径集与圈覆盖集的并集,计算集合中每条路径的开销复杂度,将开销复杂度最小的路径按先后顺序加入到超集测试需求集中,然后在对应的并集中移除该条路径。此处的开销复杂度,是指路径中涵盖到而超集测试需求集中没有涵盖到的节点数与路径自身的节点总数之比。
S248,重复步骤S248,直至并集为空。
e)S25,利用抽象测试路径集,对超集测试需求集进行拆分,得到测试路径集。
具体地,如图4E,S25包括以下步骤:
S251,遍历超集测试需求,如果需求中前一条路径与后一条路径具有连接关系,则将两条路径为连接为同一条路径,并重新加入到超集测试需求集中,同时移除对应的前后两条具有连接关系的路径。
S252,重复步骤S251,直至需求中前一条路径与后一条路径不具有连接关系。
S253,遍历超集测试需求集,利用抽象测试集中的路径,对超集测试需求集中的每一条路径进行扩展,得到完整的测试路径集。
S254,遍历测试路径集,移除集合中重复的路径,得到最终的测试路径集。
通过图论算法分析测试路径的方法,也可以是除广度优先、前缀图匹配之外的方法。
(3)根据步骤(2)的测试路径集生成测试用例集,如图3所示,包括以下步骤
a)S31,根据测试路径集和变迁对应的列车运行控制系统的测试场景,生成测试用例。
具体地:
S311,遍历测试路径集中的每一条测试路径,根据S21分析变迁对应的列车运行控制系统的测试场景,对每一条路径中的边,将边上的变迁对应的列车运行控制系统的测试场景作为组合条件,采用组合测试用例生成算法,选取特定的组合覆盖准则,生成最终的测试用例集。其中,特定的组合覆盖准则包括但不限于:单因素覆盖准则、两两组合覆盖准则、三三组合覆盖准则,四四组合覆盖准则、混合覆盖准则等。
步骤(3)生成的每条测试路径都包含多条边,每条边代表一个场景;采用组合测试的方式,对每条测试路径的边场景进行组合覆盖,计算出该测试路径的测试用例。
以如图3B有向图为例,下面介绍采用主路径覆盖准则,采用前缀图匹配算法,自动生成测试路径的详细过程。
S22,识别出图中的起始节点为[1],终止节点为[6],采用改进广度优先搜索算法得到路径集[1,3,2],[1,2,4],[1,2,3],[1,3,4]。
S23是生成抽象测试集。
S231,识别图中终止结点[4]。
S232,得到路径集后,提取路径集中从起始节点到终止节点的路径为[1,2,4],[1,3,4],以这两条路径构成抽象路径测试子集,同时在路径集中移除路径[1,2,4],[1,3,4],此时路径集为[1,3,2],[1,2,3],抽象测试路径子集为[1,2,4],[1,3,4]。
S233,再次检查路径集中的所有路径,没有发现有路径包含终止节点,不用进行路径。
S234,遍历路径集,发现路径[1,3,2]最后一个节点[2]与抽象测试路径[1,2,4]重复,所以对路径[1,3,2]进行扩展,得到抽象测试路径[1,3,2,4],将路径[1,3,2,4]加入到抽象测试路径子集中,同时在路径集中把[1,3,2]路径移除。按照相同道理,再检查路径[1,2,3],对其进行扩展,并在移除对应路径后,最终得到路径集为空集,得到测试路径子集为
[1,2,4],[1,3,4],[1,3,2,4],[1,2,3,4]。
S235,路径集为空集条件成立,进入下一步骤S24
S24,利用有向图模型,基于测试覆盖准则,生成超集测试需求集。对于有向图,以主路径覆盖准则为例加以说明。
S241,选择主路径覆盖准则,生成测试需求路径集[1,2,3,4],[1,3,2,4],[1,3,4],[1,2,4],[2,3,2],[3,2,3]。
S242,构造主路径之间的重复度矩阵如下,矩阵中第i行,第j列元素的值为第i条路径和第j条路径之间的重复度且i不等于j,其中i=1,2,3,4,5;j=1,2,3,4,5。其中主路径自身不构成重复关系,无穷大表示两条路径之间没有连接关系。
S243,根据重复度构造出前缀图,如图3C所示。
S244,构造二分图,左图为[1],[4],右图为[2,3,2],[3,2,3]。计算最大配集为([2,3,2],[3,2,3]),([3,2,3],[2,3,2])。
S245,构造最大匹配集中的圈覆盖集为[3,2,3,2]。
S246,圈覆盖集中已没有定点与最大匹配集相连,条件满足。
S247,构造测试需求路径集与圈覆盖集的并集为[3,2,3,2],[2,3,2],[3,2,3],[1,3,4],[1,2,4],[1,2,3,4],[1,3,2,4],计算每条路径的开销复杂度为1,1,1,1,1,1,1。则默认将路径[3,2,3,2]加入超集测试需求集中,同时在并集中移除路径[3,2,3,2]。
S248重复S247,直至并集为空,得到超集测试需求集[3,2,3,2],[1,3,4],[1,2,4],[1,2,3,4],[1,3,2,4]。
S25,利用抽象测试路径集,对超集测试需求进行拆分,得到测试路径集。
S251,对S248得到的超集测试需求集进行遍历,发现每条路径均不存在连接关系,则转至步骤S252。
S252,转至步骤S253。
S253,抽象测试路径集为[1,2,4],[1,3,4],[1,3,2,4],[1,2,3,4],对超集测试需求集中的路径进行扩展,得到测试路径集[1,3,2,3,2,4],[1,3,2,3,2,4],[1,3,4],[1,2,4],[1,2,3,4],[1,3,2,4]。
S254,边路测试路径集,移除其中的重复路径,测到最终的测试路径集[1,3,2,3,2,4],[1,3,4],[1,2,4],[1,2,3,4],[1,3,2,4]。
S31,以S254生成的路径[1,2,3,4]为例,分析路径中的三条边对应的列车运行控制系统的测试场景;由于每条边反应轨道区段的占用情况,测试场景包括轨道区段占用(0)和轨道区段出清(1)两种情况;
S32,选择强度为2的组合覆盖,生成测试用例为(110),(101),(011),(000)。