组合测试技术在测试用例设计中的应用与支持系统
2021-07-05刘善田张伟张燕王岳张彬
刘善田 张伟 张燕 王岳 张彬
(1.国家网络软件产品质量监督检验中心(济南) 山东省济南市 250000 2.济南市市场监督管理局 山东省济南市 250101)
完善有效的测试用例是保障软件测试质量的关键因素,所以测试用例设计活动历来受到重视,常作为一项重要的指标来评估测试活动的有效性。本文从工程实践角度对组合测试技术进行了深入探索并提出一种新型测试用例设计模式,使之融入更多测试用例设计技术手段,实现测试用例广泛的兼容,在此基础上设计开发组合测试支持系统,以服务于实际软件测试工程,并跟踪使用情况,对测试用例编制数据进行了统计分析,科学验证了组合测试及其支持系统的适用性和有效性,为组合测试大规模应用进行了工程示范和新型工具支持。
1 研究背景
组合测试领域一直是软件测试领域的研究热点,我国于2020年发布了关于组合测试的国家标准[1](GB/T38639‐2020),为组合测试技术的应用提供了重要依据和支持。组合测试就是对n 个参数产生组合测试用例,使得对于任意t(通常2 ≤t ≤n 较小的整数)个参数的所有可能的值域的组合至少被一个测试用例覆盖,称为t‐way 组合测试[3]。组合测试不仅解决了测试用例的自动生成问题,同时解决了测试用例的精简问题,因此对组合测试的研究和应用是非常有价值的,在软件测试理论没有突破性进展的背景下,应用组合测试是提升软件测试质量的快捷、经济之道。
但是,尽管组合测试有着诱人的应用前景,却始终未得到规模化应用,究其原因主要是以下方面:
(1)组合测试算法、技术、工具离散化,选择多反而难选择;
(2)市面上知名软件测试工具大多没有对组合测试的直接支持;
(3)组合测试的内涵,局限了其应用范围。
因此,深入理解组合测试,解决以上壁垒使组合测试技术无缝融合到软件测试活动过程中,为软件测试质量保障提供新手段具有重要意义。
2 测试用例设计模型及改进
我国颁布的GB/T 25000.51‐2016 《系统与软件工程系统与软件质量要求和评价(SQuaRE)第51 部分就绪可用软件产品(RUSP)的质量要求和测试细则》[2]标准中对测试用例的编制要素有着详细的说明,由于该标准等同采用了国际标准(编号:ISO/IEC 25051:2014)因此标准中给出的测试用例设计模型是具有广泛的代表性的。
结合工程实践和标准测试用例相关说明,测试用例设计模型可分为定义层和执行层两个层面,说明如下:
(1)定义层:测试需求,定义测试目标;测试用例规格定义测试用例的唯一性标识、系统的预期行为、测试用例的预期输出、结果解释的准则、用于判定测试用例的肯定或否定结果的准则、先决条件等[2];
(2)执行层:描述测试用例的详细实施步骤及该步骤执行所需要的数据。
基于该模型进行测试用例编制活动存在一定局限性,无法实现前文所述的组合测试技术的融合,也无法有效跟踪组合测试用例与测试需求、测试用例规格的关联性。因此,需要对上述测试用例设计模型进行改进。改进后的测试用例设计模型增加表示层,表示层在层次上介于测试用例规格和手工测试步骤之间,是测试用例规格的外在呈现形式。新的测试用例设计模型可以将功能测试、性能测试(或称效率测试)、安全测试等统一到测试设计活动中,使软件测试进程更加紧凑、可控,实现设计上的统一。
3 软件功能分解模型
一个软件功能总体上可以识别为表现层、服务层、数据层。表现层定义软件交互界面,可以识别功能输入、输出元素,并应用边界值、等价类等基本测试方法对元素取值进行定义,此层次上的分析工作将为实施组合测试提供基础;服务层可以识别功能对应的接口服务,可以是REST API,也可以是动态链接库、命令行等;数据层识别功能对应的数据操作对象,可以是文件系统、数据库系统等。
4 支持系统设计与实现
4.1 功能架构
组合测试支持系统包括项目实施端、测试管理端及运维端三部分,说明如下:
4.1.1 项目实施端
面向普通测试人员、项目管理人员、开发人员、质量保证人员等,服务于一个具体UTS 的测试实施管控,包括测试计划、测试方案、测试实施及测试报告四个功能。
(1)测试计划:定义UTS 测试任务,分配人力资源、时间资源及任务交叉约束等。围绕测试计划推进测试各环节活动是本系统的一个特色,有助于为项目管理人员提供“作战室”功能,实现资源统筹、任务统筹,及时做出行动指挥管理,智慧决策。
(2)测试方案:提供测试分析、测试规格说明定义、交互界面元素分析、服务接口分析、测试用例编制等功能,实现功能分解及分层用例设计,应用边界值、等价类分析等技术实现组合测试元素取值定义,启动组合测试后开启组合测试集成开发环境,系统自动读取界面元素及其取值,实现组合测试脚本的自动生成,选择系统支持的算法或工具自动生成组合测试用例。
(3)测试实施:测试实施模块根据测试计划灵活定义测试策略,并复制测试方案模块设计的测试用例形成执行镜像,这部分用例可称之为执行用例,将设计用例与执行用例分离,避免污染设计用例,同时可以保证测试用例执行的高度灵活性。
(4)测试报告:测试报告执行测试数据的采集与分析,并可以根据测试管理端定义的测试模版自动生成图文测试报告。
4.1.2 测试管理端
面向测试组织管理人员,测试管理端主要用于被测系统(UTS)管理及公共资源的定义及配置,包括UTS管理、测试标准、模版管理、日程日志、个人中心、自定义支持等。
4.1.3 运维端
面向平台维护者,提供组织管理、权限管理、用户管理支持。
4.2 技术架构
组合测试支持系统在技术架构上分为展现层、服务层、支持层及数据层(如图1所示),采用当前流行的微服务架构技术,实现系统各个服务单元的低耦合,可以灵活配置系统以实现不同的用户使用目标。
图1:支持系统技术架构
(1)展现层:展现层综合应用VUE、JQuery 等多种主流前端技术,为用户提供良好的应用体验。
(2)服务层:通过对软件测试全生命周期活动的综合调研分析,将软件测试各活动进行粒度切割,抽取共性,进行微服务封装。系统底层Web 支持使用Spring Cloud 及Spring Boot,Spring Cloud 封装了Netflix 公司开发的Eureka 模块来实现服务注册和发现,所有微服务在Eureka 服务注册服务中心完成注册,对外提供各项功能服务。
(3)支持层:支持层融合多种底层技术,用于支持系统业务流程及数据存储需求。为保障系统性能,本系统采用前端缓存、后端缓存等多级缓存技术,为系统带来高效的访问体验。
5 支持系统应用案例
组合测试支持系统在核心银行系统的功能测试期间进行了大范围应用,本次应用主要用于核心银行业务系统的贷款模块的功能测试,贷款业务是核心银行业务系统中的核心模块,业务最复杂,选择在贷款模块中大范围应用组合测试技术具有重要的示范意义。
5.1 组合测试集成开发环境
测试人员在边界值分析、等价类划分的基础上编制组合测试模式文件。系统提供智能语法高亮编辑器,左侧是模式文件编辑区域,支持PICT[4]语法高亮显示;右侧区域是工作区,包括以下部分:元素标签显示交互界面分析获得的输入元素及取值规则;信息标签定义当前脚本的基本属性,如名称、版本、适用组合测试工具或算法;版图标签提供简单的版本管理功能,可实时显示当前模式文件的版本分支图。
5.2 组合测试用例
系统应用WEB 即时通讯技术,可以快速推送用例生成结果给终端用户。以PICT 为例,在模式文件编辑就绪后选择组合工具PICT,设置组合深度及随机数,执行后系统调用后台服务,自动生成组合测试用例,并将组合测试用例生成结果推送给前端用户。
5.3 数据分析及效果比对
以贷款业务编号为3001 的功能项为例,在第一阶段通过人工编制测试用例获得了30 个正向用例(正常业务用例)、29 个负向用例(违反业务规则或者数据约束的异常用例),使用PICT 组合测试技术自动生成测试用例,从表中数据可见在组合深度为2 的情况下,已完全覆盖了人工编制用例数量(如表1所示)。
表1:3001 用例比对
将贷款业务的测试用例编制数据与其他功能进行横向比对(如图2所示),贷款业务的测试用例数量也处在前列,证明组合测试技术在用例生成方面完全是可靠的。
图2:核心银行系统测试用例数量横向比较
6 结语
本文对组合测试技术在大型应用系统中的应用进行了实际深入探索,验证了其有效性和可行性,在此基础上设计开发了组合测试支持系统。综合国内外最新研究成果,并对同类软件进行了比对分析,创造性提出全新用例设计模型,与现行软件测试技术进行有机融合,既为组合测试技术的落地应用开辟了空间,也带来更好的用户体验,使软件测试人员可以在一个集中、统一的平台上应用组合测试技术实现复杂的测试用例设计工作,使测试更科学严谨、测试覆盖度更高。