计算机联锁软件的黑盒测试过程分析与实现

2018-03-01 18:57任丽霞
铁路计算机应用 2018年2期
关键词:黑盒测试软件测试用例

任丽霞

(西南交通大学 信息科学与技术学院,成都 610031)

铁路运输是我国重要的旅客和货物运输方式之一,车站联锁功能的提升也是现代铁路运输的需要。计算机联锁系统[1]是否能够完成联锁逻辑功能,最重要的工作之一就是对联锁软件的联锁逻辑运算功能进行测试,一方面测试联锁软件的功能是否满足软件的规格需求说明书并发现错误,另一方面是为了发现至今为止还没有被发现的错误。关于软件的测试[2],通常有人工测试和自动测试两种方式。人工测试需要人为地测试每一条测试用例,其中会涉及到大量重复的测试动作,耗时耗力,效率低下。而自动测试则用软件代替了人工测试中重复的动作,效率得以极大地提高,因此,自动测试已经成为现在主流的测试方式。该测试方式属于功能测试,测试时不需要知道软件内部代码的具体执行情况,因此通常采用软件测试方法中的黑盒测试方法。本文基于等价类划分法和故障树分析法编写不用覆盖率的测试用例,用python伪代码实现了测试用例“进路正常选出”。

1 软件测试

1.1 测试目的

为了验证一个软件是否完成了用户需求的功能,并发现尚未发现的错误的测试方案,在一个软件的开发过程中不可避免地需要对各个开发阶段进行不同作用的测试。

具体来说,测试的目的主要有以下3点[1]:

(1)测试是为了发现程序中的错误而执行程序的过程;

(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;

(3)成功的测试是发现了至今为止尚未发现的错误的测试。

为了尽可能地提高程序的正确性,更好地实现测试的目的,针对不同的实际情况也出现了不同的软件测试方法。

1.2 测试方法

1.2.1 黑盒测试

黑盒测试也叫做功能测试,关于这类测试,测试员不需要知道具体的程序代码,而只需要输入相关测试数据后收集对应的输出结果,通过实际输出结果与预期输出结果对比一致性来判断软件是否完成了某种功能。

黑盒测试主要在测试过程的后期使用,力求发现白盒测试不易发现的一些错误:功能错误、功能遗漏、界面错误、外部数据库访问错误或数据结构错误以及性能错误等。常见的几种黑盒测试技术为:等价划分法、边界值分析法、错误推测法。

1.2.2 等价类划分

等价类划分后的数据类又分为有效等价类和无效等价类,即输入有效和输入无效的等价类型。等价划分法是一种黑盒测试技术,可以类比于数学中的合并同类项。

例如:判断一个程序是否能实现“输入一个3位正整数时相应的输出也为一个3位正整数”功能。可以把“0[1-9][1-9]”“00[1-9]”“[1-9][1-9][1-9]”分别看作3类数据,这时,我们只需要在每一类数据中拿出一个数据来作为输入数据进行测试就行了,即这3种类型的数据为有效等价类。而“0000”这种格式的数据明显不属于上述3种类型的数据,因此为一种无效等价类。

综上所述,等价划分法的重点和难点在于等价类的划分,即选取出有效的具有代表性的数据。

1.2.3 故障树分析

安全性测试中常用的一种方法就是故障树分析(FTA,Fault Tree Analysis)。故障树分析通常分3步进行:确定顶事件、建造故障树、故障树的定性和定量分析。

1.3 测试步骤

(2)测试软件的测试用例数据库向计算机联锁软件输入控制命令,计算机联锁软件输出结果并传入测试软件的运行结果记录数据库;测试软件分析运行结果是否与期望结果一致。如果一致,则测试下一个操作命令;如果不一致,则反馈重新生成测试数据并测试该操作命令,3次都不一致则重新排入测试命令序列等待测试;

(3)测试软件最后生成记录文档,显示测试功能的结果。

2 列车进路选出黑盒测试过程与实现

2.1 联锁软件的测试环境

联锁软件的黑盒测试通常在一个测试平台完成,这个测试平台由测试软件、被测联锁软件以及车站信号设备仿真系统3部分构成,测试框图[5],如图1所示。

图1 联锁软件黑盒自动测试框图

在测试平台中,自动测试过程如下。

(1)测试软件发送“改变状态”的命令到车站设备仿真系统中,通过改变3大信号设备的状态来模拟实际现场可能遇到的各种联锁情况;

(2)仿真系统中各设备接受命令后改变状态,并将改变后的状态发送至联锁软件和测试软件;

(3)测试软件将模拟的操作命令发送至联锁软件,联锁软件根据操作命令生成驱动命令;

(4)联锁软件用驱动命令来使仿真系统完成模拟操作,同时,联锁软件将输出的驱动命令发送给测试软件,测试软件根据输入和输出判定该操作命令的软件功能是否完成;

墨西哥民族和文化的本质便具有混血性(mestizo)(陶家俊,2003:4)这种混血性的文化身份是帝国主义殖民扩张和全球化的产物,体现了现代、后现代时期异质文化间的张力。(61)

(5)测试重新开始1的过程,进入到下一轮测试。

2.2 测试软件的构成

测试软件[2]由测试用例数据库、运行结果记录数据库、分析判断模块、网络通信模块以及设置设备状态模块5部分构成。

测试开始时,测试用例数据库向联锁软件发送模拟操作命令,同时将该条测试用例发送至运行结果记录数据库中。联锁软件完成测试功能后输出驱动命令后将被记录在运行结果记录数据库中。此时,分析判断模块将对比运行结果和测试用例中期望的输出结果,判断出该条测试用例的期望结果和实际结果是否一致。若一致,则删除运行结果记录数据库中的该条测试;若不一致,返回到测试开始重新进行测试,3次测试仍然不一致后将停止该条测试用例的测试,并将每一次的测试结果和仿真系统的状态信息记录在运行结果记录数据库中。

若涉及到需要改变仿真系统信号设备状态的测试时,则需要通过测试软件的设置设备状态模块,也就是模拟故障情况下的测试时需要用到设置设备状态模块。

2.3 列车进路选出的测试用例编写

车站信号设备平面布置图是根据站场线路图绘制的,能清楚地反映站场信号设备的位置。联锁表是说明站场中信号设备联锁关系的图表。它们都是测试平台中车站信号设备仿真系统仿真的依据和联锁软件实现联锁功能的基础。

图2 举例车站信号设备平面布置图

表1 联锁表

依据的车站信号设备平面布置图和联锁表分别如图2和表1所示。其中,联锁表只截取了列车进路选出测试用例编写时涉及到的相关进路。

3 列车进路选出黑盒测试过程与实现

3.1 列车进路选出的测试用例编写

下面对“列车进路选出”这一功能进行等价类划分。根据传统的计算机联锁软件功能测试项目可知,针对“列车进路选出”这一功能有正常选出进路和故障下选出进路两大测试项目,如表2所示。可以用布尔值“True”和“False”来判断设备状态。

表2 计算机联锁“进路选出”功能测试项

3.2 故障树分析编写测试用例

根据测试用例分级要求和已有的相关经验,选取“进路选出时发生危险性失效”作为故障树的顶事件,并建造故障树,如图3所示。

其次,需要进行故障树的定性分析,以确定最小割集,也就是可能引发顶事件的故障组合方式。

图3 进路选出时发生危险性失效故障树框图

针对“进路选出时发生危险性失效”故障树,这里采用下行法进行分析。从T1开始为步骤1,这里的G1为一个“与门”,根据下行法的规则,这时应该增加割集的阶数,于是有步骤1的{x1,M1}。M1下面是G2,即从步骤1到步骤2遇到G2这个“或门”,根据下行法的规则,这时应该增加割集的个数,又因为M1下面是x2与x3,所以竖向展开得割集。至此,故障树已到达所有的底事件,故障树分析完成。所以,该故障树分析分为了2步,共得2个割集{x1,x2},{x1,x3}。又因为该割集已经无法再简化,因此得到的全部最小割集为{x1,x2},{x1,x3}。

3.3 列车进路选出的测试流程

根据测试用例的编号,测试软件将自动生成测试序列,然后将每一条测试用例都至少进行一次测试。测试开始后,输入测试用例中的输入数据,此时,联锁软件会依次检查仿真系统中信号设备的联锁条件。若进路中轨道区段和超限绝缘区段空闲、敌对进路未建立、道岔与进路要求的位置一致,则是正常情况,即完成该条测试,并等待下一条测试操作指令;若以上联锁条件中有不正常情况,测试将转入测试开始阶段重新测试该条测试用例,重复3次测试都不正常时也将转入下一条测试操作指令,并把该测试结果记录在运行结果记录数据库中,以便对所有测试发生的故障情况进行汇总。列车进路选出的测试流程,如图4所示。

3.4 测试用例的实现举例

在联锁软件的黑盒测试平台上使用python语言[6],可以实现测试用例的重用、测试动作的自动执行以及测试结果的报表输出。用python语言实现测试用例是一种已经运用在实际测试中的方法。针对测试用例“正常选出进路”编写的python伪代码。

图4 列车进路选出的测试流程图

输入始终端按钮:

检查敌对信号是否开放:

检查超限区段是否空闲:

检查道岔是否与进路选出要求的位置一致:

当检查的联锁条件与进路要求一致时,变量x=1,否则x=0。并将x做and运算。由and运算的规则可知,只有当联锁条件判断后x都等于1时,最终被x赋值的end才为1,即输出“进路选出”。否则,若联锁条件判断后有至少一项使得x=0,最终被x赋值的end则为0,即输出“操作失败”。

4 结束语

(1)联锁软件代替了继电联锁中继电器的动作,避免了硬件损伤带来的错误,使得联锁逻辑功能具有更高的可靠性、安全性和可用性,并使得设计、施工及其维护变得简便易操作。

(2)联锁软件在测试平台下的黑盒测试过程,并根据联锁软件黑盒测试[5]的测试用例覆盖率重点分析了不同等级测试用例的编写方法。本文选取了“列车进路选出”这一联锁逻辑功能作为举例,从测试环境、测试用例的编写和测试流程说明3个方面进行了分析,重点在对该功能测试的测试用例的编写过程介绍。

(3)等价类划分法只做了简单的测试说明,采用故障树分析法编写了4级测试用例。而且论文只是用python伪代码实现了一个测试用例。

选用某一种程序设计语言来编写代码,用代码来模拟人工的输入和检查,实现自动测试。这种方式不但提高了效率,也在很大程度上提高了测试的准确度,因而能更好地保障联锁软件的安全。

[1]张海藩. 软件工程导论[M]. 北京:清华大学出版社,2011:150.

[2]石艳敏. 一种高效的计算机联锁软件测试方法[J]. 铁路计算机应用,2013,22(12):50-54..

[3]中华人民共和国铁道部.计算机联锁技术条件:TB/T03027-2002[S].北京:中国铁道出版社,2002.

[4]王 东. 轨道交通信号系统仿真测试与验证技术研究与应用[D]. 杭州:浙江大学,2014.

[5]张 伟,高 凡. 黑盒测试技术在城市轨道交通信号系统监理验收中的研究与应用[J]. 铁路计算机应用,2012,21(12):56-59.

[6]刘小旭, 岳东河. 基于Python的计算机联锁系统自动测试平台[J]. 价值工程,2010(27):171.

猜你喜欢
黑盒测试软件测试用例
一种基于局部平均有限差分的黑盒对抗攻击方法
回归测试中测试用例优化技术研究与探索
基于SmartUnit的安全通信系统单元测试用例自动生成
网络自适应测试软件运行方法设计
自动化检测EPU10A板卡系统设计与实现
基于依赖结构的测试用例优先级技术
远程开放教育学生自主学习能力评价的研究
一款重型包装抗压系统控制软件的设计与开发
软件回归测试用例选取方法研究