基于组合测试模型的系统测试工具设计与实现

2019-06-12 06:53余童兰张曌寰徐浩杰
科技视界 2019年9期
关键词:测试工具测试用例用例

余童兰 张曌寰 周 进 徐浩杰

(1.南华大学计算机学院,湖南 衡阳 421001;2.中国核动力研究设计院核反应堆系统设计技术重点实验室,四川 成都 61004)

0 引言

近年来,软件测试越来越受重视,随着软件自动化测试技术日渐成熟, 国内软件对测试的要求也在逐渐提高, 软件质量和测试效率提升成为软件工程领域一个重要的课题[1];另一方面组合测试模型等可以带来可观测试效率提升的新兴软件测试理论在实际测试工具中的应用还十分有限[2]。

随着核电国产化的不断发展,核电厂核反应堆的安全问题已经引起业内人士的广泛关注。 反应堆保护系统(Reactor Protection System, RPS)作为在核反应堆运行过程中对反应堆进行保护的第一道防线,也在不断地研发和完善中。 我国首套自主核电软件包和一体化软件集成平台(NESTOR)也以用户界面友好、应用灵活性强、且具有很强的纠错能力著称。其开发的RPS 不仅能对运行中的常规异常监测数据进行报警, 以燃料性能模块为例,统计堆芯功率分布、 冷却剂温度分布等诸多参数的同时, 还能基于诸多参数换算出壁表面热流密度等值,在可能带来风险的操作进行前给出友好的预警和提示,为反应堆提供更加全面的保护[3-4]。

多维度、 严格的参数验证算法也为其组成软件的测试带来了挑战。 尤其是作为与人机交互验证直接相关的系统测试, 不仅要求对照设计说明书进行常规功能性的系统测试, 还要求基于各种场景对输入卡值进行必要的参数替换和用例演化, 以达到更高的测试可靠性和全面性。 数量较大的输入卡参数也给其系统测试带来了较大的工作量和较大的执行难度, 现有的常用测试工具很难应对此种强度下的系统测试[5]。 于此同时, 近年来以组合测试为代表的测试理论研究日渐成熟。 组合测试是一种科学有效的软件测试方法,该方法旨在通过一定算法用总体数量较少的测试用例有效地检测和衡量软件系统中各个因子以及因子间的相互作用对整个系统的影响[6]。

目前此类专用软件的系统测试由于常见测试工具的兼容性问题, 多数系统测试用例执行大量依赖于人工,测试人员的工作量大,而又效率低下。

结合上述现状,迫切需要一种具有广泛适用性,同时能合理高效辅助用例设计, 合理控制测试用例集大小, 且能高效复用执行的系统测试工具。 设计和开发一个基于组合测试模型的系统测试工具有助于提高资源利用率,减少资源占用,缩短系统测试所用时间,使测试人员的注意力更多地集中到真正有效的软件质量管理上来

1 组合测试模型和系统测试概述

1.1 组合测试

它是一种科学有效的软件测试方法, 该方法旨在通过一定算法用总体数量较少的测试用例有效地检测和衡量软件系统中各个因子以及因子间的相互作用对整个系统的影响[7]。 实践证明组合测试相比传统枚举测试, 在消耗资源相对较少的前提下, 具有较高的错误检测能力。

假设影响待测单元的因子共有n 个, 其因子集合为 F={f1,f2,…,fn},设 因 子 fi ∈F 经 过 等 价 类 划 分 等前期处理后包含 ai 个合法取值,即其因子取值的集合为Vi(1 ≤i ≤n),不妨设Vi={0,1,…,ai-1}。 称一个n 元 组 t=(v1,v2,…,vn)(v1 ∈V1,v2 ∈V2,…,vn ∈Vn)为一条测试用例。 称一个由多个类似 n 元组所构成的集合T{t1,t2,…,tx}为待测单元的一个测试用例集。

组合测试研究的核心问题之一就是组合测试用例的生成问题, 即如何针对具体待测单元, 在满足组合覆盖指标的前提下, 如何生成规模尽可能小的测试用例集, 以便在保证在错误检测能力达到要求的前提下, 尽可能有效地减少测试用例总数, 进而降低测试成本[8]。

1.2 系统测试

它是对整个系统的一类测试,将硬件、软件和操作人员看作一个有机整体, 检验其是否存在不符合系统说明书之处, 是否满足用户规定的需求。 此种测试可以发现系统分析和设计中的错误[9]。

对于经过集成测试的软件, 系统测试主要包括功能测试和健壮性测试两大类。 功能测试主要测试软件系统的功能是否正确, 是否满足需求说明书的要求。正确性是软件最重要的质量因素, 因此功能测试在系统测试中必不可少。 健壮性测试主要测试软件系统在异常情况下能否正常运行的能力。 健壮性有容错能力和恢复能力两层含义。 典型的健壮性测试包含压力测试、恢复测试、安全测试、等几类。 压力测试是测试软件系统在正常数据量以及高负荷等情况下是否还能正常地工作,而不产生严重、非预期的错误。 恢复测试主要关注可能导致软件运行失败的各种情况, 并验证其恢复过程能否正确执行, 能否在规定时间内被更正,在特殊条件下, 系统也应该具备容错能力。 安全测试是测试软件系统安全措施是否完善, 能不能保证软件系统不受非法侵入影响[10]。

2 基于组合测试模型的系统测试工具设计

根据系统测试需求, 分析系统测试工具功能需求划分为如下几个部分:总控模块、系统通信模块、初始化模块、环境描述与部署模块、用例生成模块、用例衍生模块、用例执行模块、报告生成模块、验证模块。 整个系统模块划分如下图1 所示

图1 系统测试工具的功能需求划分

结合需求分析与工具开发环境现状, 基于组合测试理论的系统测试工具的总体设计主要分为用例管理、用例生成、用例衍生和用例执行四大模块。

2.1 用例管理模块

启动管理器:作为整个测试工具的引导,处理各个执行参数,并于用户直接交互。

用例目录初始化功能: 按照用户的参数选择将所选目录格式化为对应用例模版, 方便后续的用例生成, 被初始化的各个目录间录制环境相互独立, 互不影响。

数据字典: 包含整个工具的语言文件存储和参数存储等。

用例模版:主要包含处理用户操作的各个操作类。

2.2 用例生成模块

执行记录捕获功能: 监听并捕获待测系统执行和用户对待测系统的各种操作、 被操作的节点信息、以及被操作对象的状态,并记录至预生成用例。

执行记录定制功能: 支持用户在操作被测系统过程中添加、 修改自定义节点信息和增加断言信息,并追加至预生成用例。

执行记录校验功能: 在用户操作被测系统和定制用例的过程中, 对预生成用例进行实时执行和状态校验。 用以保证捕获和定制所生成用例的完整性和可用性。

生成测试脚本功能:将测试用例封装成测试脚本。包含完整用例信息和断言状态。

2.3 用例衍生模块

用例节点拆解功能: 将基础测试用例拆分成各种类型节点和对应节点值列表,便于衍生。

生成衍生节点列表功能: 利用组合测试算法对节点列表进行重组,生产衍生节点列表。

生成衍生用例功能: 将组合测试算法所得的每组节点值封装至基础测试用例,存储至对应用例组。

2.4 用例执行模块

执行环境搭建功能: 根据用户选择的参数搭建对应用例执行环境。

测试用例执行功能: 根据用户选择在指定环境执行单个、部分组、全部测试用例,并生成执行日志。 为保证执行效率,需要具有并发执行。

测试报告生成功能: 根据执行日志情况生成测试报告。 包含详细的节点执行信息和完整清晰的断言结果。

3 基于组合测试模型的系统测试工具运行实例

3.1 实验步骤

首先输入测试脚本名开始用例录制, 在录制过程中可根据需要, 使用UI Recorder for Chrome 插件对用例进行定制。 第二,完成用例录制后,执行用例节点拆解。 并根据测试需求对输入卡列表进行扩增直到完成测试用例集生成。 第三步,执行用例衍生。 最后进行测试用例执行环境搭建,获取测试报告。

3.2 测试结果

如下图4.2 所示, 对某私有云测试模块功能测试共生成4 个手工测试用例,40 个衍生测试用例, 覆盖率100%。 单用例一次执行通过率100%, 用例可用性100%

同比之下, 现有系统测试工具, 以使用最广泛的Selenium Recorder 为例,为达到同样的覆盖率,共需手工录制40 以上个测试用例工作量对比悬殊;为达到同样效率, 整体测试用例设计需要进行严密排布, 根据经验统计,10 左右量级的并行事件单凭肉体处理就已经十分极限; 在此基础上额外借助辅助排布工具,又会同时引入附加时间成本和误差; 除此之外, 手工用例的复核和复用又是一项艰巨工程。 反观在Puirecorder工具方案中, 测试人员的注意力仅需集中于基础的、功能性的用例设计, 以及用例演化的数量级控制上,用例的复核仅需对基础用例负责, 基础用例和衍生用例也由严谨组的逻辑和组合保证其高可用性。 整体用例的高覆盖率对健壮性测试也有积极意义。

4 结束语

本文在组合测试模型的基础上, 通过功能测试衍生性能测试, 通过性能测试强化健壮性测试, 进而通过三者的互相增进,回到提供整体系统测试中来。

最 终 实 现 的 测 试 工 具 Puirecorder, 对 windows、macos、类unix 系统具有普遍适配性,用例录制易用、高效, 对测试用例集的合理设置和生成具有指导能力,用例执行环境包含多个通用平台, 生成的测试报告包含多种常用格式, 内容详细易用, 能满足系统测试中的大部分需求。

使用此类测试工具, 能使得测试人员把测试精力真正集中到系统测试资源的合理布置上来, 减少了手工测试的消耗以及一些不必要的简单重复劳动消耗。

结合这些成果和优点, 可以证明组合测试模型在系统测试中的应用是合理、 可行的。 不同领域测试工具和算法的交叉组合与合理利用, 对自动化测试发展有着相当大的意义。 课题和工具还有待进一步完善,自动化测试的不断发展也必将为软件工程领域的整体发展注入更多的新鲜血液。

猜你喜欢
测试工具测试用例用例
UML用例间包含关系与泛化关系的比较与分析
UML用例模型中依赖关系的比较与分析
基于SmartUnit的安全通信系统单元测试用例自动生成
联锁软件详细设计的测试需求分析和用例编写
Http并发连接测试工具
從出土文獻用例看王氏父子校讀古書的得失
基于混合遗传算法的回归测试用例集最小化研究
手车式真空断路器回路电阻测试电流线接头研究
福禄克推出先进的连接式测试工具系统
基于依赖结构的测试用例优先级技术