赖 琴,张亚东,饶 畅,郭 进
(1. 西南交通大学 信息科学与技术学院,成都 611756;2. 重庆交通大学 交通运输学院,重庆 400074)
列车运行控制(简称:列控)系统是典型的软件密集型安全苛求系统,列控车载设备作为列控系统的关键组成设备之一,主要实现列车运行安全防护的功能,一旦发生软件失效可能会导致灾难性的后果,因此需开展严格测试保证车载设备软件质量[1]。列控车载设备测试多依赖于专家经验,测试人员根据列控车载设备需求规范编制测试案例,向车载设备输入测试内容,观察其输出结果,验证设备功能[2]。
目前,列控车载设备测试过程中缺乏高效的案例辅助管理工具,存在案例覆盖的测试需求和测试案例管理不便、测试案例编制效率不高、测试案例统计分析依赖人工等问题。因此迫切需要结合数据库、计算机等技术提升列控车载设备测试过程案例管理的信息化水平。
本文针对现有问题,设计了列控车载设备测试案例辅助管理工具。该工具提供基于规格测试、模型测试和组合测试3 种方法编制测试案例,自动统计案例相关数据,根据测试结果记录生成测试报告文档等功能。使用该工具开展测试,降低了人为因素带来的差错影响,提升了测试案例编制效率与管理维护水平,进一步规范车载设备的测试流程,为其他铁路信号设备测试案例管理提供参考。
列控车载设备仿真测试平台包含仿真数据生成平台、接口仿真设备平台与被测车载设备3 个部分,其架构,如图1 所示。
图1 列控车载设备仿真测试平台架构
(1)仿真数据生成平台:用于生成车载设备运行过程中的环境仿真信息。列车操纵台模拟司机速度、运行方向等操作信息;数据配置单元产生应答器报文、轨道电路码序等仿真数据;车辆模拟器根据列车数据实时计算列车速度、位置等信息;地面模拟器根据车辆速度位置信息计算应答器与轨道电路信息的接收时间等信息;测试控制单元实现测试过程监控,传输仿真数据并接收车载设备状态信息。
(2)接口仿真设备平台:将仿真数据转换为标准信号接口数据,发送给待测车载设备,同时将接收被测车载设备状态信息转发给仿真数据生成平台。
(3)被测车载设备:根据接口输入数据,配合DMI(Driver Machine Interface)界面人工操作,执行动态仿真测试,输出车载状态信息。
本文主要关注车载设备的系统测试过程,测试流程,如图2 所示。
图2 车载设备测试流程
车载设备测试流程通常分为测试需求提取、测试案例编制、测试执行和测试总结4 个阶段[3]。
(1)需求提取阶段测试人员分析车载设备相关技术规范,提取被测设备的功能点,确定车载设备测试需求[4]。
(2)对测试需求进行细化,编写测试案例。
(3)测试人员将测试需求与测试案例作为测试指导文件,在列控车载设备仿真测试平台配置相关数据,控制列车运行,执行测试,验证车载设备功能。
(4)记录测试结果,并形成测试报告。
开发人员依据测试结果修复缺陷后,测试人员以当前测试案例为基础开展回归测试,重复测试流程,确保缺陷被修复且现有功能模块依旧正常。测试案例可指导实施列车运行控制系统的仿真测试执行工作;合理管理测试案例能够提升测试前期准备与测试后期的分析整理效率,并规范管理案例相关的数据。
软件测试是通过软件自动运行或人工操作检查软件潜在的各种错误与缺陷,确保软件各项指标参数达到规定需求的过程[5],相关定义如下。
定义1(测试需求):测试需求表示软件系统的一个基本测试单元,例如一个功能项或一个被测特征[6]。
定义2(测试案例):测试案例是待测软件的一组输入数据,用于验证是否满足某些特定测试需求。
列控车载设备的测试案例遵循欧洲列车控制系统(ETCS,European Train Control System)测试规范Subset076 格式要求[7],包含了案例基本信息、初始条件、初始接口条件、测试步骤、结束条件、结束接口条件等信息。
定义3(覆盖):若测试案例能够验证某项测试需求,称测试案例覆盖该测试需求。
(1)测试需求管理。测试人员能直观查看测试案例所对应的测试需求,支持测试需求增删改查,自动校核测试需求避免出现重复录入的情况,并提供测试需求文档导出功能。
(2)测试案例辅助编制及管理。工具提供基于规格测试、模型测试和组合测试方法的新增测试案例,提升测试案例编制效率。此外,测试人员还能便捷利用工具对测试案例进行查阅修订并自动校核案例库数据,支持自动导出标准格式测试案例。
(3)测试统计分析。工具能根据需求与案例信息自动完成相关数据的智能统计,实现数据可视化展示并实时更新,避免测试案例编制不完善造成漏测。支持测试结果记录并按照固定模板输出测试报告,降低人工整理分析测试报告的复杂度与工作量。
根据功能需求分析,本文对工具进行功能模块划分,如图3 所示。
图3 列控车载设备测试案例辅助管理工具功能架构
3.2.1 测试需求管理
测试需求包括所属技术规范、需求编号、需求项、需求内容等信息,存储于MySQL 数据库。工具测试需求管理模块主要包含以下内容。
(1)需求增删改查:支持单条或以CSV 文件形式批量增加需求、批量删除、修改及查询测试需求。使用JDBC(Java Database Connectivity)技术访问需求数据库完成上述操作。例如批量删除测试需求,与数据库建立链接,执行sql 语句“delete from req_table where req_num=?”,依次查询数据库中被选中的需求并删除,刷新界面显示剩余需求信息。
(2)测试需求校核:校核需求数据库是否存在重复需求。
(3)需求文档导出:自动导出需求存档文件。
3.2.2 测试案例辅助编制及管理
测试案例具有规范的格式,利用MySQL 数据库存储。工具对案例实现统一管理。
(1)测试案例编制
测试案例编制模块支持基于规格的测试方法、基于模型的测试方法与组合测试方法,实现以下4 种功能。
①模板调取解析:支持基于规格的测试方法数据库模板调取,数据库主要保存等价类划分法和边界值法对速度、距离等参数的划分结果;支持基于模型的测试方法对UML 状态图模型文件调取解析,提取状态、事件等信息存储于哈希表;支持组合测试模型txt 文件解析,提取参数、参数取值、约束等。
②模板可视化:以列表形式可视化基于规格的测试方法调取的模板信息;以有向图可视化UML 状态图模型;以树形图展示组合测试输入域模型。
③模板修改:支持基于规格的模板数据库与组合测试输入域模型修改保存。
④测试案例生成:基于规格生成测试案例,工具提供与待测功能匹配的案例模板快速编制案例。基于模型生成测试案例以文献[8]提供的测试路径生成算法为基础,支持节点覆盖、边覆盖、边对覆盖或主路径覆盖准则生成测试路径,实例化为测试案例。组合测试方法生成测试案例时,工具提供最优覆盖数组重构算法[9]、IPOG 算法[10]与PICT 算法[11],可选择不同覆盖深度一键生成组合测试用例集,导入组合测试案例模板,工具通过关键字替换技术自动生成组合测试案例集。
(2)案例查询修订
支持修改、批量删除与模糊查找案例。
(3)测试案例校核
检查测试案例是否重复,主要检查案例编号、案例目标等内容,工具界面将校核结果进行反馈。
(4)案例文档导出
基 于Apache POI 技 术 替 换ETCS 测 试 规 范Subset-076 案例Word 模板数据,导出案例归档文件。
3.2.3 测试案例统计分析
本文采用以下指标进行测试案例分析:①测试需求覆盖度:计算当前测试需求覆盖情况;②测试需求与测试案例追踪矩阵:双向追溯,便于查漏查错;③测试案例分类统计:将案例按功能、编制方式及需求项进行分类,统计案例覆盖情况。
测试统计分析模块划分为以下子模块:
(1)指标统计:收集分析需求与案例数据,基于JavaFX 技术将测试案例分析指标以图表、文字等形式直观展示,供测试人员参考,需求或案例一旦发生变动,可自动关联更新。
(2)测试结果记录:工具支持对未通过测试的需求或案例标记,备注测试结果。
(3)测试报告导出:包含测试问题报告、案例分析指标报告、需求-案例双向追溯矩阵等文件,将所得图、表等数据基于Apache POI 技术按规定格式导出。
通过充分考虑车载设备的主要测试流程,结合工具功能管理特点,设计了测试需求提取、测试案例编制、测试案例分析3 大核心业务流程。
3.3.1 测试需求提取流程设计
测试人员依据车载设备技术规范等文档,提取涵盖功能需求、场景及接口等方面的测试内容;将测试需求详细信息分条或批量导入需求数据库;使用工具校核重复查看校核结果;修改完善测试需求;导出需求文件。
3.3.2 测试案例编制流程设计
车载设备测试最关键的业务流程为测试案例编制,如图4 所示。
图4 测试案例编制业务流程
该阶段主要业务流程如下:测试人员根据测试需求与相关技术文档,选择工具中合适的测试案例编制方法,调取相应模板并支持进行修改,根据模板生成测试案例,校核后导入案例数据库,测试人员利用工具实现案例库查询修订,保证编写正确,导出规范的案例文件。
3 种测试案例编制方法在模板调取及生成时的业务流程存在一定区别,具体情况如下。
(1)基于规格的测试案例编制
基于规格的测试方法依托人工经验,结合边界值法或等价类划分法编写测试案例逐条覆盖需求规格,应用于实际测试。具体业务流程:明确待测需求规格,人工提取测试功能特征;确认参数,若为车速或距离等连续性数据,调取数据库中相关参数划分模板;根据新增案例界面提示,快捷编写测试案例。
(2)基于模型的测试案例编制
针对较为复杂的功能或场景时,可使用基于状态图模型的方法编制测试案例。具体业务流程:测试人员利用现有公开建模工具(例如Papyrus)新建状态图模型,检查无误后保存.uml 状态图模板文件;导入模板,工具解析模板并可视化展示;测试人员选择合适的覆盖准则;利用耦合在工具中的测试路径生成算法自动生成测试路径,检查路径是否符合要求;实例化测试路径为测试案例。
(3)组合测试案例编制
某些功能或场景测试可能存在参数间交互组合,应选择组合测试方法编制测试案例。具体业务流程:测试人员提取待测功能或场景的参数、约束等信息新建组合测试模型;检查模型是否有误并修正,保存为模板便于复用;确认覆盖深度及组合测试用例生成算法;利用工具自动生成测试用例,检查用例是否满足要求;导入组合测试案例模板,工具自动替换关键词生成组合测试案例集。
3.3.3 测试案例分析流程
测试人员根据案例分析指标,检查追溯关系是否正确、需求覆盖情况是否完全;修订测试需求与案例;实验室仿真环境执行测试;记录未通过的需求、案例,备注车载设备存在的问题;导出测试报告系列文件。
本 文 利 用Intellij IDEA 2019 集 成 开 发 环 境 进行开发,基于Java 编程语言、MySQL 数据库与JavaFX 技术实现列控车载设备测试案例辅助管理工具。下面以CTCS-2 级列控车载设备实验室仿真测试为例,验证工具相关功能。
需求管理界面,如图5 所示,A 区为需求管理模块工具栏,B 区为需求列表,C 区为需求占比统计情况。点击需求导入/导出按钮,支持.csv 格式的测试需求文件录入/输出;C 区统计各需求项所含需求数及占总需求数的百分比;选中右方车载设备功能,查看对应需求。工具直观地实现了需求数据的管理。
图5 测试需求管理界面
编制测试案例支持3 种编制方法,举例如下。
(1)基于规格的测试编制案例。本文以CTCS-2 级列控车载设备速度监控功能测试案例编制为例进行说明。根据相关技术规范[12],明确当前需求规格为“棚速度监视区速度容限值的选取”。分析可知,不同模式对速度的限制范围不同。以PS 模式为例,选取边界值法开展测试,调取PS 模式边界值划分结果,如图6 所示。点击新增案例按钮,工具自动匹配预存的速度容限值测试案例模板,快捷编写案例。
图6 边界值划分结果
(2)基于模型的测试案例编制。本文以列控过分相场景为例进行说明,分析过分相场景流程,利用Papyrus 工具建立自动过分相的状态图模型,检查保存。点击工具浏览模型文件,将得到的.uml 模型文件导入工具并可视化,如图7 所示。选择边覆盖准则生成测试路径共4 条。以路径1(图7 中玫红色线条所标示)为例,实例化为测试案例:列车接收到应答器过分相预告信息,验证车载设备实现自动过分相控制。点击导入测试案例,工具反馈校核结果。
图7 基于模型编制测试案例
(3)组合测试案例编制。本文以编制FS 模式转SH 模式与OS 模式测试内容为例进行说明。利用工具新建组合测试输入域模型,如图8 所示,检查无误后保存为.txt 模板文件。选择覆盖深度为2,测试用例生成算法为IPOG,点击测试用例生成按钮,生成测试用例9 条,如图8 所示(1、2 为种子测试用例)。导入组合测试案例模板,生成测试案例并自动校核。
图8 组合测试编制测试案例
测试案例编制完成后,导入案例库进行管理维护,工具将自动统计相关案例指标,如图9 所示。测试人员根据分析指标修改完善测试案例。
图9 测试统计分析界面
随后开展车载设备仿真测试,点击工具栏测试问题记录按钮,记录测试结果,如图10 所示,最后导出测试问题报告。
图10 测试结果记录
本文提出了列控车载设备测试案例辅助管理工具,该工具不仅完成了对测试案例、测试需求的规范化管理,还提供一套科学的车载设备人工编制测试案例方法,显著提升了案例编制效率。工具自动统计测试案例分析指标,筛查未覆盖需求,克服了人工分析测试案例的局限性。论文工作对于提升车载设备测试过程管理的信息水平具有一定的价值和意义。