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

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

Info

Publication number
CN102750153A
CN102750153A CN2012102192806A CN201210219280A CN102750153A CN 102750153 A CN102750153 A CN 102750153A CN 2012102192806 A CN2012102192806 A CN 2012102192806A CN 201210219280 A CN201210219280 A CN 201210219280A CN 102750153 A CN102750153 A CN 102750153A
Authority
CN
China
Prior art keywords
statement
change
collection
test
test case
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2012102192806A
Other languages
English (en)
Other versions
CN102750153B (zh
Inventor
顾庆
张立久
赵海钢
汤九斌
陈道蓄
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing University
Original Assignee
Nanjing University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nanjing University filed Critical Nanjing University
Priority to CN201210219280.6A priority Critical patent/CN102750153B/zh
Publication of CN102750153A publication Critical patent/CN102750153A/zh
Application granted granted Critical
Publication of CN102750153B publication Critical patent/CN102750153B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

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

Description

一种基于程序变更的回归测试用例集构建方法
 
技术领域
本发明涉及软件版本更新过程中的回归测试用例集构建,特别涉及存在大量测试用例,以及这些测试用例对历史版本程序的覆盖数据,如何根据目标版本的程序变更,选择测试用例并对测试用例排序,从而在有限的测试时间和资源下,有针对性和高效率地完成目标版本的回归测试。
背景技术
回归测试用例集构建是软件回归测试过程中的关键步骤,是降低回归测试成本,提高回归测试效率的重要环节。当前软件系统件在开发和部署时,经常因为漏洞修复、功能增强、需求变更、软件运行环境迁移等原因不断修改和升级。为了保障软件质量,在软件被修改后,必须重新对软件执行回归测试。回归测试的目标包括两方面:其一是软件被修改部分可以按照预期进行运作;其二是软件未修改部分仍然可以正确执行。为完成高效率的回归测试,研究者提出一整套回归测试相关的工程技术,包括:测试用例集维护、测试用例选择、测试用例演化、测试用例优先化、测试用例集约简等。本发明方法涉及其中的测试用例选择和优先化技术。
软件回归测试面临的主要问题是高昂的测试成本开销和时间消耗,构建回归测试用例集的目标是在有限的测试资源(包括成本和时间)下,达到最高的测试效率,即最大程度地及时发现软件中的缺陷。现有的回归测试用例构建方法和技术一般忽略目标版本的程序变更,对所有的测试覆盖数据等同对待,没有考虑程序变更与测试需求之间的联系,往往难以达成高效率的回归测试。
软件工程实践不断表明,在软件修改和升级过程中,程序员在对软件做功能增强或漏洞修复等工作时,对现有程序的修改往往更容易引入或触发新的缺陷;如果在测试过程中针对性地瞄准这些位置,则可以减少回归测试用例集规模,大大提高测试效率,有效降低测试成本和时间。但是现有的回归测试方法中尚没有对这些方面给予足够的重视,也没有给出更好的解决方法。
发明内容
本发明的主要目的是考虑到传统回归测试方法没有充分利用目标版本的程序变更数据,提出一种基于程序变更的回归测试用例集构建方法,增加回归测试的针对性,完成测试用例排序,在有限的测试资源下提高回归测试的效率。
为实现本发明所述目的,本发明采用如下的步骤:
1)首先确定目标软件版本相对于历史版本的程序变更;以历史版本为参照,通过比对目标版本和历史版本的软件程序,获得目标版本相对于历史版本程序语句的变更情况;标记历史版本程序中每一个直接变更的语句行                                               
Figure 2012102192806100002DEST_PATH_IMAGE002
,以下简称变更语句;
 2)根据程序变更将历史版本的程序语句划分为变更语句集和非变更语句集;然后设定每个语句行的变更权重;据此可构成语句权重向量
Figure 2012102192806100002DEST_PATH_IMAGE006
,其中
Figure 2012102192806100002DEST_PATH_IMAGE008
为历史版本中包含的语句行总数;
3)收集现有测试用例对历史版本程序语句的覆盖信息,构建语句覆盖矩阵
Figure 2012102192806100002DEST_PATH_IMAGE010
;根据覆盖信息将测试用例划分为变更覆盖集
Figure 2012102192806100002DEST_PATH_IMAGE012
和一般覆盖集
Figure 42185DEST_PATH_IMAGE012
中测试用例至少覆盖一个变更语句,而
Figure 138317DEST_PATH_IMAGE014
中测试用例没有覆盖变更语句;
4)根据语句覆盖矩阵分别约简划分后的变更覆盖集和一般覆盖集;
5)根据语句覆盖矩阵分别对变更覆盖集和一般覆盖集中的测试用例排序;最后按先后顺序合并两个集合,其中变更覆盖集中的测试用例优先于一般覆盖集中的测试用例;构成目标版本的回归测试用例集。
上述步骤1)中,标记历史版本程序中每一个直接变更的语句行
Figure 662971DEST_PATH_IMAGE002
的依据是:被修改、被删除或者在其后添加了新的语句行。
上述步骤2)中,根据程序变更将历史版本的程序语句划分为变更语句集和非变更语句集的过程为:针对每一个标记的语句行
Figure 729333DEST_PATH_IMAGE002
,分两个阶段进行处理:第一阶段将
Figure 312761DEST_PATH_IMAGE002
置入变更语句集
Figure 2012102192806100002DEST_PATH_IMAGE016
;第二阶段分析
Figure 375526DEST_PATH_IMAGE002
所处的程序上下文,分以下3种情况迭代处理:
I)
Figure 423116DEST_PATH_IMAGE002
位于分支语句块中,确定所对应的分支判定语句,将对应的分支判定语句设定为标记的语句行;
II)
Figure 732875DEST_PATH_IMAGE002
位于循环语句块中,确定所对应的循环判定语句,将对应的循环判定语句设定为标记的语句行;
III)位于异常处理语句块中,确定所对应的异常处理起始语句,将对应的异常处理起始语句设定为标记的语句行;
对重复标记的语句行只处理一次;处理完所有标记的语句行后,剩余没有处理过的
Figure 729442DEST_PATH_IMAGE002
都被置入非变更语句集
Figure 2012102192806100002DEST_PATH_IMAGE018
上述步骤2)中,变更权重的设定基于程序修改带来的风险,具体设定为
Figure 2012102192806100002DEST_PATH_IMAGE020
-6;非变更语句集中的语句行变更权重设定为0。
上述步骤4)中,根据语句覆盖矩阵约简变更覆盖集和一般覆盖集中测试用例的过程为:首先针对变更覆盖集
Figure 382272DEST_PATH_IMAGE012
,采用多重覆盖约简方法MHATS完成测试用例约简,语句权重向量
Figure 2012102192806100002DEST_PATH_IMAGE022
作为MHATS算法的多重覆盖表,获得约简后的变更覆盖集
Figure 2012102192806100002DEST_PATH_IMAGE024
;要求对每个语句行
Figure 2012102192806100002DEST_PATH_IMAGE026
Figure 738298DEST_PATH_IMAGE024
中至少有
Figure 2012102192806100002DEST_PATH_IMAGE028
个测试用例覆盖
Figure 93056DEST_PATH_IMAGE026
;或者
Figure 950153DEST_PATH_IMAGE024
中包含所有原始
Figure 457489DEST_PATH_IMAGE012
中覆盖
Figure 109050DEST_PATH_IMAGE026
的测试用例;然后针对一般覆盖集
Figure 154367DEST_PATH_IMAGE014
,采用单覆盖约简方法HGS完成测试用例约简,获得约简后的一般覆盖集
Figure 2012102192806100002DEST_PATH_IMAGE030
;要求
Figure 422013DEST_PATH_IMAGE030
中测试用例与原始
Figure 970806DEST_PATH_IMAGE014
中测试用例覆盖相同数量的语句行。
上述步骤5)中,根据语句覆盖矩阵分别对变更覆盖集和一般覆盖集中的测试用例排序的过程为:首先应用语句权重向量
Figure 121164DEST_PATH_IMAGE022
修改语句覆盖矩阵
Figure 388197DEST_PATH_IMAGE010
,获得带权语句覆盖矩阵
Figure 2012102192806100002DEST_PATH_IMAGE032
;针对矩阵
Figure 400147DEST_PATH_IMAGE010
中的每一个单元,矩阵中对应单元
Figure 2012102192806100002DEST_PATH_IMAGE036
按以下公式计算:
Figure 2012102192806100002DEST_PATH_IMAGE038
其中1表示测试用例
Figure 2012102192806100002DEST_PATH_IMAGE040
覆盖语句行
Figure 813122DEST_PATH_IMAGE026
,0表示
Figure 567451DEST_PATH_IMAGE040
未覆盖
Figure 366780DEST_PATH_IMAGE026
为语句行
Figure 130129DEST_PATH_IMAGE026
的变更权重;
根据矩阵
Figure 168492DEST_PATH_IMAGE032
,采用带反馈的测试用例排序方法分别对约简后的变更覆盖集
Figure 522244DEST_PATH_IMAGE024
和约简后的一般覆盖集中的测试用例排序。
该带反馈的测试用例排序方法的过程为:给定带权语句覆盖矩阵
Figure 563199DEST_PATH_IMAGE032
,令初始的排序集合
Figure 2012102192806100002DEST_PATH_IMAGE042
为空集;每次选择相对价值
Figure 2012102192806100002DEST_PATH_IMAGE044
最高的测试用例
Figure 105170DEST_PATH_IMAGE040
加入集合
Figure 183984DEST_PATH_IMAGE042
为计算相对价值
Figure 744278DEST_PATH_IMAGE044
,定义覆盖系数向量,其中系数由以下公式计算:
Figure 2012102192806100002DEST_PATH_IMAGE050
Figure 63395DEST_PATH_IMAGE042
未覆盖语句行
Figure 341930DEST_PATH_IMAGE026
中尚未有测试用例覆盖
Figure 387039DEST_PATH_IMAGE026
;测试用例
Figure 329587DEST_PATH_IMAGE040
的相对价值按以下公式计算,其中为语句行总数:
每次更新
Figure 723025DEST_PATH_IMAGE042
后要重新计算向量
Figure 2012102192806100002DEST_PATH_IMAGE054
;如果剩余的测试用例中,最高的相对价值
Figure 383945DEST_PATH_IMAGE044
已经为0,表示
Figure 371492DEST_PATH_IMAGE042
中测试用例已经覆盖了所有可能覆盖的语句行;此时将
Figure 595800DEST_PATH_IMAGE042
中已经排好序的测试用例移出,将
Figure 735926DEST_PATH_IMAGE042
重置为空集,再重新计算剩余测试用例的相对价值;重复上述操作,直至集合中所有测试用例都被排序。
软件工程实践数据表明,构建回归测试用例集时,对非变更语句的过多覆盖不仅会导致回归测试用例集的规模偏大,而且很多时候,还会影响到测试用例集的缺陷检测能力。本发明方法基于程序变更构建回归测试用例集,增加对变更语句的覆盖力度,同时减少对非变更语句的覆盖比率。实践证明,大多数大型软件系统更新换代时所发生的程序变更有限,变更语句集只占很小比例,在这种情况下,同已有方法相比较,本发明方法能够减少回归测试用例集规模,同时避免对测试用例集缺陷检测能力的影响;通过对测试用例排序,能够在测试资源有限的前提下,更加灵活地完成测试用例的调度和执行,从而有针对性和高效率地完成目标版本的回归测试。另外,本发明方法可以应用于不同类型、不同操作系统平台、不同编程语言的软件系统回归测试,具有良好的扩展性和适应性。
附图说明
图1 是基于程序变更的回归测试用例集构建方法的结构图;
图2 是识别历史版本中变更语句集的处理流程;
图3 是包含语句权重向量的语句覆盖矩阵;
图4 是变更覆盖集和一般覆盖集约简的处理流程;
图5 是约简后变更覆盖集和一般覆盖集排序的处理流程;
图6 是用于测试用例集排序的带权语句覆盖矩阵;
图7 是带反馈的测试用例排序方法的处理流程。
具体实施方式
下面结合附图对本发明进行详细说明。
如图1所示,基于程序变更的回归测试用例集构建方法包含五个主要步骤:确定目标版本的程序变更、识别变更语句集并设置变更权重、根据历史覆盖信息划分测试用例集、约简划分后的变更覆盖集和一般覆盖集、最后对变更覆盖集和一般覆盖集中测试用例排序,合并两个测试用例集合后构成目标版本的回归测试用例集。
本发明的输入主要包括:(1)软件系统的目标版本,目标版本是软件系统当前修改完毕的版本,需要执行回归测试保证软件系统的质量;(2)软件系统的测试用例集,测试用例集是软件系统历史开发过程中逐渐积累的测试用例集合,回归测试所采用的测试用例需要从这个集合中选择;(3)软件系统的历史版本,历史版本是与目标版本最接近的且得到充分测试的软件系统版本;(4)测试用例对历史版本的覆盖信息,主要是测试用例执行时记录的程序语句覆盖数据。
首先确定目标软件版本相对于历史版本的程序变更。以历史版本为参照,通过比对目标版本和历史版本的软件程序,获得目标版本相对于历史版本程序语句的变更情况:例如添加了一个或多个、删除了一个或多个、以及修改了一个或多个语句行。对历史版本软件程序中每一个直接变更的语句行
Figure 20277DEST_PATH_IMAGE002
(简称变更语句)进行标记,标记的依据是:
Figure 432803DEST_PATH_IMAGE002
被修改、删除、或者在其后添加了新的语句行。
图2所示为识别历史版本中变更语句集的处理流程。针对历史版本软件程序中每一个标记的语句行
Figure 257540DEST_PATH_IMAGE002
,分两个阶段进行处理:第一阶段将置入变更语句集
Figure 894375DEST_PATH_IMAGE016
;第二阶段分析
Figure 607247DEST_PATH_IMAGE002
所处的程序上下文,分以下3种情况迭代处理:
1)
Figure 173357DEST_PATH_IMAGE002
位于分支语句块中,例如Java/C/C++/C#等语言的switch语句块或者if语句块等,则确定对应的分支判定语句(即switch语句或if语句本身),将对应的分支判定语句设定为标记的语句行;
2)位于循环语句块中,例如Java/C/C++/C#等语言的for语句块或者while语句块(包括do…while语句块)等,则确定对应的循环判定语句(即for语句或while语句),将对应的循环判定语句设定为标记的语句行;
3)
Figure 897917DEST_PATH_IMAGE002
位于异常处理语句块中,例如Java/C++/C#等语言的try…catch语句块等,则确定对应的异常处理起始语句(即try语句),将对应的异常处理起始语句设定为标记的语句行;
按上述3种情况处理,变更语句的识别过程是一个迭代的过程,首先将直接变更的语句行识别为变更语句;然后确定该变更语句所处的程序上下文,按语句块(分支、循环、异常处理)—函数/方法/过程体的顺序,逐层次识别上一级别的变更语句。重复标记的语句行只处理一次。处理完所有标记的语句行后,最后剩余没有处理过的语句行都被置入非变更语句集
Figure 285036DEST_PATH_IMAGE018
随后设定每个语句行的变更权重
Figure 222815DEST_PATH_IMAGE004
,变更权重的设定基于程序修改带来的风险,一般可设定为
Figure 378990DEST_PATH_IMAGE020
,一些变更语句视风险大小可以个别设定不同的权重,最大值
Figure 2012102192806100002DEST_PATH_IMAGE056
。风险的大小由引发缺陷的概率和该缺陷的严重程度来确定:缺陷概率越大、严重程度越高则风险越大,权重
Figure 238362DEST_PATH_IMAGE004
的值与风险成正比。如果个别变更语句可能带来更大(或较小)的风险,则该变更语句对应的权重值可以个别设定。非变更语句集中语句行的变更权重设定为0。
接下来收集现有测试用例对历史版本程序语句的覆盖信息,构建语句覆盖矩阵;图3所示为语句覆盖矩阵的一个示例,其中包括语句覆盖矩阵
Figure 660247DEST_PATH_IMAGE010
和语句权重向量
Figure 833739DEST_PATH_IMAGE006
。令历史版本中包含的语句行数量为
Figure 844421DEST_PATH_IMAGE008
,测试用例数量为
Figure 2012102192806100002DEST_PATH_IMAGE058
。矩阵
Figure 874694DEST_PATH_IMAGE010
中元素
Figure 2012102192806100002DEST_PATH_IMAGE060
表示语句行
Figure 783875DEST_PATH_IMAGE026
被测试用例
Figure 229900DEST_PATH_IMAGE040
覆盖,即
Figure 422984DEST_PATH_IMAGE040
执行了
Figure 561841DEST_PATH_IMAGE026
;否则,表示
Figure 958318DEST_PATH_IMAGE026
没有被
Figure 208034DEST_PATH_IMAGE040
执行。权重向量
Figure 255624DEST_PATH_IMAGE022
中元素表示语句行
Figure 565383DEST_PATH_IMAGE026
是变更语句,即的值为变更语句
Figure 499634DEST_PATH_IMAGE026
的权重;否则
Figure 2012102192806100002DEST_PATH_IMAGE068
,即
Figure 2012102192806100002DEST_PATH_IMAGE070
按图3,语句行
Figure 2012102192806100002DEST_PATH_IMAGE072
被测试用例
Figure 2012102192806100002DEST_PATH_IMAGE074
Figure 2012102192806100002DEST_PATH_IMAGE076
Figure 2012102192806100002DEST_PATH_IMAGE078
Figure 2012102192806100002DEST_PATH_IMAGE082
覆盖;
Figure 152463DEST_PATH_IMAGE072
属于变更语句集,其权重
Figure 2012102192806100002DEST_PATH_IMAGE084
;除了
Figure 633123DEST_PATH_IMAGE072
以外,语句行
Figure 2012102192806100002DEST_PATH_IMAGE088
Figure 2012102192806100002DEST_PATH_IMAGE090
也属于变更语句集,其中
Figure 800930DEST_PATH_IMAGE088
的风险更高,其权重
Figure 2012102192806100002DEST_PATH_IMAGE092
根据覆盖信息将测试用例划分为变更覆盖集和一般覆盖集;对任一测试用例
Figure 813995DEST_PATH_IMAGE040
,如果
Figure 859311DEST_PATH_IMAGE040
覆盖了变更语句集
Figure 316838DEST_PATH_IMAGE016
中的某个语句行,则
Figure 865631DEST_PATH_IMAGE040
属于变更覆盖集
Figure 766722DEST_PATH_IMAGE012
,即
Figure 2012102192806100002DEST_PATH_IMAGE094
;否则
Figure 33755DEST_PATH_IMAGE040
没有覆盖任何变更语句,则
Figure 29393DEST_PATH_IMAGE040
属于一般覆盖集
Figure 698271DEST_PATH_IMAGE014
,即
Figure 2012102192806100002DEST_PATH_IMAGE096
。按图3,测试用例
Figure 2012102192806100002DEST_PATH_IMAGE098
Figure 2012102192806100002DEST_PATH_IMAGE100
没有覆盖任何变更语句,因此它们属于
Figure 770264DEST_PATH_IMAGE014
;而其余的测试用例因至少覆盖了一个变更语句,都属于
Figure 321331DEST_PATH_IMAGE012
再后根据语句覆盖矩阵,分别约简划分后的变更覆盖集和一般覆盖集。图4所示为变更覆盖集和一般覆盖集约简的处理流程。针对变更覆盖集,采用多重覆盖约简方法MHATS完成测试用例约简,语句权重向量
Figure 66247DEST_PATH_IMAGE022
作为MHATS算法的多重覆盖表,获得约简后的变更覆盖集
Figure 669267DEST_PATH_IMAGE024
。要求对每个语句行中至少有
Figure 921366DEST_PATH_IMAGE028
个测试用例覆盖
Figure 265760DEST_PATH_IMAGE026
;或者
Figure 826054DEST_PATH_IMAGE024
中包含所有原始中覆盖
Figure 548339DEST_PATH_IMAGE026
的测试用例。
针对一般覆盖集
Figure 243894DEST_PATH_IMAGE014
,采用单覆盖约简方法HGS完成测试用例约简,获得约简后的一般覆盖集
Figure 596378DEST_PATH_IMAGE030
。要求
Figure 273347DEST_PATH_IMAGE030
中测试用例与原始
Figure 773598DEST_PATH_IMAGE014
中测试用例覆盖相同数量的语句行。
最后根据语句覆盖矩阵分别对约简后的变更覆盖集和一般覆盖集中的测试用例排序。图5所示为约简后变更覆盖集和一般覆盖集排序的处理流程;首先应用语句权重向量
Figure 459795DEST_PATH_IMAGE022
修改语句覆盖矩阵
Figure 479834DEST_PATH_IMAGE010
,获得带权语句覆盖矩阵
Figure 593284DEST_PATH_IMAGE032
。修改方法按公式(1)所示,针对矩阵
Figure 580832DEST_PATH_IMAGE010
中的每一个单元
Figure 805140DEST_PATH_IMAGE034
(表示测试用例
Figure 132216DEST_PATH_IMAGE040
对语句行
Figure 229616DEST_PATH_IMAGE026
的覆盖值),应用语句行
Figure 376563DEST_PATH_IMAGE026
的变更权重
Figure 404562DEST_PATH_IMAGE028
,计算带权矩阵的对应单元
Figure 103714DEST_PATH_IMAGE036
Figure 3537DEST_PATH_IMAGE038
                           (1)
图6所示为根据图3的语句覆盖矩阵和语句权重向量计算而得的带权语句覆盖矩阵。按上述方式处理可以调整测试用例在目标版本中的价值,即测试用例
Figure 379767DEST_PATH_IMAGE040
覆盖的变更语句数量越多,这些变更语句的权重(即风险)越大,则
Figure 415856DEST_PATH_IMAGE040
在目标版本上的价值越高。由此可以定义
Figure 104326DEST_PATH_IMAGE040
的价值
Figure 2012102192806100002DEST_PATH_IMAGE102
,如公式(2)所示,其中为语句行总数:
Figure 2012102192806100002DEST_PATH_IMAGE104
                                               (2)
随后根据各测试用例的价值分别对约简后的变更覆盖集和约简后的一般覆盖集
Figure 627209DEST_PATH_IMAGE030
中测试用例排序。排序采用带反馈的测试用例排序方法,图7所示为带反馈的测试用例排序方法的处理流程。给定带权语句覆盖矩阵
Figure 424263DEST_PATH_IMAGE032
,令初始的排序集合
Figure 33099DEST_PATH_IMAGE042
为空集;每次选择相对价值
Figure 754062DEST_PATH_IMAGE044
最高的测试用例
Figure 764743DEST_PATH_IMAGE040
加入集合
Figure 732699DEST_PATH_IMAGE042
。为计算相对价值
Figure 891148DEST_PATH_IMAGE044
,定义覆盖系数向量
Figure 602752DEST_PATH_IMAGE046
,其中系数
Figure 733519DEST_PATH_IMAGE048
由公式(3)定义:
Figure 685426DEST_PATH_IMAGE050
             (3)
其中
Figure 3275DEST_PATH_IMAGE042
未覆盖语句行
Figure 566160DEST_PATH_IMAGE042
中尚未有测试用例覆盖
Figure 875919DEST_PATH_IMAGE026
。根据向量
Figure 491183DEST_PATH_IMAGE054
,可按照公式(4)定义测试用例的相对价值
Figure 384370DEST_PATH_IMAGE044
如下:
Figure 927347DEST_PATH_IMAGE052
                               (4)
每次更新
Figure 485367DEST_PATH_IMAGE042
后要重新计算向量
Figure 76885DEST_PATH_IMAGE054
。如果剩余的测试用例中,最高的相对价值
Figure 849800DEST_PATH_IMAGE044
已经为0,表示
Figure 501361DEST_PATH_IMAGE042
中测试用例已经覆盖了所有可能覆盖的语句行;此时可以将
Figure 281099DEST_PATH_IMAGE042
中已经排好序的测试用例移出,将
Figure 738625DEST_PATH_IMAGE042
重置为空集,重新计算剩余测试用例的。重复上述步骤,直至所有测试用例都被排序。
最后合并两个约简后并排序的测试用例集合,其中变更覆盖集中的测试用例优先于一般覆盖集中的测试用例;构成目标版本的回归测试用例集。
为考察本发明方法的有效性,我们采用多个数据集,包括西门子程序集的8个C程序、Space软件、Java编写的NanoXML和JTopas软件等,对本发明方法进行验证。实验数据表明,同现有回归测试用例集构建方法相比较,基于程序变更的回归测试用例集构建方法所构建的回归测试用例集规模更小,更能够确保检测出目标版本中存在的所有缺陷;同时能够以更短的时间检测出这些缺陷,即通过测试用例的合理排序,使得缺陷可以被更靠前执行的测试用例检测出来。
当前的大型软件系统更新换代频繁,所发生的程序变更有限,变更语句集只占很小比例,应用本发明方法能够降低回归测试用例集规模,同时避免对测试用例集缺陷检测能力的影响;通过对测试用例合理排序,能够在测试资源有限的前提下,更加灵活地完成测试用例的调度和执行,从而有针对性和高效率地完成目标版本的回归测试,减少回归测试成本和时间。另外,本发明方法可以应用于不同类型、不同操作系统平台、不同编程语言的软件系统回归测试,具有良好的扩展性和适应性。

Claims (7)

1.一种基于程序变更的回归测试用例集构建方法,其特征在于包括以下步骤:
1)首先确定目标软件版本相对于历史版本的程序变更;以历史版本为参照,通过比对目标版本和历史版本的软件程序,获得目标版本相对于历史版本程序语句的变更情况;标记历史版本程序中每一个直接变更的语句行                                               
Figure 2012102192806100001DEST_PATH_IMAGE002
,以下简称变更语句;
2)根据程序变更将历史版本的程序语句划分为变更语句集和非变更语句集;然后设定每个语句行的变更权重
Figure 2012102192806100001DEST_PATH_IMAGE004
;据此可构成语句权重向量
Figure 2012102192806100001DEST_PATH_IMAGE006
,其中
Figure 2012102192806100001DEST_PATH_IMAGE008
为历史版本中包含的语句行总数;
3)收集现有测试用例对历史版本程序语句的覆盖信息,构建语句覆盖矩阵
Figure 2012102192806100001DEST_PATH_IMAGE010
;根据覆盖信息将测试用例划分为变更覆盖集
Figure 2012102192806100001DEST_PATH_IMAGE012
和一般覆盖集中测试用例至少覆盖一个变更语句,而
Figure 180671DEST_PATH_IMAGE014
中测试用例没有覆盖变更语句;
4)根据语句覆盖矩阵分别约简划分后的变更覆盖集和一般覆盖集;
5)根据语句覆盖矩阵分别对变更覆盖集和一般覆盖集中的测试用例排序;最后按先后顺序合并两个集合,其中变更覆盖集中的测试用例优先于一般覆盖集中的测试用例;构成目标版本的回归测试用例集。
2.根据权利要求1所述的基于程序变更的回归测试用例集构建方法,其特征在于,上述步骤1)中,标记历史版本程序中每一个直接变更的语句行
Figure 22725DEST_PATH_IMAGE002
的依据是:
Figure 417935DEST_PATH_IMAGE002
被修改、被删除或者在其后添加了新的语句行。
3.根据权利要求1或2所述的基于程序变更的回归测试用例集构建方法,其特征在于,上述步骤2)中,根据程序变更将历史版本的程序语句划分为变更语句集和非变更语句集的过程为:针对每一个标记的语句行
Figure 232307DEST_PATH_IMAGE002
,分两个阶段进行处理:第一阶段将
Figure 867819DEST_PATH_IMAGE002
置入变更语句集
Figure 2012102192806100001DEST_PATH_IMAGE016
;第二阶段分析
Figure 197169DEST_PATH_IMAGE002
所处的程序上下文,分以下3种情况迭代处理:
I)
Figure 396069DEST_PATH_IMAGE002
位于分支语句块中,确定所对应的分支判定语句,将对应的分支判定语句设定为标记的语句行;
II)
Figure 64948DEST_PATH_IMAGE002
位于循环语句块中,确定所对应的循环判定语句,将对应的循环判定语句设定为标记的语句行;
III)位于异常处理语句块中,确定所对应的异常处理起始语句,将对应的异常处理起始语句设定为标记的语句行;
对重复标记的语句行只处理一次;处理完所有标记的语句行后,剩余没有处理过的
Figure 625690DEST_PATH_IMAGE002
都被置入非变更语句集
4.根据权利要求1或2所述的基于程序变更的回归测试用例集构建方法,其特征在于,上述步骤2)中,变更权重的设定基于程序修改带来的风险,具体设定为
Figure 2012102192806100001DEST_PATH_IMAGE020
-6;非变更语句集中的语句行变更权重设定为0。
5.根据权利要求1或2所述的基于程序变更的回归测试用例集构建方法,其特征在于,上述步骤4)中,根据语句覆盖矩阵约简变更覆盖集和一般覆盖集中测试用例的过程为:首先针对变更覆盖集
Figure 425019DEST_PATH_IMAGE012
,采用多重覆盖约简方法MHATS完成测试用例约简,语句权重向量
Figure 2012102192806100001DEST_PATH_IMAGE022
作为MHATS算法的多重覆盖表,获得约简后的变更覆盖集
Figure 2012102192806100001DEST_PATH_IMAGE024
;要求对每个语句行
Figure 823770DEST_PATH_IMAGE024
中至少有
Figure 2012102192806100001DEST_PATH_IMAGE028
个测试用例覆盖
Figure 253615DEST_PATH_IMAGE026
;或者
Figure 305360DEST_PATH_IMAGE024
中包含所有原始
Figure 580483DEST_PATH_IMAGE012
中覆盖的测试用例;然后针对一般覆盖集
Figure 621438DEST_PATH_IMAGE014
,采用单覆盖约简方法HGS完成测试用例约简,获得约简后的一般覆盖集
Figure 2012102192806100001DEST_PATH_IMAGE030
;要求
Figure 163409DEST_PATH_IMAGE030
中测试用例与原始中测试用例覆盖相同数量的语句行。
6.根据权利要求1或2所述的基于程序变更的回归测试用例集构建方法,其特征在于,上述步骤5)中,根据语句覆盖矩阵分别对变更覆盖集和一般覆盖集中的测试用例排序的过程为:首先应用语句权重向量
Figure 740200DEST_PATH_IMAGE022
修改语句覆盖矩阵
Figure 574164DEST_PATH_IMAGE010
,获得带权语句覆盖矩阵
Figure 2012102192806100001DEST_PATH_IMAGE032
;针对矩阵中的每一个单元
Figure 2012102192806100001DEST_PATH_IMAGE034
,矩阵
Figure 220357DEST_PATH_IMAGE032
中对应单元按以下公式计算:
其中
Figure 635158DEST_PATH_IMAGE034
为1表示测试用例覆盖语句行
Figure 390756DEST_PATH_IMAGE026
,0表示未覆盖
Figure 784194DEST_PATH_IMAGE028
为语句行
Figure 897643DEST_PATH_IMAGE026
的变更权重;
根据矩阵
Figure 632994DEST_PATH_IMAGE032
,采用带反馈的测试用例排序方法分别对约简后的变更覆盖集和约简后的一般覆盖集
Figure 918799DEST_PATH_IMAGE030
中的测试用例排序。
7.根据权利要求6所述的基于程序变更的回归测试用例集构建方法,其特征在于,带反馈的测试用例排序方法的过程为:给定带权语句覆盖矩阵
Figure 265466DEST_PATH_IMAGE032
,令初始的排序集合
Figure 2012102192806100001DEST_PATH_IMAGE042
为空集;每次选择相对价值最高的测试用例
Figure 491042DEST_PATH_IMAGE040
加入集合
Figure 519041DEST_PATH_IMAGE042
为计算相对价值
Figure 762941DEST_PATH_IMAGE044
,定义覆盖系数向量
Figure 2012102192806100001DEST_PATH_IMAGE046
,其中系数由以下公式计算:
Figure 765663DEST_PATH_IMAGE042
未覆盖语句行
Figure 727803DEST_PATH_IMAGE026
中尚未有测试用例覆盖
Figure 595582DEST_PATH_IMAGE026
;测试用例
Figure 769205DEST_PATH_IMAGE040
的相对价值
Figure 156324DEST_PATH_IMAGE044
按以下公式计算,其中
Figure 526126DEST_PATH_IMAGE008
为语句行总数:
每次更新
Figure 479038DEST_PATH_IMAGE042
后要重新计算向量
Figure 2012102192806100001DEST_PATH_IMAGE054
;如果剩余的测试用例中,最高的相对价值
Figure 109650DEST_PATH_IMAGE044
已经为0,表示
Figure 718486DEST_PATH_IMAGE042
中测试用例已经覆盖了所有可能覆盖的语句行;此时将中已经排好序的测试用例移出,将
Figure 964976DEST_PATH_IMAGE042
重置为空集,再重新计算剩余测试用例的相对价值;重复上述操作,直至集合中所有测试用例都被排序。
CN201210219280.6A 2012-06-29 2012-06-29 一种基于程序变更的回归测试用例集构建方法 Expired - Fee Related CN102750153B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210219280.6A CN102750153B (zh) 2012-06-29 2012-06-29 一种基于程序变更的回归测试用例集构建方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210219280.6A CN102750153B (zh) 2012-06-29 2012-06-29 一种基于程序变更的回归测试用例集构建方法

Publications (2)

Publication Number Publication Date
CN102750153A true CN102750153A (zh) 2012-10-24
CN102750153B CN102750153B (zh) 2015-11-25

Family

ID=47030376

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210219280.6A Expired - Fee Related CN102750153B (zh) 2012-06-29 2012-06-29 一种基于程序变更的回归测试用例集构建方法

Country Status (1)

Country Link
CN (1) CN102750153B (zh)

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103870384A (zh) * 2012-12-11 2014-06-18 航天信息股份有限公司 测试用例推定方法及系统
CN104572433A (zh) * 2013-10-29 2015-04-29 中国银联股份有限公司 一种金融信息系统测试方法和装置
US9355018B1 (en) 2015-08-12 2016-05-31 Red Hat Israel, Ltd. History N-section for property location
CN106033386A (zh) * 2015-03-10 2016-10-19 联想(北京)有限公司 软件测试方法以及电子设备
US9811446B2 (en) 2013-06-26 2017-11-07 International Business Machines Corporation Method and apparatus for providing test cases
CN107423214A (zh) * 2017-04-18 2017-12-01 恒生电子股份有限公司 软件回归测试用例获取方法、装置及存储介质和电子设备
CN107515826A (zh) * 2017-08-28 2017-12-26 广州阿里巴巴文学信息技术有限公司 测试用例精准推荐方法、装置、系统、设备及存储介质
CN107908540A (zh) * 2017-07-26 2018-04-13 平安壹钱包电子商务有限公司 测试用例创建方法、装置、计算机设备及介质
CN110502447A (zh) * 2019-08-30 2019-11-26 西安邮电大学 一种基于图的回归测试用例优先排序方法
CN110554952A (zh) * 2018-06-04 2019-12-10 西安邮电大学 一种基于搜索的分层回归测试数据生成方法
CN111858301A (zh) * 2020-06-05 2020-10-30 中国船舶重工集团公司第七0九研究所 基于变更历史的组合服务测试用例集约简方法及装置
CN112988552A (zh) * 2019-12-12 2021-06-18 腾讯科技(深圳)有限公司 应用程序测试方法、装置、设备及存储介质
CN114218069A (zh) * 2021-11-16 2022-03-22 北京百度网讯科技有限公司 回归测试方法、装置、电子设备及存储介质
CN118170692A (zh) * 2024-05-15 2024-06-11 阿里云计算有限公司 代码测试方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101464831A (zh) * 2009-01-09 2009-06-24 西安邮电学院 一种测试用例集缩减技术
CN101908017A (zh) * 2010-06-01 2010-12-08 南京大学 一种基于部分多重覆盖的回归测试用例筛选方法
US20110161936A1 (en) * 2009-12-28 2011-06-30 International Business Machines Method and apparatus for regression testing selection for a framework-based application
CN101908020B (zh) * 2010-08-27 2012-05-09 南京大学 一种基于分类挖掘和版本变更的测试用例优先化方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101464831A (zh) * 2009-01-09 2009-06-24 西安邮电学院 一种测试用例集缩减技术
US20110161936A1 (en) * 2009-12-28 2011-06-30 International Business Machines Method and apparatus for regression testing selection for a framework-based application
CN101908017A (zh) * 2010-06-01 2010-12-08 南京大学 一种基于部分多重覆盖的回归测试用例筛选方法
CN101908020B (zh) * 2010-08-27 2012-05-09 南京大学 一种基于分类挖掘和版本变更的测试用例优先化方法

Cited By (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103870384A (zh) * 2012-12-11 2014-06-18 航天信息股份有限公司 测试用例推定方法及系统
CN103870384B (zh) * 2012-12-11 2017-02-08 航天信息股份有限公司 测试用例推定方法及系统
US9811446B2 (en) 2013-06-26 2017-11-07 International Business Machines Corporation Method and apparatus for providing test cases
CN104572433A (zh) * 2013-10-29 2015-04-29 中国银联股份有限公司 一种金融信息系统测试方法和装置
CN104572433B (zh) * 2013-10-29 2017-09-29 中国银联股份有限公司 一种金融信息系统测试方法和装置
CN106033386A (zh) * 2015-03-10 2016-10-19 联想(北京)有限公司 软件测试方法以及电子设备
US9355018B1 (en) 2015-08-12 2016-05-31 Red Hat Israel, Ltd. History N-section for property location
CN107423214A (zh) * 2017-04-18 2017-12-01 恒生电子股份有限公司 软件回归测试用例获取方法、装置及存储介质和电子设备
CN107908540A (zh) * 2017-07-26 2018-04-13 平安壹钱包电子商务有限公司 测试用例创建方法、装置、计算机设备及介质
CN107908540B (zh) * 2017-07-26 2021-04-06 平安壹钱包电子商务有限公司 测试用例创建方法、装置、计算机设备及介质
CN107515826B (zh) * 2017-08-28 2020-12-01 阿里巴巴(中国)有限公司 测试用例精准推荐方法、装置、系统、设备及存储介质
CN107515826A (zh) * 2017-08-28 2017-12-26 广州阿里巴巴文学信息技术有限公司 测试用例精准推荐方法、装置、系统、设备及存储介质
CN110554952B (zh) * 2018-06-04 2023-01-20 西安邮电大学 一种基于搜索的分层回归测试数据生成方法
CN110554952A (zh) * 2018-06-04 2019-12-10 西安邮电大学 一种基于搜索的分层回归测试数据生成方法
CN110502447A (zh) * 2019-08-30 2019-11-26 西安邮电大学 一种基于图的回归测试用例优先排序方法
CN110502447B (zh) * 2019-08-30 2022-10-25 西安邮电大学 一种基于图的回归测试用例优先排序方法
CN112988552A (zh) * 2019-12-12 2021-06-18 腾讯科技(深圳)有限公司 应用程序测试方法、装置、设备及存储介质
CN112988552B (zh) * 2019-12-12 2023-06-30 腾讯科技(深圳)有限公司 应用程序测试方法、装置、设备及存储介质
CN111858301A (zh) * 2020-06-05 2020-10-30 中国船舶重工集团公司第七0九研究所 基于变更历史的组合服务测试用例集约简方法及装置
CN111858301B (zh) * 2020-06-05 2022-10-11 中国船舶重工集团公司第七0九研究所 基于变更历史的组合服务测试用例集约简方法及装置
CN114218069B (zh) * 2021-11-16 2022-09-23 北京百度网讯科技有限公司 回归测试方法、装置、电子设备及存储介质
US11669672B1 (en) 2021-11-16 2023-06-06 Beijing Baidu Netcom Science Technology Co., Ltd. Regression test method, electronic device and storage medium
CN114218069A (zh) * 2021-11-16 2022-03-22 北京百度网讯科技有限公司 回归测试方法、装置、电子设备及存储介质
CN118170692A (zh) * 2024-05-15 2024-06-11 阿里云计算有限公司 代码测试方法
CN118170692B (zh) * 2024-05-15 2024-08-06 阿里云计算有限公司 代码测试方法

Also Published As

Publication number Publication date
CN102750153B (zh) 2015-11-25

Similar Documents

Publication Publication Date Title
CN102750153A (zh) 一种基于程序变更的回归测试用例集构建方法
CN109720223B (zh) Agv充电管理方法及存储装置及运输系统
CN102736979B (zh) 一种基于符号执行的带反馈测试用例生成方法
CN111177733B (zh) 一种基于数据流分析的软件补丁检测方法及装置
CN106021101A (zh) 对移动终端进行测试的方法及装置
CN110062918A (zh) 在云端网关中进行软件更新的方法、执行该方法的计算机程序和实施该方法的处理单元
RU2017114358A (ru) Подготовка установок и обновлений для программных систем
CN110515843B (zh) 基于缺陷集合与倒排索引的测试用例优先排序方法
CN110515826A (zh) 一种基于次数频谱与神经网络算法的软件缺陷定位方法
CN109800144A (zh) 应用程序的测试方法、系统及装置
CN114755984A (zh) 一种自动化流程机器人的调度方法、调度系统及自动化流程机器人
CN107122626A (zh) 二代测序dna突变检测的生物信息学分析的方法及系统
CN106294129A (zh) 代码覆盖率测试方法及装置
CN114329478A (zh) 一种安卓系统服务内存消耗类漏洞挖掘方法
CN102455897A (zh) 基于实例的迭代编译方法及编译装置
CN109408772A (zh) 对连续性数据中的异常数据的恢复方法
CN107844427A (zh) 一种基于测试资源感知的测试用例排序方法
CN106875015B (zh) 一种飞机故障诊断方法及系统
GB2594498A (en) Instruction scheduling
CN106776265A (zh) 测试用例更新方法与装置
CN105868957A (zh) 一种持续集成方法及装置
CN115328798A (zh) 一种芯片验证自动化回归测试方法及计算机可读存储介质
CN109828786A (zh) 一种基于代码级支持sw_64架构的自动化工具
CN114139853A (zh) 一种基于大数据的钢结构产品清单处理方法和装置
CN108268494B (zh) 一种数据处理与控制逻辑分离的etl调度方法和装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20151125

Termination date: 20210629

CF01 Termination of patent right due to non-payment of annual fee