APP下载

铁路信号软件单元测试研究

2020-03-13

铁路计算机应用 2020年2期
关键词:单元测试测试用例铁路信号

凌 珊

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

随着我国铁路的快速发展,铁路旅客发送量及旅客周转量逐年增加,保证铁路运输安全、提高运输效率越来越成为铁路系统关注的话题。铁路信号软件控制信号基础设备动作并实现逻辑检查,其稳定性及可靠性对于保证铁路安全运输起着重要的作用。在软件投入使用之前,需要对软件进行一系列的测试,单元测试作为最早、最基本的环节,不仅是软件可靠性与稳定性保证的关键因素,更是保证软件质量的有效手段。现阶段,对于铁路信号软件单元测试,大多存在测试不完整、不规范等缺点,如文献[1]仅介绍了计算机联锁软件的黑盒测试。而铁路信号系统安全度等级严苛,其软件质量要求高,在对其进行单元测试阶段,更应按照规定进行更加细致完整的验证,以保证铁路信号软件的可靠性,进一步提升铁路信号系统的安全性。

1 单元测试概述

1.1 单元测试原理

软件的单元测试就是针对软件最小组成单元进行正确性检验的测试工作,它的测试对象可以是一个模块、一个类甚至是一个函数[2]。测试人员依据软件源程序和软件设计规格说明书,了解函数的输入、输出范围限制,以及代码逻辑原理,以测试的方式来分析软件编码是否正确,确定软件接口、单元功能是否与软件设计规格说明书要求一致[3]。

对于较为复杂的软件,通过运行单元测试,可以直接测试各个功能的正确性,而无需启动整个系统,能够较早地发现编码问题并迅速定位问题所在位置,及时修改,降低整体开发时间,减少后期维护成本,有效提高软件代码质量。因此,单元测试是复杂软件测试中必不可少的一部分。

1.2 单元测试方法

软件单元测试主要分为静态分析和动态测试两种方法,其中,动态测试又可分为白盒测试和黑盒测试[4]。

1.2.1 静态分析

静态分析是一种不执行代码本身而获得其信息的技术,其目的是根据代码标准进行质量监控[5]。依靠人工检查或者专用的工具分析,检查软件源代码在逻辑、语法中所存在的错误。在整个检查过程中,可以覆盖所有程序代码,而不会破坏代码本身。静态分析的度量指标有逻辑代码行数、圈复杂度、扇入数、扇出数等。

白盒测试是基于软件内部设计和程序实现的测试方法,顾名思义,白盒,能够看见内部,这是一种“身处其中”的测试机制。整个测试过程中,不仅仅关注输入与输出的结果是否正确,还可以知晓软件内部程序是如何处理的[6]。白盒测试的主要方法有:数据流法、控制流法、逻辑覆盖分析法等。

1.2.3 黑盒测试

黑盒测试也称为功能性测试,从字面上理解,就是把软件单元的所有功能和逻辑接口放入一个黑盒子中,在无法得知内部逻辑走向与程序结构时,根据预设的程序进行测试[7],验证软件功能的正确性。在测试过程中,黑盒测试只关注输入、输出,若输入一个测试数据,其输出结果是正确的,则认为该功能正确,而不考虑软件内部的计算处理过程,是一种“置身事外”的数据驱动测试。黑盒测试的主要方法有边界值分析法、等价类划分法、场景法和因果图法等。

2 铁路信号软件单元测试概述

2.1 铁路信号软件单元测试基本要求

目前,在铁路信号领域,铁路信号软件测试的标准规范主要参考MISRA-C:2004 (Guidelines for the use of the C language in critical systems)[8]和ISO 29119-3(软件测试国际标准)[9]等文件,对铁路信号软件的单元测试需要根据软件详细设计规格说明书、软件需求规格说明书、软件测试规格说明书等;选取适当的方法对软件的性能、质量等方面进行测试,以检验该软件是否符合软件需求规格说明书的需求,尽可能及早地发现软件缺陷[10]。

铁路信号软件单元测试一般应满足以下要求:

(1)保证软件的行为和性能满足对应测试规格的要求;

(2)流通方向及流量。主要流通方向为重庆主城区,同时涵盖周边的涪陵、南川等区县,仔猪外调还包括湖南、广东等省市。

(2)软件测试应遵循先静态再动态的测试原则;

(3)测试用例应包含输入、输出两部分,能验证函数的正确性;

(4)测试用例使用等价类方式时,应包括有效等价类和无效等价类,最佳用例应覆盖所有有效等价类和无效等价类;

(5)测试通过准则为:BUG数等于0;

(6)对于错误较多的函数,应进行多次测试;

(7)分支覆盖率覆应达到100%,对于部分高覆盖率较难实现的函数,可以使用边界值和等价类或输入分割测试,用较少测试用例实现足够的覆盖;

(8)组合条件覆盖率应达到100%,特殊情况下,组合覆盖率不能达到100%,应经过人工验证代码,并给出合理解释和说明。

2.2 铁路信号软件单元测试方法步骤

本文选择C++test软件作为单元测试的工具,分为以下3步完成软件的单元测试:

(1)基于C++test的软件静态分析;

(2)基于边界值和等价类的黑盒测试;

(3)基于覆盖率分析的白盒测试。

3 铁路信号软件单元测试典例应用

本文以铁路信号软件区间综合监控系统软件为例,进行单元测试研究。

3.1 基于C++test的软件静态分析

采用工具及人工检查相结合的方式,通过C++test进行代码质量度量、控制流、数据流和编码规则检查,通过人工方式对编码规范符合性、代码与详细设计一致性进行分析,检查过程如图1所示。

结合C++test制定静态分析检查单作为检查依据,检查单部分内容见表1。根据检查单确定检查内容是否可通过软件检查,如果不能,则采用人工走查方式进行检查;如果可以,则进行软件分析,采用C++test软件,得到静态分析报告,若报告无误,则完成软件分析部分,若有误,则须人工核查错误项,确认无误后修改软件静态分析约束,抑制该检查项,并再次进行软件分析,直到得到正确分析报告。

表1 静态分析检查单

3.2 基于边界值和等价类的黑盒测试

等价类划分是把程序输入数据均划分为无数个等价类,从中选取具有代表性的作为测试用例数据;而边界值分析则是对等价类分析的补充,使得整个黑盒测试更具完整性。选取区间综合监控系统软件中处理区间占用逻辑函数fn_ProcSectOcupLogic为例,分4步完成黑盒测试。

(1)明确函数代码结构中所包含的输入、输出变量,以及输入输出边界值,划分等价类。fn_ProcSectOcupLogic函数中包含区间当前运行方向、功能启用标志等9个输入,在划分等价类时需注意增加无效等价类,以保证测试数据更加充分。

例如,判断区间运行方向是正向还是反向,其测试数据应取“0xaa”“0x55” “0x5a”,其中,“0xaa”表示区间正向,“0x55” 表示区间反向,这2种类型的数据即为有效等价类,而“0x5a”则是无法判断区间方向的数据,此为无效等价类数据。

(2)建立测试用例,在区间综合监控系统单元测试中,由于函数输入输出值较多,采用C++Test软件自带的测试用例生成功能,容易造成部分测试用例缺失,所以在软件中建立外部数据源,手动建立数据源测试用例。

(3)在新建的Excel表格中添加测试用例数据。同时,对函数内部调用的其他函数进行打桩处理,生成桩函数,替代原函数的功能,使得单元测试过程中能将被测功能与外部依赖隔离。

例如,在fn_ProcSectOcupLogic函数中调用了改方延迟函数fn_SOLGFDelayTime,此时,建立桩函数fn_SOLGFDelayTime,使测试过程中直接返回桩函数值为外部数据源,如图2所示,而无需调用原函数,提高了测试效率。在进行打桩处理时需要注意桩函数的返回值类型,内部调用函数的返回值类型应与其保持一致。

(4)根据程序的逻辑对外部数据源和桩函数输入取值进行修改,使其满足测试需求,在桩函数与测试用例都无误后,进行测试。

3.3 基于覆盖率分析的白盒测试

进行白盒测试,通过分析区间综合监控系统软件模块内部的路径执行情况、逻辑分支,选用覆盖率分析的方法,该软件要求语句、判定、简单条件和修正条件判定(MC/DC)4种覆盖率均达到100%。

基于以上黑盒测试,在C++Test软件工具菜单中选择“Parasoft”>“显示图示”>“覆盖率”,根据覆盖要求查看模块的4种覆盖率情况。对于覆盖率不能达到100%要求的函数,可点击相应的源码,查看未覆盖的原因,这样不仅能有效地提高测试质量,还能避免设计无效用例。如图3所示,选择MC/DC覆盖后,红色表示未覆盖语句,并显示未覆盖条件。

将图3语句描述为if((A)||((B)&& (C)))形式,A、B、C分别对应3个条件语句,用0和1分别表示假和真。分析语句,其判定结果如表2所示。

要实现MC/DC覆盖,其测试用例取值应满足每个条件都曾独立地影响判断结果至少1次,对于该语句,应同时满足以下2个条件:

表2 语句判定结果分析

(1)当A对判断结果起作用,则B&&C判定结果为假,即应满足A为1或0,B&&C保持为0。当A为1且B&&C为0时,包含3种可能,分别对应表2中情况1、2、3,测试时任选1种添加测试用例;当A为0且B&&C为0时,同样包含3种可能,对应表2中情况5、6、7,测试时与前面同理。

(2)当B&&C对判断结果起作用,则A判定结果为假,即应满足B&&C为1或0,A保持为0。当B&&C为1且A为0时,对应表2中情况8;当B&&C为0且A为0时,对应表2中情况4。

由图3中未覆盖条件可知,其未满足上述条件(2)中B&&C为1的情况,此时,根据未覆盖的值添加相应的测试用例,即可满足测试覆盖率的要求,最终覆盖结果如图4所示,覆盖率如图5所示。

4 结束语

现阶段,在软件测试领域,单元测试工作已得到越来越多的重视,但常常由于项目时间短、经费不足等原因导致软件单元测试工作搁置,所以明白软件单元测试的重要性,使用有效的单元测试方法,对保证铁路信号软件的质量具有重要的现实意义。基于此,本文结合理论实践,研究了铁路信号软件单元测试方法,并选取典型函数进行分析,可有效发现软件开发过程中存在的缺陷,及时改正,从而保证铁路信号软件的稳定性与可靠性。

猜你喜欢

单元测试测试用例铁路信号
铁路信号设备电路原理仿真教学系统设计及应用研究
基于LDA模型的测试用例复用方法*
无线通信系统铁路信号安全传输分析
软件测试中的测试用例及复用研究
浅谈铁路信号信停与信号电路导通施工
铁路信号设备维护与安全机制分析
一年级上册第五单元测试
一年级上册一、二单元测试
测试工时受限的测试策略研究
第五单元测试卷