首页> 中国专利> 一种基于程序变更的回归测试用例集构建方法

一种基于程序变更的回归测试用例集构建方法

摘要

本发明公开了一种基于程序变更的回归测试用例集构建方法,其步骤为:(1)确定目标软件版本相对于历史版本的程序变更;(2)将历史版本的程序语句划分为变更语句集和非变更语句集,同时设定变更权重;(3)根据历史覆盖信息划分测试用例集;(4)约简划分后的变更覆盖集和一般覆盖集;(5)对变更覆盖集和一般覆盖集中的测试用例排序,同时合并两个集合,构成目标版本的回归测试用例集。本发明可广泛应用于大型软件系统在更新换代过程中的自动化测试和回归测试,充分利用历史测试信息和目标版本的程序变更数据,构建的回归测试用例集具有较强的针对性;能够在有限的测试时间和成本下完成高效率的软件测试。

著录项

  • 公开/公告号CN102750153A

    专利类型发明专利

  • 公开/公告日2012-10-24

    原文格式PDF

  • 申请/专利权人 南京大学;

    申请/专利号CN201210219280.6

  • 申请日2012-06-29

  • 分类号G06F9/44(20060101);G06F11/36(20060101);

  • 代理机构32237 江苏圣典律师事务所;

  • 代理人贺翔

  • 地址 210000 江苏省南京市仙林大道163号南京大学计算机系

  • 入库时间 2023-12-18 07:07:03

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-06-14

    未缴年费专利权终止 IPC(主分类):G06F 9/44 专利号:ZL2012102192806 申请日:20120629 授权公告日:20151125

    专利权的终止

  • 2015-11-25

    授权

    授权

  • 2012-12-19

    实质审查的生效 IPC(主分类):G06F9/44 申请日:20120629

    实质审查的生效

  • 2012-10-24

    公开

    公开

说明书

 

技术领域

本发明涉及软件版本更新过程中的回归测试用例集构建,特别涉及存在大量测试用例,以及这些测试用例对历史版本程序的覆盖数据,如何根据目标版本的程序变更,选择测试用例并对测试用例排序,从而在有限的测试时间和资源下,有针对性和高效率地完成目标版本的回归测试。

背景技术

回归测试用例集构建是软件回归测试过程中的关键步骤,是降低回归测试成本,提高回归测试效率的重要环节。当前软件系统件在开发和部署时,经常因为漏洞修复、功能增强、需求变更、软件运行环境迁移等原因不断修改和升级。为了保障软件质量,在软件被修改后,必须重新对软件执行回归测试。回归测试的目标包括两方面:其一是软件被修改部分可以按照预期进行运作;其二是软件未修改部分仍然可以正确执行。为完成高效率的回归测试,研究者提出一整套回归测试相关的工程技术,包括:测试用例集维护、测试用例选择、测试用例演化、测试用例优先化、测试用例集约简等。本发明方法涉及其中的测试用例选择和优先化技术。

软件回归测试面临的主要问题是高昂的测试成本开销和时间消耗,构建回归测试用例集的目标是在有限的测试资源(包括成本和时间)下,达到最高的测试效率,即最大程度地及时发现软件中的缺陷。现有的回归测试用例构建方法和技术一般忽略目标版本的程序变更,对所有的测试覆盖数据等同对待,没有考虑程序变更与测试需求之间的联系,往往难以达成高效率的回归测试。

软件工程实践不断表明,在软件修改和升级过程中,程序员在对软件做功能增强或漏洞修复等工作时,对现有程序的修改往往更容易引入或触发新的缺陷;如果在测试过程中针对性地瞄准这些位置,则可以减少回归测试用例集规模,大大提高测试效率,有效降低测试成本和时间。但是现有的回归测试方法中尚没有对这些方面给予足够的重视,也没有给出更好的解决方法。

发明内容

本发明的主要目的是考虑到传统回归测试方法没有充分利用目标版本的程序变更数据,提出一种基于程序变更的回归测试用例集构建方法,增加回归测试的针对性,完成测试用例排序,在有限的测试资源下提高回归测试的效率。

为实现本发明所述目的,本发明采用如下的步骤:

1)首先确定目标软件版本相对于历史版本的程序变更;以历史版本为参照,通过比对目标版本和历史版本的软件程序,获得目标版本相对于历史版本程序语句的变更情况;标记历史版本程序中每一个直接变更的语句行                                               ,以下简称变更语句;

 2)根据程序变更将历史版本的程序语句划分为变更语句集和非变更语句集;然后设定每个语句行的变更权重;据此可构成语句权重向量,其中为历史版本中包含的语句行总数;

3)收集现有测试用例对历史版本程序语句的覆盖信息,构建语句覆盖矩阵;根据覆盖信息将测试用例划分为变更覆盖集和一般覆盖集;中测试用例至少覆盖一个变更语句,而中测试用例没有覆盖变更语句;

4)根据语句覆盖矩阵分别约简划分后的变更覆盖集和一般覆盖集;

5)根据语句覆盖矩阵分别对变更覆盖集和一般覆盖集中的测试用例排序;最后按先后顺序合并两个集合,其中变更覆盖集中的测试用例优先于一般覆盖集中的测试用例;构成目标版本的回归测试用例集。

上述步骤1)中,标记历史版本程序中每一个直接变更的语句行的依据是:被修改、被删除或者在其后添加了新的语句行。

上述步骤2)中,根据程序变更将历史版本的程序语句划分为变更语句集和非变更语句集的过程为:针对每一个标记的语句行,分两个阶段进行处理:第一阶段将置入变更语句集;第二阶段分析所处的程序上下文,分以下3种情况迭代处理:

I)位于分支语句块中,确定所对应的分支判定语句,将对应的分支判定语句设定为标记的语句行;

II)位于循环语句块中,确定所对应的循环判定语句,将对应的循环判定语句设定为标记的语句行;

III)位于异常处理语句块中,确定所对应的异常处理起始语句,将对应的异常处理起始语句设定为标记的语句行;

对重复标记的语句行只处理一次;处理完所有标记的语句行后,剩余没有处理过的都被置入非变更语句集。

上述步骤2)中,变更权重的设定基于程序修改带来的风险,具体设定为-6;非变更语句集中的语句行变更权重设定为0。

上述步骤4)中,根据语句覆盖矩阵约简变更覆盖集和一般覆盖集中测试用例的过程为:首先针对变更覆盖集,采用多重覆盖约简方法MHATS完成测试用例约简,语句权重向量作为MHATS算法的多重覆盖表,获得约简后的变更覆盖集;要求对每个语句行,中至少有个测试用例覆盖;或者中包含所有原始中覆盖的测试用例;然后针对一般覆盖集,采用单覆盖约简方法HGS完成测试用例约简,获得约简后的一般覆盖集;要求中测试用例与原始中测试用例覆盖相同数量的语句行。

上述步骤5)中,根据语句覆盖矩阵分别对变更覆盖集和一般覆盖集中的测试用例排序的过程为:首先应用语句权重向量修改语句覆盖矩阵,获得带权语句覆盖矩阵;针对矩阵中的每一个单元,矩阵中对应单元按以下公式计算:

其中1表示测试用例覆盖语句行,0表示未覆盖,为语句行的变更权重;

根据矩阵,采用带反馈的测试用例排序方法分别对约简后的变更覆盖集和约简后的一般覆盖集中的测试用例排序。

该带反馈的测试用例排序方法的过程为:给定带权语句覆盖矩阵,令初始的排序集合为空集;每次选择相对价值最高的测试用例加入集合;

为计算相对价值,定义覆盖系数向量,其中系数由以下公式计算:

未覆盖语句行指中尚未有测试用例覆盖;测试用例的相对价值按以下公式计算,其中为语句行总数:

每次更新后要重新计算向量;如果剩余的测试用例中,最高的相对价值已经为0,表示中测试用例已经覆盖了所有可能覆盖的语句行;此时将中已经排好序的测试用例移出,将重置为空集,再重新计算剩余测试用例的相对价值;重复上述操作,直至集合中所有测试用例都被排序。

软件工程实践数据表明,构建回归测试用例集时,对非变更语句的过多覆盖不仅会导致回归测试用例集的规模偏大,而且很多时候,还会影响到测试用例集的缺陷检测能力。本发明方法基于程序变更构建回归测试用例集,增加对变更语句的覆盖力度,同时减少对非变更语句的覆盖比率。实践证明,大多数大型软件系统更新换代时所发生的程序变更有限,变更语句集只占很小比例,在这种情况下,同已有方法相比较,本发明方法能够减少回归测试用例集规模,同时避免对测试用例集缺陷检测能力的影响;通过对测试用例排序,能够在测试资源有限的前提下,更加灵活地完成测试用例的调度和执行,从而有针对性和高效率地完成目标版本的回归测试。另外,本发明方法可以应用于不同类型、不同操作系统平台、不同编程语言的软件系统回归测试,具有良好的扩展性和适应性。

附图说明

图1 是基于程序变更的回归测试用例集构建方法的结构图;

图2 是识别历史版本中变更语句集的处理流程;

图3 是包含语句权重向量的语句覆盖矩阵;

图4 是变更覆盖集和一般覆盖集约简的处理流程;

图5 是约简后变更覆盖集和一般覆盖集排序的处理流程;

图6 是用于测试用例集排序的带权语句覆盖矩阵;

图7 是带反馈的测试用例排序方法的处理流程。

具体实施方式

下面结合附图对本发明进行详细说明。

如图1所示,基于程序变更的回归测试用例集构建方法包含五个主要步骤:确定目标版本的程序变更、识别变更语句集并设置变更权重、根据历史覆盖信息划分测试用例集、约简划分后的变更覆盖集和一般覆盖集、最后对变更覆盖集和一般覆盖集中测试用例排序,合并两个测试用例集合后构成目标版本的回归测试用例集。

本发明的输入主要包括:(1)软件系统的目标版本,目标版本是软件系统当前修改完毕的版本,需要执行回归测试保证软件系统的质量;(2)软件系统的测试用例集,测试用例集是软件系统历史开发过程中逐渐积累的测试用例集合,回归测试所采用的测试用例需要从这个集合中选择;(3)软件系统的历史版本,历史版本是与目标版本最接近的且得到充分测试的软件系统版本;(4)测试用例对历史版本的覆盖信息,主要是测试用例执行时记录的程序语句覆盖数据。

首先确定目标软件版本相对于历史版本的程序变更。以历史版本为参照,通过比对目标版本和历史版本的软件程序,获得目标版本相对于历史版本程序语句的变更情况:例如添加了一个或多个、删除了一个或多个、以及修改了一个或多个语句行。对历史版本软件程序中每一个直接变更的语句行(简称变更语句)进行标记,标记的依据是:被修改、删除、或者在其后添加了新的语句行。

图2所示为识别历史版本中变更语句集的处理流程。针对历史版本软件程序中每一个标记的语句行,分两个阶段进行处理:第一阶段将置入变更语句集;第二阶段分析所处的程序上下文,分以下3种情况迭代处理:

1)位于分支语句块中,例如Java/C/C++/C#等语言的switch语句块或者if语句块等,则确定对应的分支判定语句(即switch语句或if语句本身),将对应的分支判定语句设定为标记的语句行;

2)位于循环语句块中,例如Java/C/C++/C#等语言的for语句块或者while语句块(包括do…while语句块)等,则确定对应的循环判定语句(即for语句或while语句),将对应的循环判定语句设定为标记的语句行;

3)位于异常处理语句块中,例如Java/C++/C#等语言的try…catch语句块等,则确定对应的异常处理起始语句(即try语句),将对应的异常处理起始语句设定为标记的语句行;

按上述3种情况处理,变更语句的识别过程是一个迭代的过程,首先将直接变更的语句行识别为变更语句;然后确定该变更语句所处的程序上下文,按语句块(分支、循环、异常处理)—函数/方法/过程体的顺序,逐层次识别上一级别的变更语句。重复标记的语句行只处理一次。处理完所有标记的语句行后,最后剩余没有处理过的语句行都被置入非变更语句集。

随后设定每个语句行的变更权重,变更权重的设定基于程序修改带来的风险,一般可设定为,一些变更语句视风险大小可以个别设定不同的权重,最大值。风险的大小由引发缺陷的概率和该缺陷的严重程度来确定:缺陷概率越大、严重程度越高则风险越大,权重的值与风险成正比。如果个别变更语句可能带来更大(或较小)的风险,则该变更语句对应的权重值可以个别设定。非变更语句集中语句行的变更权重设定为0。

接下来收集现有测试用例对历史版本程序语句的覆盖信息,构建语句覆盖矩阵;图3所示为语句覆盖矩阵的一个示例,其中包括语句覆盖矩阵和语句权重向量。令历史版本中包含的语句行数量为,测试用例数量为。矩阵中元素表示语句行被测试用例覆盖,即执行了;否则,表示没有被执行。权重向量中元素表示语句行是变更语句,即,的值为变更语句的权重;否则,即。

按图3,语句行被测试用例、、、和覆盖;属于变更语句集,其权重;除了以外,语句行、和也属于变更语句集,其中的风险更高,其权重。

根据覆盖信息将测试用例划分为变更覆盖集和一般覆盖集;对任一测试用例,如果覆盖了变更语句集中的某个语句行,则属于变更覆盖集,即;否则没有覆盖任何变更语句,则属于一般覆盖集,即。按图3,测试用例和没有覆盖任何变更语句,因此它们属于;而其余的测试用例因至少覆盖了一个变更语句,都属于。

再后根据语句覆盖矩阵,分别约简划分后的变更覆盖集和一般覆盖集。图4所示为变更覆盖集和一般覆盖集约简的处理流程。针对变更覆盖集,采用多重覆盖约简方法MHATS完成测试用例约简,语句权重向量作为MHATS算法的多重覆盖表,获得约简后的变更覆盖集。要求对每个语句行,中至少有个测试用例覆盖;或者中包含所有原始中覆盖的测试用例。

针对一般覆盖集,采用单覆盖约简方法HGS完成测试用例约简,获得约简后的一般覆盖集。要求中测试用例与原始中测试用例覆盖相同数量的语句行。

最后根据语句覆盖矩阵分别对约简后的变更覆盖集和一般覆盖集中的测试用例排序。图5所示为约简后变更覆盖集和一般覆盖集排序的处理流程;首先应用语句权重向量修改语句覆盖矩阵,获得带权语句覆盖矩阵。修改方法按公式(1)所示,针对矩阵中的每一个单元(表示测试用例对语句行的覆盖值),应用语句行的变更权重,计算带权矩阵的对应单元:

                           (1)

图6所示为根据图3的语句覆盖矩阵和语句权重向量计算而得的带权语句覆盖矩阵。按上述方式处理可以调整测试用例在目标版本中的价值,即测试用例覆盖的变更语句数量越多,这些变更语句的权重(即风险)越大,则在目标版本上的价值越高。由此可以定义的价值,如公式(2)所示,其中为语句行总数:

                                               (2)

随后根据各测试用例的价值分别对约简后的变更覆盖集和约简后的一般覆盖集中测试用例排序。排序采用带反馈的测试用例排序方法,图7所示为带反馈的测试用例排序方法的处理流程。给定带权语句覆盖矩阵,令初始的排序集合为空集;每次选择相对价值最高的测试用例加入集合。为计算相对价值,定义覆盖系数向量,其中系数由公式(3)定义:

             (3)

其中未覆盖语句行指中尚未有测试用例覆盖。根据向量,可按照公式(4)定义测试用例的相对价值如下:

                               (4)

每次更新后要重新计算向量。如果剩余的测试用例中,最高的相对价值已经为0,表示中测试用例已经覆盖了所有可能覆盖的语句行;此时可以将中已经排好序的测试用例移出,将重置为空集,重新计算剩余测试用例的。重复上述步骤,直至所有测试用例都被排序。

最后合并两个约简后并排序的测试用例集合,其中变更覆盖集中的测试用例优先于一般覆盖集中的测试用例;构成目标版本的回归测试用例集。

为考察本发明方法的有效性,我们采用多个数据集,包括西门子程序集的8个C程序、Space软件、Java编写的NanoXML和JTopas软件等,对本发明方法进行验证。实验数据表明,同现有回归测试用例集构建方法相比较,基于程序变更的回归测试用例集构建方法所构建的回归测试用例集规模更小,更能够确保检测出目标版本中存在的所有缺陷;同时能够以更短的时间检测出这些缺陷,即通过测试用例的合理排序,使得缺陷可以被更靠前执行的测试用例检测出来。

当前的大型软件系统更新换代频繁,所发生的程序变更有限,变更语句集只占很小比例,应用本发明方法能够降低回归测试用例集规模,同时避免对测试用例集缺陷检测能力的影响;通过对测试用例合理排序,能够在测试资源有限的前提下,更加灵活地完成测试用例的调度和执行,从而有针对性和高效率地完成目标版本的回归测试,减少回归测试成本和时间。另外,本发明方法可以应用于不同类型、不同操作系统平台、不同编程语言的软件系统回归测试,具有良好的扩展性和适应性。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号