CN101908017B - 一种基于部分多重覆盖的回归测试用例筛选方法 - Google Patents

一种基于部分多重覆盖的回归测试用例筛选方法 Download PDF

Info

Publication number
CN101908017B
CN101908017B CN201010187488A CN201010187488A CN101908017B CN 101908017 B CN101908017 B CN 101908017B CN 201010187488 A CN201010187488 A CN 201010187488A CN 201010187488 A CN201010187488 A CN 201010187488A CN 101908017 B CN101908017 B CN 101908017B
Authority
CN
China
Prior art keywords
test case
test
demand
testing requirement
collection
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.)
Expired - Fee Related
Application number
CN201010187488A
Other languages
English (en)
Other versions
CN101908017A (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 CN201010187488A priority Critical patent/CN101908017B/zh
Publication of CN101908017A publication Critical patent/CN101908017A/zh
Application granted granted Critical
Publication of CN101908017B publication Critical patent/CN101908017B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种基于部分多重覆盖的回归测试用例筛选方法,首先根据软件系统特征和测试用例库的历史数据,构建测试需求覆盖矩阵;再针对修改组件,将测试需求集划分为关注集和无关集;采用HATS算法选择回归测试集;对于测试用例库的维护,采用基于风险或操作剖面定义测试需求的多重覆盖策略;根据给定的多重覆盖策略,采用MHATS算法筛选测试用例集。本发明通过多重覆盖策略来保留冗余的测试用例,从而在精简测试用例库时维持测试用例库的缺陷检测能力;另外在选择回归测试集时面向部分覆盖,同时避免覆盖不相干的测试需求,在进一步减少测试用例数量的同时,降低测试执行和分析的成本。

Description

一种基于部分多重覆盖的回归测试用例筛选方法
技术领域
本发明涉及回归测试下软件系统的测试用例筛选方法,特别涉及软件系统开发和升级中存在大量测试用例的情况下,针对需要回归测试的系统组件,通过达到充分有效的测试需求覆盖来筛选测试用例,降低回归测试成本。
背景技术
软件系统不管是在开发过程中还是在发布以后,总是面临不断的修正和升级。在每一次修改后,为确保软件系统未变更的功能和组件没有受到当前修改的负面影响,需要对软件系统进行充分的回归测试。由于复用的软件组件没有得到充分的回归测试,曾导致阿里亚娜5型火箭发射失败,造成巨大的损失。这说明回归测试的必要性。在当前流行的增量式开发和快速迭代式开发中,新版本的连续发布需要频繁的回归测试;在敏捷(极限)编程环境下,更要求软件系统每天都通过若干次回归测试。这使得回归测试成本在软件开发成本中占据很大比重。如何有效选择回归测试策略从而能够以低成本高质量完成软件系统的回归测试是本发明需要考虑的问题。
直接决定回归测试成本的测试策略是测试用例库的维护和回归测试集的选择操作。在软件系统的开发和升级过程中,不同的开发团队和人员不断增添新的测试用例到测试用例库,这使得库中存在大量冗余的测试用例。如何有效删除冗余的测试用例,并根据软件系统当前的变更选择合适的回归测试集是降低回归测试成本并保证回归测试质量的关键所在。一个测试用例是否冗余决定于它覆盖的测试需求。一个被测软件可以视为测试需求的集合。测试需求定义为被测软件的测试覆盖单元,例如从结构角度,测试需求可以定义为语句块、程序分支、或者变量的定义-引用对;从功能角度,测试需求可以定义为输入的等价类划分、输出的等价类划分、或者功能项等。当前较多的考虑是从结构角度定义测试需求,例如语句块或程序分支。
测试用例约简技术被用于删除冗余的测试用例和选择合适的回归测试集。其原理是:每个测试用例都覆盖一个测试需求集合,可以选择最少数量的测试用例集,只要它们覆盖的测试需求集合的并集等于被测软件,那么这个选定集合就可以用于组成回归测试集或者构成精简后的测试用例库。传统约简技术的问题是:如果用于删除测试用例库中冗余的测试用例,则因为保留的测试用例数量太少,回归测试的缺陷检测能力不能得到保证;如果用于回归测试集选择,则因为约简后的测试用例集覆盖了所有的测试需求,而当前回归测试往往仅需关注被修改的组件,于是又选择了过多的测试用例,增加了回归测试成本。
当前软件系统的修改非常频繁,需要采用面向部分覆盖的回归测试;即只针对修改的软件组件选择回归测试集并达到对相关测试需求的充分覆盖,而避开其他不相干的测试需求。这种处理有以下优点:其一缺陷修复向来不是一次性完成,避开未修复的缺陷组件可以减少“预防性”代码并规避未修复缺陷的干扰;其二软件系统总是包含复用和购买的组件,这些组件的代码或者不可见,或者其修改不可控,绕开这些组件可以完成更有效的回归测试;其三有一些组件可能尚在开发或修改中,能够避开这些未完成组件可以实施更早的回归测试。
发明内容
本发明的主要目的是针对软件系统回归测试时的测试用例库维护问题和回归测试集选择问题,提出一种基于部分多重覆盖的回归测试用例筛选方法,一方面降低测试用例库的冗余度同时保证用例库的缺陷检测能力;另一方面针对修改组件选择回归测试用例,减少回归测试集的规模,在保证回归测试质量前提下降低回归测试成本。
为实现本发明所述目的,本发明采用如下的步骤:
1)首先根据软件系统特征和测试用例库的历史数据,构建测试需求覆盖矩阵;具体过程为:将被测软件系统视为测试需求集合R,测试用例库视为测试用例集合T,根据测试用例库中测试用例的历史执行数据,构筑测试覆盖矩阵Δ(R,T);根据Δ(R,T),给定测试用例tj,可了解该测试用例的覆盖需求集Rj;给定测试需求ri,可了解该测试需求的执行用例集Ti
2)针对修改组件,将测试需求集R划分为关注集CR和无关集R-CR,其中关注集CR是与当前软件修改相关的测试需求集合,包含本次回归测试必须充分覆盖的测试需求;而无关集R-CR是与当前修改无关的测试需求集合;关注集需要被充分测试,以保证回归测试的质量;而无关集可以尽量避开,以降低回归测试的成本。
3)采用HATS算法选择回归测试集,针对关注集CR,选择最少数量的测试用例充分覆盖关注集中的所有测试需求;针对无关集R-CR,选择对无关集中测试需求覆盖少的测试用例;通常一个较大(复杂)的测试用例会同时覆盖较多的关注需求和无关需求,HATS算法设定一个权值,平衡考虑对关注需求的覆盖和对无关需求的避免。
4)对于测试用例库的维护,采用基于风险或操作剖面定义的测试需求多重覆盖策略;按照操作剖面,不同的测试需求对使用者的重要程度或使用频率互不相同。对较重要的和使用频率较高的测试需求,需要更多的覆盖次数。另外不同测试需求所代表的风险-即可疑程度或关键程度等也各不相同,其中需求关键程度可采用卡诺(Kano)模型描述。风险较大的测试需求也需要更多的覆盖次数。
5)根据给定的多重覆盖策略,采用MHATS算法筛选测试用例集,MHATS算法重复调用HATS算法,直到所有测试需求被覆盖指定次数。实例验证表明基于多重覆盖策略维护测试用例库,既可以减少用例库的冗余度,又可以有效保证用例库的缺陷检测能力。
上述步骤2)中集合操作“-”的含义定义如下:
Figure GSA00000137340400031
(A和B是两个集合)。
上述步骤3)的HATS算法遵循启发式贪婪搜索模式,采用不断迭代的方法,一次选择一个或多个局部最优(如覆盖最多数量关注需求或者覆盖最少数量无关需求)的测试用例,直到关注集CR中所有测试需求都被覆盖;HATS算法包括三个测试用例筛选策略:
策略1.必选策略,如果当前关注集cur_CR中存在测试需求ri,ri仅被当前用例集cur_T中唯一的一个测试用例tj覆盖,则用例tj必然被选入当前选择集cur_Select;
策略2.替代策略,如果当前用例集cur_T中存在两个测试用例tj和tk,tj覆盖的当前关注集cur_CR中需求子集包含tk覆盖的cur_CR中需求子集,且tj覆盖的无关需求子集被tk覆盖的无关需求子集包含,则用例tk可以从集合cur_T中删除;
策略3.优选策略,选择当前用例集cur_T中最合适的测试用例tj,tj覆盖“尽可能多”的当前关注集cur_CR中测试需求,同时覆盖“尽可能少”的无关集中测试需求。
策略3所述的优选策略定义两个指标:贡献指标和损益指标;测试用例tj的贡献指标ζj的定义公式为:
ζ j = | R j ∩ cur _ CR | | cur _ CR |
表示tj覆盖的关注需求占集合cur_CR的比例;用例tj的损益指标υj的定义公式为:
υ j = 1 - | R j ∩ ( R - CR ) | | R - CR |
表示tj未覆盖的无关需求占无关需求集的比例;为综合考虑用例tj对关注集的覆盖和对无关集的避免,引入权重因子α(0≤α≤1),定义tj的效用指标ωj为其贡献指标和损益指标的加权和,公式如下:
ωj=α·ζj+(1-α)·υj
因子α越大,表示越关注贡献指标,即对关注需求的覆盖越重视;α越小,表示越关注损益指标,即对无关需求的避免越重视。优选策略选择集合cur_T中具有最大效用指标值的测试用例。实例表明同全覆盖用例集约简相比较,HATS算法可以进一步较大程度降低约简后用例集规模,从而节约测试成本。
上述步骤4)的多重覆盖策略的具体过程为:针对测试需求集R定义需求覆盖表ΘR,ΘR是一个二元组集合,定义公式如下:
ΘR={<ri,θi>|ri∈R∧θi≥0∧θi≤|Ti|}
对测试需求集合R中的每一个测试需求ri,有且仅有一个二元组<ri,θi>属于ΘR,其中θi是需求ri的覆盖次数要求,即至少需要θi个不同的测试用例覆盖需求ri,Ti表示需求ri的执行用例集,需求覆盖表ΘR通过软件系统的操作剖面或者卡诺模型来导出。
上述步骤5)的MHATS算法具体过程为:给定需求覆盖表ΘR,MHATS算法在每一次迭代中,将尚未满足覆盖次数要求的测试需求用于组成关注集CR,已满足的测试需求则组成无关集,以此调用HATS算法。这样处理可以使集合R中所有测试需求最终被覆盖的次数尽量符合覆盖表ΘR的约定。除用于测试用例库维护外,MHATS算法也可以用于回归测试集选择。
本发明方法在测试用例约简过程中通过多重覆盖策略来保留冗余的测试用例,从而在精简测试用例库时维持测试用例库的缺陷检测能力;另外在选择回归测试集时面向部分覆盖,同时避免覆盖不相干的测试需求,这样处理可以使一些复杂的覆盖大量测试需求的测试用例不被选入回归测试集,从而在进一步减少测试用例数量的同时,降低测试执行和分析的成本。
附图说明
图1是基于部分多重覆盖的回归测试用例筛选方法的技术框架,
图2是一个简单示例程序及其测试用例库的测试历史数据,
图3是图2中示例程序对应的测试需求覆盖矩阵,
图4是HATS算法的流程图,
图5是HATS算法中优选策略的流程图,
图6是卡诺(Kano)模型中需求类型示意图,
图7是MHATS算法的流程图,
图8是HATS算法测试用例集约简效果同全覆盖约简的比较图,
图9是MHATS算法测试用例集约简的效果图,
图10是MHATS算法约简用例集的缺陷检测能力同单覆盖约简的比较图。
具体实施方式
图1所示为基于部分多重覆盖的回归测试用例筛选方法的技术框架。框架的输入是被测软件系统和回归测试用例库;输出是针对当前软件修改所选择的回归测试集,以及精简后的回归测试用例库。技术框架分成五个部分:首先根据被测软件组成和回归测试用例库的历史数据构建测试覆盖矩阵。接下来考虑两个应用场景:其一是根据当前软件修改选择合适的回归测试集;其二是约简回归测试用例库,删除冗余的测试用例。考虑场景一,第一步根据当前修改组件将测试用例集划分为关注需求集和无关需求集;第二步运用HATS算法选择回归测试集;输出是针对当前修改的回归测试集。考虑场景二,第一步根据软件组成和需求特点建立多重覆盖策略;第二步运用MHATS算法约简回归测试用例库;输出是精简后的回归测试用例库。其中多重覆盖策略可应用于场景一,在测试成本和时间允许的情况下补充回归测试用例,提高回归测试的质量。
首先根据被测软件组成和回归测试用例库的历史测试数据构建测试覆盖矩阵。被测软件可以认为是一个测试需求集合R={r1,r2,...rN},其中ri代表第i个测试需求。测试需求是被测程序的测试覆盖单元,一般从软件结构角度可以定义为语句块、程序分支、或者变量定义-引用对;从功能角度可以定义为输入的等价类划分、输出的等价类划分、或者功能项等。从功能角度到结构角度可以定义映射关系,如输入空间划分出的一个等价类可以映射到一个语句块或程序分支的集合。
回归测试用例库是一个测试用例集合T={t1,t2,...,tn},其中tj代表第j个测试用例。根据历史测试数据,测试用例tj执行后会覆盖测试需求集合的一个子集,称为tj的覆盖需求集
Figure GSA00000137340400051
根据各个测试用例的覆盖需求集,给定测试需求ri,可以确定测试需求ri的执行用例集
Figure GSA00000137340400052
其中包含覆盖需求ri的所有测试用例。根据测试需求集R和测试用例集T之间的覆盖关系可以构建测试需求覆盖矩阵Δ(R,T)。Δ(R,T)是一个|R|×|T|的二进制矩阵,其中|R|和|T|分别代表集合R和T中的元素数量。矩阵元素δij的定义如公式(1)所示。
Figure GSA00000137340400053
按照测试需求覆盖矩阵Δ(R,T),测试用例tj的覆盖需求集Rj对应Δ(R,T)的一列,而测试需求ri的执行用例集Ti对应Δ(R,T)的一行。矩阵元素δij为1当且仅当tj∈Ti或者ri∈Rj
图2所示为一个简单的示例程序及其测试用例库的测试覆盖数据。图3所示为其对应的测试需求覆盖矩阵。图3中测试用例t6的覆盖需求集R6={r1,r2,r3,r4,r6,r7,r13};而测试需求r6对应的执行用例集T6={t1,t5,t6,t8}。测试用例t1的覆盖需求集同用例t6的覆盖集相同,但两个用例的执行结果不同。说明两者虽然覆盖了相同的测试需求,但缺陷检测能力并不相同。测试需求r12的执行用例集T12为空集,说明需求r12没有被任何用例覆盖。
接下来考虑应用场景一,即针对当前软件修改选择合适的回归测试集。第一步针对当前修改组件将测试需求集R划分为关注需求集CR和无关需求集R-CR。其中集合操作“-”的含义由公式(2)定义。
Figure GSA00000137340400061
(A和B是两个集合)    (2)
关注集CR同当前的软件修改直接相关,包含本次回归测试必须充分覆盖的测试需求。无关集中的测试需求同当前软件修改不相干,在选择回归测试集时避免覆盖无关集中的测试需求可以降低回归测试执行和分析的成本。这基于以下五个方面的考虑:
1.减少必须覆盖的测试需求数量可以进一步减少所需的回归测试用例数量,从而降低测试成本和时间;
2.避免覆盖无关的测试需求可以避免涉及无关的测试需求和代码,从而减少测试分析的工作量和成本;
3.缺陷修复向来不是一次性完成,避开未修复的缺陷组件可以减少“预防性”代码并规避未修复缺陷的干扰,增加回归测试的可行性;
4.软件程序总是包含复用和购买的组件,这些组件的代码或者不可见,或者其修改不可控,绕开这些组件可以完成更有效的测试,减少软件测试的依赖性;
5.有一些组件可能尚在开发和修改中,能够避开这些未完成组件可以实施更早的测试,增加目标软件的可测试性。
第二步是选择回归测试集,既充分覆盖关注集CR,又避免覆盖无关集。给定测试需求集合R,其代表用例集ΥR是一个测试用例集合,所包含的测试用例覆盖集合R中所有的测试需求。显然代表用例集ΥR可用于组成回归测试集。为减少回归测试成本,需要寻求最小规模的代表用例集ΥR,其对应的问题就是测试用例集约简问题。针对测试用例集T={t1,t2,...,tn},令集合∏={R1,R2,...,Rn},为各测试用例覆盖需求集所组成的集合。解决测试用例集约简问题等同于寻找集合∏中的最少元素,使其并集等于集合R。后者是著名的最小覆盖集问题,已被证明是NP完全问题。
考虑测试需求集的部分覆盖使问题更进一步,给定关注集CR,要求寻找最优的代表用例集ΥCR,达到以下两个目标:
目标1.ΥCR中的测试用例数量最少,即:min(|ΥCR|);
目标2.无关需求的覆盖数量最少,即:
Figure GSA00000137340400071
解决部分覆盖测试用例集约简问题同样是一个NP完全问题。本发明采用HATS算法解决该问题。HATS算法遵循启发式贪婪搜索模式,采用不断迭代的方法,一次选择一个(或多个)局部最优(如覆盖最多数量关注需求或者覆盖最少数量无关需求)的测试用例,直到集合CR中所有测试需求都被覆盖。HATS算法定义以下标记:
cur_T:当前的备选测试用例集;
cur_CR:当前的关注需求集,其中的测试需求尚未被覆盖;
cur_Select:本次迭代选择的测试用例集合。
HATS算法基于以下三个策略选择测试用例:
策略1.必选策略。如果集合cur_CR中存在测试需求ri,ri仅被集合cur_T中唯一的一个测试用例tj覆盖,则用例tj必然被选入集合cur_Select。
策略2.替代策略。如果集合cur_T中存在两个测试用例tj和tk,tj覆盖的cur_CR中需求子集包含tk覆盖的cur_CR中需求子集(即
Figure GSA00000137340400072
),且tj覆盖的无关需求子集被tk覆盖的无关需求子集包含,则用例tk可以从集合cur_T中删除。
策略3.优选策略。选择集合cur_T中最合适的测试用例tj,tj覆盖“尽可能多”的cur_CR中关注需求,同时覆盖“尽可能少”的无关需求。
图4所示是HATS算法的执行流程图。算法的输入是测试需求集R、关注需求集CR、和测试用例集T,输出是代表用例集ΥCR,即针对当前修改的回归测试集。在每次迭代中,首先应用替代策略删除集合cur_T中冗余的测试用例;然后应用必选策略组成集合cur_Select;如果不能应用必选策略,则应用优选策略选择合适的测试用例组成cur_Select;接下来从cur_T中移除cur_Select中用例,同时将cur_Select并入输出集合ΥCR;最后删除cur_CR中被cur_Select中用例覆盖的关注需求。
考虑优选策略,一个问题是给定测试用例tj,如果tj覆盖较多数量的关注需求,那么通常也会覆盖较多数量的无关需求。这里需要一个折中,为此定义两个指标:贡献指标和损益指标。测试用例tj的贡献指标ζj的定义由公式(3)描述,表示tj覆盖的关注需求占集合cur_CR的比例。用例tj的损益指标υj的定义由公式(4)描述,表示tj未覆盖的无关需求占无关需求集的比例。
&zeta; j = | R j &cap; cur _ CR | | cur _ CR | - - - ( 3 )
&upsi; j = 1 - | R j &cap; ( R - CR ) | | R - CR | - - - ( 4 )
显然两个指标越高,表示测试用例tj越合适。为综合考虑用例tj对关注集的覆盖和对无关集的避免,定义tj的效用指标ωj为其贡献指标和损益指标的加权和,公式(5)描述了这个定义。其中α(0≤α≤1)为权重因子,α越大,表示越关注贡献指标,即对关注需求的覆盖越重视;α越小,表示越关注损益指标,即对无关需求的避免越重视。
ωj=α·ζj+(1-α)·υj    (5)
优选策略选择集合cur_T中具有最大效用指标值的测试用例,其处理流程如图5所示。针对cur_T中每一个测试用例tj,首先计算其效用指标,然后选择第一个具有最大效用指标值的测试用例作为输出。
考虑应用场景2,即约简和维护回归测试用例库。第一步是根据软件组成和需求特点建立多重覆盖策略。多重覆盖策略意味着每一个测试需求被覆盖不止一次,这要求保留冗余的测试用例。考虑图2和图3所示的例子,其中测试用例t1和t6的覆盖需求集等同。按用例集约简要求,用例t1和t6只需保留一个。但在本例中t1和t6的执行结果并不相同,说明两个用例可以检测不同的缺陷,删除其中一个会降低测试用例库的缺陷检测能力。
多重覆盖策略可以基于操作剖面或需求风险来定义。两者都针对功能性需求。操作剖面定义了软件系统的使用方式,其中软件被认为是操作的集合,一个操作一般对应软件的一个功能项,各操作相互独立。操作剖面定义每个操作出现的几率,所有几率值累加为1。显然出现几率高的操作应该具有更多的覆盖次数。例如操作a的出现几率是0.2,操作b的出现几率是0.1,那么操作a被覆盖的次数应该是操作b被覆盖次数的2倍。
需求风险可基于需求项的可疑程度或关键程度来确定。一种定义需求风险的设施是卡诺模型(Kano Model)。图6所示是卡诺模型定义的三种需求类型。其中基本型需求是必须的,实现程度不够会使客户满意度大幅下降,但实现的非常充分也并不能使客户满意;期望型需求是客户期望得到的,客户满意度基本同其实现程度成正比;兴奋性需求不是必备的,但充分的实现会极大提高客户的满意度。显然这三类需求需要不同的覆盖次数。一种设定是以期望型需求的覆盖次数为基准,当软件尚未成型质量并不稳定时,基本型需求的覆盖次数高于期望型需求,而兴奋性需求的覆盖次数则低于期望型需求;当软件已经成型质量稳定后,兴奋型需求的覆盖次数将高于期望型需求,而基本型需求的覆盖次数则低于期望型需求。
运用需求跟踪矩阵可以将功能性需求的覆盖次数要求转化为结构性需求(如语句块)的覆盖次数要求。多重覆盖策略可以采用需求覆盖表描述。给定需求集R,其对应的需求覆盖表ΘR是一个二元组集合,定义由公式(6)描述。对集合R中的每一个需求ri,有且仅有一个二元组<ri,θi>属于ΘR,其中θi是测试需求ri的覆盖次数要求,即至少需要θi个不同的测试用例覆盖需求ri
ΘR={<ri,θi>|ri∈R∧θi≥0∧θi≤|Ti|}    (6)
第二步是运用MHATS算法根据需求覆盖表ΘR约简回归测试用例库。给定测试需求集合R和对应的需求覆盖表ΘR,MHATS算法寻找最优的多重覆盖代表用例集ΥMR,达到以下两个目标:
目标1.ΥMR中的测试用例数量最少,即:min(|ΥMR|);
目标2.各测试需求被ΥMR中不同测试用例的覆盖次数满足ΘR中要求,即:
Figure GSA00000137340400091
MHATS算法通过重复调用HATS算法,直到所有测试需求被覆盖指定次数。MHATS算法增加以下标记:
cur_ΘR:当前的需求覆盖表,对测试需求ri,对应的θi表示尚欠缺的覆盖次数。
图7所示为MHATS算法的执行流程。算法的输入是测试需求集R、需求覆盖表ΘR和测试用例集T,输出是多重覆盖代表用例集ΥMR,即约简后的测试用例库。在每一次迭代中,算法首先根据当前的需求覆盖表cur_ΘR组建还需要覆盖的测试需求集cur_CR。然后以cur_CR为关注需求集、cur_T为测试用例集调用HATS算法。HATS算法尝试寻找测试用例集覆盖cur_CR中的测试需求,同时避免覆盖cur_CR以外的测试需求。这种处理可以使集合R所有需求最终被覆盖的次数尽量符合覆盖表ΘR的约定。HATS算法的输出被赋予cur_Select集合,后者被并入ΥMR,同时从cur_T中移除;然后用于调整cur_ΘR。因为在覆盖表ΘR中,测试用例ri要求覆盖的次数θi少于能够覆盖需求ri的测试用例数量(即θi≤|Ti|),所以在有限次迭代和调用HATS算法后,MHATS算法能够成功结束,所得到的代表用例集ΥMR满足覆盖表ΘR的要求。
除用于测试用例库维护外,MHATS算法也可以用于回归测试集选择。此时如果测试需求ri不属于关注集CR,则对应的θi为0;如果需求ri属于集合CR,则根据选定的多重覆盖策略,θi设置为大于等于1的合适值。在测试成本和时间许可的前提下,这样处理可以提高回归测试的质量。
为说明本发明在技术上的先进性。我们采用开源软件NanoXML和JTopas检验测试用例集筛选效果,包括约简规模和约简后用例集的缺陷检测能力,其中测试需求定义为语句块。设计30个实验,每个实验中选择不同的CR集合,占R集合的比例从3%~20%不等,符合实际软件项目的情况。首先比较部分覆盖测试用例集约简(HATS算法)和全覆盖用例集约简所得到的约简后用例集规模,如图8所示。这里全覆盖用例集约简算法采用经典的HGS算法,HGST代表全覆盖约简;HATS0.1和HATS0.5分别表示因子α的值为0.1和0.5。为便于比较,图中纵坐标采用约简集占初始用例集规模的百分比值。从图中箱型图可以看出,HATS算法可以进一步较大程度降低约简后用例集规模,从而节约测试成本。当权重因子α设置为较大的值(0.5)时,规模约简的效果更好。
其次考察多重覆盖约简(MHATS算法)对测试用例集的规模约简效果。考察30个实验,在每个实验中,由覆盖CR集合的所有测试用例构成初始用例集,观察MHATS算法约简后用例集规模占初始集规模的百分比值;在每一次迭代中,MHATS算法调用的是HATS0.1,如图9所示。为简单起见,覆盖表ΘR中各测试需求要求的覆盖次数等同。如MHATS2表示所有测试需求要求2个以上的测试用例覆盖;如果对测试需求ri,其执行用例集Ti规模小于对应的θi,则θi降为|Ti|。按图中箱型图可以看出,当覆盖表ΘR中θ值为3时,约简后用例集规模一般不超过初始用例集的20%;即使θ值升为8,除个别情况外,约简集规模一般也不超过初始集的30%。这样处理可以较大程度减少测试用例库规模和冗余度,降低测试用例库维护的成本。
最后考察多重覆盖约简对测试用例集缺陷检测能力的维持能力。对每个实验,只考虑针对CR集合的覆盖和缺陷检测。为确保实验充分性,采用变异杀除率MS(英文对应名称Mutation Score)作为缺陷检测能力的衡量。变异杀除率MS指先对被测软件程序做充分变异,如对一段程序生成尽可能多的变异程序,每个变异程序包含一个操作符或操作数上的差异;然后运行测试用例集,计算能够发现缺陷的变异程序数量占全部变异程序数量的比值。显然MS值越高说明测试用例集的缺陷检测能力越好。这里比较MHATS算法所得约简集同单覆盖约简(HGS算法)所得约简集的缺陷检测能力,如图10所示。为便于比较,约简集的变异杀除率MSΥ显示的是占初始用例集杀除率MST的百分比值。从图10中可以看出,多重覆盖约简集的缺陷检测能力明显优于单覆盖约简。同初始用例集相比较,除个别情况外,多重覆盖约简集的缺陷检测能力能够维持在初始用例集的95%以上,从而在降低测试成本的同时有效保证了回归测试的质量。

Claims (2)

1.一种基于部分多重覆盖的回归测试用例筛选方法,其特征在于包括以下步骤:
1)首先根据软件系统特征和测试用例库的历史数据,构建测试需求覆盖矩阵;具体过程为:将被测软件系统视为测试需求集合R,测试用例库视为测试用例集合T,根据测试用例库中测试用例的历史执行数据,构筑测试需求覆盖矩阵Δ(R,T);Δ(R,T)是一个|R|×|T|的二进制矩阵,其中|R|和|T|分别代表集合R和T中的元素数量,矩阵元素δij的定义如公式(1)所示:
Figure FSB00000781054000011
按照测试需求覆盖矩阵Δ(R,T),测试用例tj的覆盖需求集Rj对应Δ(R,T)的一列,而测试需求ri的执行用例集Ti对应Δ(R,T)的一行;矩阵元素δij为1当且仅当tj∈Ti或者ri∈Rj
2)针对修改组件,将测试需求集R划分为关注集CR和无关集R-CR,其中关注集CR是与当前软件修改相关的测试需求集合,包含本次回归测试必须充分覆盖的测试需求;而无关集R-CR是与当前修改无关的测试需求集合;集合操作“-”的含义定义如下:
Figure FSB00000781054000012
A和B是两个集合;
3)采用HATS算法选择回归测试集,针对关注集CR,选择最少数量的测试用例充分覆盖关注集中的所有测试需求;针对无关集R-CR,选择对无关集中测试需求覆盖少的测试用例;上述的HATS算法遵循启发式贪婪搜索模式,采用不断迭代的方法,一次选择一个或多个局部最优的测试用例,直到关注集CR中所有测试需求都被覆盖;HATS算法包括三个测试用例筛选策略:
策略1.必选策略,如果当前关注集cur_CR中存在测试需求ri,ri仅被当前用例集cur_T中唯一的一个测试用例tj覆盖,则用例tj必然被选入当前选择集cur_Select;
策略2.替代策略,如果当前用例集cur_T中存在两个测试用例tj和tk,tj覆盖的当前关注集cur_CR中需求子集包含tk覆盖的cur_CR中需求子集,且tj覆盖的无关需求子集被tk覆盖的无关需求子集包含,则用例tk可以从集合cur_T中删除;
策略3.优选策略,选择当前用例集cur_T中最合适的测试用例tj,tj覆盖“尽可能多”的当前关注集cur_CR中测试需求,同时覆盖“尽可能少”的无关集中测试需求;
4)对于测试用例库的维护,采用基于风险或操作剖面定义测试需求的多重覆盖策略;具体过程为:针对测试需求集R定义需求覆盖表ΘR,ΘR是一个二元组集合,定义公式如下:
ΘR={<ri,θi>|ri∈R∧θi≥0∧θi≤|Ti|} 
对测试需求集合R中的每一个测试需求ri,有且仅有一个二元组<ri,θi>属于ΘR,其中θi是需求ri的覆盖次数要求,即至少需要θi个不同的测试用例覆盖需求ri,Ti表示需求ri的执行用例集,需求覆盖表ΘR通过软件系统的操作剖面或者卡诺模型来导出;
5)根据给定的多重覆盖策略,采用MHATS算法筛选测试用例集,MHATS算法重复调用HATS算法,直到所有测试需求被覆盖指定次数;其具体过程为:给定需求覆盖表ΘR,MHATS算法在每一次迭代中,将尚未满足覆盖次数要求的测试需求用于组成关注集CR,已满足的测试需求则组成无关集,以此调用HATS算法,使各测试需求被覆盖的次数尽量符合覆盖表ΘR的约定。
2.根据权利要求1所述的基于部分多重覆盖的回归测试用例筛选方法,其特征在于步骤3)中策略3所述的优选策略定义两个指标:贡献指标和损益指标;测试用例tj的贡献指标ζj的定义公式为:
Figure FSB00000781054000021
其中集合Rj表示用例tj的覆盖需求集,表示tj覆盖的关注需求占集合cur_CR的比例;用例tj的损益指标υj的定义公式为:
表示tj未覆盖的无关需求占无关需求集的比例;并引入权重因子α,0≤α≤1,定义tj的效用指标ωj为其贡献指标和损益指标的加权和,公式如下:
ωj=α·ζj+(1-α)·υj。 
CN201010187488A 2010-06-01 2010-06-01 一种基于部分多重覆盖的回归测试用例筛选方法 Expired - Fee Related CN101908017B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201010187488A CN101908017B (zh) 2010-06-01 2010-06-01 一种基于部分多重覆盖的回归测试用例筛选方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201010187488A CN101908017B (zh) 2010-06-01 2010-06-01 一种基于部分多重覆盖的回归测试用例筛选方法

Publications (2)

Publication Number Publication Date
CN101908017A CN101908017A (zh) 2010-12-08
CN101908017B true CN101908017B (zh) 2012-10-03

Family

ID=43263481

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201010187488A Expired - Fee Related CN101908017B (zh) 2010-06-01 2010-06-01 一种基于部分多重覆盖的回归测试用例筛选方法

Country Status (1)

Country Link
CN (1) CN101908017B (zh)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103092748A (zh) * 2011-11-07 2013-05-08 阿里巴巴集团控股有限公司 一种确定需要进行回归测试的测试用例的方法及系统
CN102637247A (zh) * 2012-02-23 2012-08-15 浙江工商大学 一种集成概化与消隐的高维数据匿名处理方法
CN102662833B (zh) * 2012-03-21 2014-12-03 天津书生软件技术有限公司 一种管理测试用例的方法
CN102750153B (zh) * 2012-06-29 2015-11-25 南京大学 一种基于程序变更的回归测试用例集构建方法
CN103678097A (zh) * 2012-09-05 2014-03-26 百度在线网络技术(北京)有限公司 一种选择回归测试用例的方法和装置
CN103870384B (zh) * 2012-12-11 2017-02-08 航天信息股份有限公司 测试用例推定方法及系统
CN103425581A (zh) * 2013-08-12 2013-12-04 浪潮电子信息产业股份有限公司 一种基于学习控制模型的软件测试方法
CN103617119B (zh) * 2013-12-03 2016-05-11 南通大学 基于语句交互覆盖的回归测试用例选择方法
CN104346278A (zh) * 2014-09-28 2015-02-11 上海新炬网络技术有限公司 一种基于矩阵模型的软件测试方法
CN105426282B (zh) * 2015-11-05 2018-04-03 天津津航计算技术研究所 优化数字芯片验证平台测试用例回归次数的方法
US9779013B2 (en) * 2016-01-12 2017-10-03 Wipro Limited Method and system for optimizing a test suite comprising plurality of test cases
CN105786708B (zh) * 2016-03-21 2018-06-01 苏州大学 一种迭代划分测试方法和系统
CN106095662A (zh) * 2016-05-23 2016-11-09 浪潮电子信息产业股份有限公司 一种基于程序切片的测试用例集约简方法
CN106791824B (zh) * 2016-11-29 2019-05-31 深圳Tcl数字技术有限公司 挑选测试用屏方法及装置
CN109144845A (zh) * 2017-06-28 2019-01-04 中国石油化工股份有限公司 一种基于缺陷收敛性的自动化测试方法
CN107908548B (zh) * 2017-10-10 2020-07-14 深圳市融壹买信息科技有限公司 一种生成测试用例的方法和装置
CN108108558B (zh) * 2017-12-21 2021-10-22 郑州云海信息技术有限公司 一种基于覆盖次数统计评价随机验证质量的方法及系统
CN109348472B (zh) * 2018-09-20 2021-11-05 广东小天才科技有限公司 一种基于单点推送的ota升级方法及系统
CN109522226A (zh) * 2018-11-09 2019-03-26 贵州医渡云技术有限公司 大数据平台测试方法、装置、电子设备及计算机可读介质
CN111240959B (zh) * 2019-12-27 2021-01-15 广东睿江云计算股份有限公司 一种回归测试范围的规划方法
CN111563041B (zh) * 2020-05-08 2022-02-08 吴迪 一种测试用例按需精准执行方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101236494A (zh) * 2008-02-02 2008-08-06 南京大学 一种基于覆盖密度的信息系统测试组合生成方法
CN101464831A (zh) * 2009-01-09 2009-06-24 西安邮电学院 一种测试用例集缩减技术

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101236494A (zh) * 2008-02-02 2008-08-06 南京大学 一种基于覆盖密度的信息系统测试组合生成方法
CN101464831A (zh) * 2009-01-09 2009-06-24 西安邮电学院 一种测试用例集缩减技术

Also Published As

Publication number Publication date
CN101908017A (zh) 2010-12-08

Similar Documents

Publication Publication Date Title
CN101908017B (zh) 一种基于部分多重覆盖的回归测试用例筛选方法
Yadav et al. An integrated fuzzy-ANP and fuzzy-ISM approach using blockchain for sustainable supply chain
RU2734788C2 (ru) Способы и система процесса разработки приложения для управления иерархическими активами
Taghian et al. Optimization of conventional rule curves coupled with hedging rules for reservoir operation
Hosseini Shirvani et al. An iterative mathematical decision model for cloud migration: A cost and security risk approach
US11368526B2 (en) System and method for risk-aware server load balancing
JP2019507932A (ja) 情報システムのためのクラウドコンピューティングリソースを管理するためのシステムおよび方法
US20190163463A1 (en) Relational patch orchestration
Cerrone et al. Heuristics for the strong generalized minimum label spanning tree problem
Reneses et al. Water value in electricity markets
Sarfati et al. Increase-decrease game under imperfect competition in two-stage zonal power markets–Part I: Concept analysis
US8548842B1 (en) Systems, methods and computer program products for assessing delivery affectivity in quality function deployment
US20170116171A1 (en) Automated structured cloud datatester
Wang et al. Price heuristics for highly efficient profit optimization of service composition
Adami et al. Structure and complexity in six supply chains of the Brazilian wind turbine industry
US20220012233A1 (en) Creation of a Blockchain with Blocks Comprising an Adjustable Number of Transaction Blocks and Multiple Intermediate Blocks
Hesamzadeh et al. Simulation and evaluation of zonal electricity market designs
Li et al. A genetic algorithm enhanced automatic data flow management solution for facilitating data intensive applications in the cloud
Choi et al. Relative weight comparison between virtual key factors of cloud computing with analytic network process
Bushehrian et al. An adaptive and cost‐efficient migration to cloud approach in dynamic environments
US8533016B1 (en) System and method for selecting a portfolio
Curtis Update on CISQ and ISO 25010
US20220414580A1 (en) Sales talent development support system, sales talent development support method, and sales talent development support program
Fujita et al. Planning of supply chain risks in a make-to-stock context through a System Dynamics approach
Zbořil SECURITY RISK MANAGEMENT–CLOUD ENVIRONMENT

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: 20121003

Termination date: 20150601

EXPY Termination of patent right or utility model