浅析回归测试的策略
摘要:软件回归测试是软件工程中不可缺的一部分,是保证软件质量的重要手段。
本文描述了回归测试类型和回归测试策略,重点分析了结构化软件和面向对像软件的回归测试中常用的一些策略
关键词:回归测试;策略;选择性回归测试
中图分类号:tp311 文献标识码:a 文章编号:1007-9599 (2013) 04-0000-02
1 引言
无论在软件生命周期的哪个阶段,当软件系统中的缺陷被发现并修改后,软件就发生了变化,为了验证发现并修正的缺陷在新版本中是否再重现或是否带来新问题需要做回归测试。
回归测试的目的是在源程序代码被修正后,对修正和变修正受影响的程序重新进行测试,以便达到与全部测试相同的测试覆盖效果。
回归测试需要确定哪些测试数据与被修改的程序有关,通常有效地确定修改及修改受影响部分及选择再测试的用例是比较困难的,因为修改任何一个错误必须更改源代码,这样就有可能影响这部分源代码所控制的功能及与之相关联的部分。
因此,修正的错误时不仅要对修改的错误重新测试,之相关联模块也要测试
2 回归测试策略
回归测试策略有两种:一是“重测所有”,运行所有用例集,以
验证修改的正确性及其影响。
这是一个保险的策略,在理想情况下(有充足的测试资源),此方法是首选。
但匮乏的测试资源和较短的开发周期让全部回归策略有一定的局限性;二是选择性回归,通过选取测试子集来确认相应的修改是否引入新的问题,这样可以降低时间要求。
选择性回归的方法分为两种:一种是安全选择法,另一种是最小化选择法。
安全选择法,选择的case能覆盖所有受影响的程序;最小化方法选择case的最小子集,使得每一个受影响的程序部分至少被覆盖一次。
对于选取测试子集的方法,关键在于两点:一是找出软件版本修改点,二是程序中可能受影响的部分,在整理出原码中的各关系后,再考虑如何从case库中选取测试子集。
3 回归测试用例分类
3.1 根据软件规格说明修正的情况,可分为渐增性回归测试和验证性回归测试。
渐增性回归测试是针对软件规格说明修改进行的,测试中只要需求发生了改变,或者进行了适应性维护或完善性维护,都需要修改程序规格说明来体现功能上的变化,同时还需要设计新的用例。
验证性回归测试是指如果测试中出现编辑阶段或前期设计的缺陷,或出现了修正性维护不需要改动软件规格说明,对修改后的程序可以重用原先程序的用例进行回归测试。
3.2 根据测试用例集的选择方式,可分为全部回归和选择性回归。
全部回归:重新执行用例库中的所有的用例,这种方法基本没有风险,也可能
不会发现新问题,适用于规模小的系统或变更较大的情况。
但对于测试数据较大,系统改动较小的情况,重测所有的用例可能会消耗大量的时间和资源,有时是无法实现的。
选择性回归:从已存在的用例集中选择一个子集重新测试修改的程序。
这种方法即可以降低开发成本,又能保证系统的质量。
选择性回归测试方法有很多如:符号执行技术等。
这些技术是通过再分析程序结构,找出程序中的改动部分与原有部分的关系,选取关联最大的部分设计用例。
3.3 根据软件体系结构,可分为结构化软件和面向对象软件回归测试。
结构化软件回归测试:是以模块功能和处理过程软件开发过程中对结构化软件测试时,按测试阶段的不同分为:单元测试、集成测试和系统测试等。
与之对应的回归测试级别:单元级别、集成级别和系统级别的回归测试。
面向对象软件回归测试:面向对象软件是由各种类的对象构成的,对面向对象的软件进行回归测试时可以使用选择性回归测试的方法,通过构造程序或类的依赖图,再依据依赖图决定选择需要回归测试的用例。
4 结构化程序的回归测试
分别介绍结构化程序的三种级别回归测试方法:
4.1 单元级别的回归测试。
单元测试也称模块测试,根据详细规格说明测试每一个功能相对独立的程序或代码,保证单元的功能正确性并满足规格说明。
yau和kishimoto开发了一种基于输入分区的回归测试方法。
输入分区方法是根据程序规格说明的代码信
息,将模块的输入区域分为一系列的输入分区。
然后输入分区又分成两个输入分区pc,和ps,其中pc和ps分别从代码和软件规格说明产生。
采用这种方法可以保证每个新的或改变的输入分区至少被执行一个用例。
用例的选择可参考:规格说明的因果图和测试信息表。
代码分区对应的是规格说明对应的代码中的路径,每条路径选择一个用例。
规格说明分区是因果图中输入的各种可能组合。
如果选择的用例不能满足重新测试标准,就需要生成新的用例。
4.2 集成级别的回归测试。
把各个模块组装成一个系统,针对这个系统的测试我们称为集成测试。
集成级别回归测试是针对测试过的子模块重新测试,以保证集成中不会导致自身及其它模块的不稳定。
在此我们引入防火墙的概念,防火墙的作用是把修改影响的模块与其它模块代码分开。
我们把修改的模块、与修改模块有交互的模块放到防火墙内。
在构建防火墙的边界时需要包括两种变更:一是由于修改程序可能涉及的规格说明书的变更,另一个是代码的变更。
防火墙在概念上面易被接受,特别是在设计小改动情况下,只需要对防火墙内的模块进行测试,可明显提高测试的质量和效率。
4.3 系统级别的回归测试。
系统测试是对系统的所有元素(系统的软硬件、人机交互信息等)集成的验证,以保证整个系统的性能、执行强度、安全性和功能都达到了预期的要求。
贝尔实验室开发了testtube (一种系统级别回归测试)工具,它采用的是选择性回归策略,分析用例与测试系统之间的覆盖关系,进而选择相应的case子集。
此工具将各个软件系统细分为代码实体,在监控每条case执行的基础上,分析代码实体与测试系统的联系,进而分析出测试覆盖的代码实体子集。
对于具体的代码段而言,每条case与可能覆盖的函数定义、类型定义、宏定义等相关联。
当与一条case相关联的代码实体发生变动时,选择相应的case作为系统级别回归用例。
5 面向对象程序的回归测试
面向对象程序的修改,其基本单元是类,对类的修改分为三类形式:(1)修改方法内容,不影响类中方法之间的关系;(2)对方法的修改,影响类中方法间的关系,(3)类或类中方法的修改影响了其它类。
测试时,形式(1)只需要对修改的方法重新测试,其它用例不变;形式(2)只需重测修改的类,与其它类相关的用例不变;形式(3)修改对整个系统的影响很大,测试时,需要构造足够用例进行充分测试,并对所有与该方法有依赖关系的类,都必须构造新的用例进行测试。
kungetal提出了一种基于对象关系图的测试模型,它能捕捉到所有的类以及各个类之间的依赖关系(如继承关系等)。
一种逆向工种方法从面向对象的程序中提取所有类及类之间的依赖关系并以关系图表示。
通过比较两种不同版本的源程序可自动识别程序的任何变化。
根据变化可以确定哪些类已修改,通过类之间的依赖关系确定修改所影响到的类,测试时只需要重新测试这些变化和修改所影响的类。
6 结束语
回归测试是重复性的活动,容易让人感到厌烦,影响测试效率,为了提高回归测试效率,需要采用一些测试策略。
本文分析了适用于修改较大的重测所有策略和适用于修改较小的选择性回归测试
技术,然后分析了结构化软件和面向对象软件中采用的选择性回归测试技术,在实际应用中起到了一定的指导意义。
参考文献:
[1]李丹,刘杰.软件回归测试及其实践[j].电子产品可靠性与环境试验,2001(6):23-24.
[2]马雪英,姚砺,叶澄清.回归测试自动化工具研究[j].计算机科学,2005,32(3).
[3]郑亚玲,胡和平.回归测试策略的新领域[j].计算机应用研究,2000(6):23-25.
[作者简介]张永红(1978.7-),性别:女,民族:汉,籍贯:江西吉安人,研究方向:计算机软件测试。
许林(1980.3-),性别:男,民族:汉,籍贯:江苏新沂人,研究方向:计算机软件测试。