APP下载

大型软件回归测试用例选择优化策略

2016-05-25夏同飞

测试技术学报 2016年2期
关键词:测试用例软件测试

夏同飞,郑 浩

(1. 国网信通产业集团安徽继远软件有限公司,安徽 合肥 230088; 2. 国网安徽省电力公司,安徽 合肥 230061)



大型软件回归测试用例选择优化策略

夏同飞1,郑浩2

(1. 国网信通产业集团安徽继远软件有限公司,安徽 合肥 230088; 2. 国网安徽省电力公司,安徽 合肥 230061)

摘要:在软件回归测试时需要制定测试策略,选择有效测试用例进行测试以避免测试的盲目性. 针对大型软件回归测试用例的选择问题本文提出一种新的选择方法并对其进行算法设计和实现. 本文运用Uml用例图来描述系统功能模块间的关系,将UML图转换为有向图并通过有向图的遍历算法输出回归测试时需要测试的模块. 通过实例研究表明,运用此方法能够显著提高回归测试中测试的效率和准确性,在保证了回归测试覆盖度的同时减少了测试的冗余度.

关键词:回归测试; 测试用例; UML用例图; 软件测试; 黑盒测试

在软件研发过程中设计人员通过架构设计将软件系统分割为多个功能模块,但由于需求变更或缺陷修复经常要对某些代码进行修改,而大型软件有多个功能,它们之间有各种关联关系,仅仅测试修改的模块是不够的,需要进行所谓的回归测试. 回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误[1]. 回归测试在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段都会进行多次回归测试. 据估计,回归测试在整个测试预算中占80%,在软件维护中占50%[2]. 如果对回归测试用例不做选择与优化将给软件测试工作带来大量重复无效的工作,影响测试人员工作兴趣与发现问题的敏感度. 在渐进和快速迭代开发中,新版本的连续发布使回归测试进行的更加频繁,而在极限编程开发模式下,更是要求每天都进行若干次回归测试[3]. 因此,通过选择正确的回归测试策略来提高回归测试的速度和有效性是非常有意义的.

回归测试的目的一是要对新修改的部分增加测试用例重新测试,二是测试其他模块是否会受到影响. 在回归测试开始前测试人员一般已有一个用例库,对于大型软件模块众多,每次回归测试执行所有模块测试用例是没有必要也不现实的. 而凭个人经验选择需要测试的模块又是不够科学可靠的. 此外测试人员一般无法得到软件代码,即使能得到,通过分析代码来确定模块间关系也需要大量时间,无法满足快速回归的要求. 需要有个简单而精准的方法找出修改模块会受到影响的模块进行测试. 本文介绍的重点内容即是通过算法自动在大量的模块中选择有影响有关联的模块来帮助测试人员选择回归测试用例.

1基于模块关系的回归测试选择方案

由于在快速迭代的回归测试过程中,大型软件代码庞大复杂,测试人员没有精力从代码级别研究修改带来的影响,有研究人员给出了基于模型的影响分析方法[4-7],这些方法跟踪模型各元素间的依赖关系来给出修改影响分析而不需要接触源代码,给我们一定的启发.

模块间相互关联往往是因为共用资源(资源可以是数据表,文件、 流向多个模块的数据等)或彼此的相互调用子模块造成的. 而有时模块修改造成的影响是要通过多个模块的传递才会影响到另一模块. 对于大型软件可能模块众多,关联模块路径较长,测试者在回归测试过程中没有太多时间研究所有关联模块,我们可以引入自动搜索功能来自动增加需要测试的关联模块. 对于这种分析多个元素相互联系方式的问题我们应该使用图结构来解决[8].

图1 关联规则示例Fig.1 The example of correlations rule

测试人员在软件设计时期可以得到软件架构设计文档,并且有充分的时间做产品分析,因此可以在此期间详细画出各模块间的关联关系图,基于各模块测试人员应该一起进行讨论,贡献自己了解的那一部分,共同完成该系统的各功能模块的关联关系图[8],如图1 所示. 当测试开始后测试工作进度紧张,测试人员可能在回归测试时没有时间研究规模庞大的模块关联图,此时应该使用计算机程序算法将图形化的模块关联关系抽取出来,针对某一模块的改动自动搜索出有影响的模块. 随着测试工作的深入,测试人员对大型软件越来越熟悉,每轮测试后应该对关联关系图进行更新和修正,以确保测试的准确性[9].

1.1解决方案基本思路

通过有向图的结构来确定各功能模块的关系,当一个模块发生变化时利用有向图深度优先遍历的算法搜索有关联的模块来确定需要测试的其他模块. 首先需要引入工具能形象快捷地画出各功能模块之间的关联关系,然后从图形文件中检索出关系结构,形成可供算法处理的数据结构,最后当某一功能节点变更后通过算法输出所有有关联的模块,相应增加关联模块的测试优先级,避免遗漏.

1.2工具选择

很多研究人员做了通过UML图模型自动生成测试用例的研究[10-13],这对解决这一问题提供了思路. 在软件工程中通常用UML来进行建模,而UML用例图和测试用例有一定对应关系,可以通过UML的用例图来实现测试用例对应需求模块的图形关系. 使用UML图中的用例图清晰指明各功能模块的关联关系,可以把这些功能模块作为图的顶点,关联关系作为图的边,图的顶点与测试用例所覆盖需求名称对应. Rational rose 工具作为业内通用UML工具且生成的MDL文件为明文形式很方便我们通过程序进行分析[10].

规则定义: 在用例图中模块之间关系相连,会相互影响,而影响也会传导,一个模块修改后通过关系传导会影响到多个模块. 我们要通过图结构的算法在错综复杂的关系中把修改一个模块所有受影响的模块全部搜索出来. 因此首先做如下约定.

约定一:由于共用资源(包括数据表,文件等)是产生模块关联的重要元素,所以必须在用例图中画出,对于如“更新数据库”等模块应该有一条指向数据文件的关系,而对于“查询数据库”之类获取信息的模块应该有一条关系从数据库/数据文件指向查询模块,以表示信息传递. 其他规则与UML用例图相同.

约定二:通过模块间的分解包含关系可生成一张多顶点的有向图,其中模块为顶点,关系为弧. 当一个模块修改后对于该模块通过关系弧能到达的所有模块称为该模块的直接影响模块组.

约定三:对于修改模块和其直接影响模块组以外的模块在图中做深度优先遍历,如果能到达修改模块或直接影响模块组中的模块则这些模块为间接受影响模块.

通过找出所有直接影响模块组和所有间接影响模块组可以确定回归测试需要测试的模块,从而根据实际情况选择回归测试用例以达到优化.

1.3操作步骤实例解析

以一个超市进货管理系统来说明操作方法.

1) 用例图描述:图2 所示用例图为该系统的部分用例图,分为3个角色:商品管理员,收银员,系统管理员. 商品管理员负责货品的管理,可以添加、 修改货品并将数据存入货品数据库,还可以查询存入的货品; 收银员给客户结账的时候系统会更新柜台商品数据库; 当货品缺货时收银员可以选择库存的货品上架,货品上架后,货品数据库减少一条记录,柜台数据库增加一条数据.

图2 系统UML图实例Fig.2 UML use-case diagram

2) MDL文件解析: 数据结构中,图必须有顶点和顶点间的弧,只有确定这两个要素才能运用到具体的算法中. 业界通用的UML工具rational rose当状态图画画好之后会存储在一个MDL文件中,通过文本形式打开MDL文件,可以看到图3所示的usecase节点结构. 这些Object UseCase 是需求细分模块,可以作为有向图的顶点. 图4为MDL文件中用例间的关联关系结构截图,显示了源点和终点可以作为有向图的弧可以作为图结构的弧. 从文件内容得出,可以通过编写程序读取MDL文件中的内容并存储到图结构的顶点和弧中来确定UML图的算法模型. 通过这种精确的方法可以在回归测试开始时清晰地分析出受影响的模块和不受影响的模块. 一方面避免漏测某些隐藏较深的关联模块,另一方面避免测试的盲目性,简化测试用例规模,能够加快回归测试效率,提高测试覆盖度,满足大型软件迭代开发和长期频繁维护升级的快速响应需要.

图3 MDL文件Usecese结构Fig.3 The Usecase struct in MDL file

图4 MDL文件关联关系结构Fig.4 The association struct in MDL file

3) 针对修改模块找出关联模块:当系统部分需求发生变化时,除了要测试变化的模块还需要同时测试关联模块.

4) 最后在制定测试策略时选择覆盖这些需求功能的用例来进行回归测试.

1.4实际验证

为了验证思路的正确性,通过一个软件研发中常见的情况予以说明.

1) 为了适应用户需求,系统的“新增货品”模块发生变更,增加了物品信息字段.

2) 测试人员通过本方法进行用例选择. 首先通过深度优先遍历找出有直接影响的模块,分别是:“填写货物信息”,“存入货品数据库”,“ 货品数据库”,“ 查询货品数据库”. 然后找出有间接影响的模块,方法是遍历所有模块顶点,如果与这些模块存在路径则标记为有间接影响的模块. 在本实例中有以下模块被间接影响:“进货管理”,“修改货品”,“更新货品信息”,“存入货品数据库”,“货品查询”,“显示货品信息”,“上架管理”,“显示库存信息”,“上架”,“删除货品数据库中的上架货品”.

3) 结果分析:当增加了物品信息字段,会对货品数据库结构产生直接影响,增、 删、 改、 查数据都需要做相应修改,因此用到这些功能的模块都需要测试,分析以上列出的直接影响和模块都涉及到了货品数据库,是正确的. 而“选择货品”,“更新柜台商品”,“结账”,“缺陷管理”等模块与新增货品没有联系,不需要测试,步骤中也没有列出. 因此思路是正确的.

4) 如果不用此方法选择测试用例,可能会出现以下情况: ① 测试人员只选择货品数据库直接关联的“进货管理模块”用例进行测试,而对“显示库存信息”,“上架”等受间接影响模快的测试则可能会遗漏,产生测试隐患. 而实际上货品数据库字段改变会影响所有查询、 显示该数据库信息的模块. ② 选择所有模块用例进行回归. 这样会把一些没有影响的模块也测试了,不但不能发现问题而且还影响了测试响应速度. ③ 分析所有模块源代码来选择测试用例,这将耗费大量时间与精力,这种方法在大型软件快速回归测试中是不现实的.

2策略实现

本文中的策略主要是通过图的深度优先算法来实现,因此首先要创建图的数据结构.

2.1数据结构

按照计算机基础课程数据结构中有向图的十字链表结构来实现策略,本文用Java语言描述

算法 1数据结构

2.2图的创建方法

算法 2图的创建

2.3根据系统变化情况输出有直接影响的模块

算法 3输出直接影响的模块

2.4输出受变化功能模块间接影响的功能模块

算法 4输出间接影响的模块

3结束语

本文通过UML图,理清了软件各模块的直接关系,研究了通过图的遍历算法输出修改一个模块可能会影响到的其他模块. 通过这个策略优化回归测试用例选择方法,提高测试准确性,避免测试漏测失误. 加快测试速度以适应快速多版本迭代的开发模式.

参考文献:

[1]Muccini H, Dias M, Richardson D. Towards software architecture-based regression testing[J]. ACM SIGSOFT Software Engineering Notes, 2005, 30(4): 1-7.

[2]Harrold M J. Reduce, reuse, recycle, recover: techniques for improved regression testing[C]. Proceedings of the IEEE International Conference on Software Maintenance. Netherlands: IEEE, 2009: 5.

[3]李丹,刘杰. 软件回归测试及其实践[J]. 电子产品可靠性与环境试验,2001,2(6): 23-25.

Li Dan, Liu Jie. Software regression testing and its application[J]. Electronic Product Reliability and Enviromental Test, 2001, 2(6): 23-25. (in Chinese)

[4]Briand L C, Labiche Y, Sullivan L O. Impact analysis and change management of UML models[C]. International Conference on Software Maintenance. Netherlands: IEEE, 2003: 256-265.

[5]Briand L C, Labiche Y, Sullivan L O, et al. Automated impact analysis of UML models[J]. Journal of Systems and Software, 2006, 79(3): 339-352.

[6]Tang P H. Design based change impact modeling for object-oriented software[D]. New York: State University of New York, 2003.

[7]王映辉,王立福. 软件体系结构演化模型[J]. 电子学报,2005, 3(8): 1381-1386.

Wang Yinghui, Wang Lifu. Research about model and ripple effect analysis of software architecture evolution[J]. Journal of Electronics, 2005, 3(8):1381-1386. (in Chinese)

[8]罗文兵,赵亮,赵洪宇. 基于图分析的测试用例集优化[J]. 计算机工程,2010,15(36): 92-96.

Luo Wenbing, Zhao Liang, Zhao Hongyu. Test suite optimization based on graph analysis[J]. Computer Engineering, 2010, 15(36): 92-96. (in Chinese)

[9]李宁,李战怀. 基于黑盒测试的软件测试策略研究与实践[J]. 计算机应用研究,2009,3(26): 923-926.

Li Ning, Li Zhanhuai. Research and practice of software test policies based on black box testing[J]. Application Research of Computers, 2009,3(26): 923-926. (in Chinese)

[10]张毅坤,施凤鸣. 从Rose的规约文件自动生成测试用例[J]. 计算机应用,2003,12(23): 12-16.

Zhang Yikun, Shi Fengming. Automatic test cases generation from rational rose specification files[J].Computer Applications, 2003, 12(23): 12-16. (in Chinese)

[11]苏翠翠,王晓军. 基于UML活动图的测试用例生成方法研究[J]. 计算机技术与发展,2010,8(20): 49-51.

Su Cuicui, Wang Xiaojun. Research on automatic generating test cases method based on UML activity diagram[J]. Computer Technology and Development, 2010, 8(20): 49-51. (in Chinese)

[12]蔡素梅,梅登华. 基于动态切片和UML图的回归测试用例生成[J]. 计算机工程, 2009, 8(35): 70-72.

Cai Sumei, Mei Denghua. Regression test case generation based on dynamic slicing and UML diagram[J].Computer Engineering, 2009, 8(35): 70-72. (in Chinese)

[13]叶皑,苏厚勤. 基于UML活动图的系统测试方法研究[J]. 计算机应用与软件, 2010, 12(27): 132-134.

Ye Ai, Su Houqin. Study on UML activity diagram-based system testing method[J].Computer Applications and Software, 2010, 12(27): 132-134. (in Chinese)

Regression Test Case Selection Stratege for Large Scale Software

XIA Tongfei1, ZHENG Hao2

(1. Anhui Jiyuan Software Co. Ltd., State Grid Information & Telecommunication Group, Hefei 230088, China;2. State Grid Anhui Electric Power Company, Hefei 230061, China)

Abstract:It is necessary to make the test strategy in software regression test and the effective test case can avoid the blindness of the test.,In order to solve the problem of how to choose valid regression test cases for large scale software, a new selection method and the algorithm design for this method were proposed in this paper. In this method,UML use-case diagram was used to describe correlations among modules of software system.After converting the UML diagram to directed graph, the modules which need to be tested will be output by using traversing graph algorithm during regression testing.It is validated through a case study that this method can improve the efficiency and accuracy of testing ,and avoid redundancy test case selection and keep the high testing coverage.

Key words:regression testing; test case; UML use-case diagrams; software tetsing; black box testing

中图分类号:TP311

文献标识码:A

doi:10.3969/j.issn.1671-7449.2016.02.003

作者简介:夏同飞(1979-),男,工程师,主要从事软件项目管理、 软件测试的研究.

基金项目:国家电网公司科技资助项目(2014-06-487-S)

收稿日期:2015-07-12

文章编号:1671-7449(2016)02-0106-08

猜你喜欢

测试用例软件测试
基于SmartUnit的安全通信系统单元测试用例自动生成
基于OBE的软件测试课程教学改革探索
航天软件测试模型构建与应用
基于MBD模型自动生成测试用例的软件测试方法
EXCEL和VBA实现软件测试记录管理
基于混合遗传算法的回归测试用例集最小化研究
基于社交网络的软件测试课程教学实践
基于需求模型的航天软件测试用例生成方法
软件测试工程化模型及应用研究
基于依赖结构的测试用例优先级技术