CN101866316B - 一种基于相对冗余测试集约简的软件缺陷定位方法 - Google Patents

一种基于相对冗余测试集约简的软件缺陷定位方法 Download PDF

Info

Publication number
CN101866316B
CN101866316B CN2010102064048A CN201010206404A CN101866316B CN 101866316 B CN101866316 B CN 101866316B CN 2010102064048 A CN2010102064048 A CN 2010102064048A CN 201010206404 A CN201010206404 A CN 201010206404A CN 101866316 B CN101866316 B CN 101866316B
Authority
CN
China
Prior art keywords
test
test case
collection
statement block
rep
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
CN2010102064048A
Other languages
English (en)
Other versions
CN101866316A (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 CN2010102064048A priority Critical patent/CN101866316B/zh
Publication of CN101866316A publication Critical patent/CN101866316A/zh
Application granted granted Critical
Publication of CN101866316B publication Critical patent/CN101866316B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种基于相对冗余测试集约简的软件缺陷定位方法,首先对源程序进行插桩,执行测试用例,收集测试用例的执行信息;根据各个测试用例对源代码的覆盖情况,对整个测试集进行约简;最后计算语句块的怀疑率,按照其大小对语句块排序生成缺陷定位报告。在使用相同缺陷定位技术的前提下,通过本发明得到的代表集计算的缺陷定位效果要优于传统测试集约简得到的代表集计算的缺陷定位效果,且代表集规模相差不大。

Description

一种基于相对冗余测试集约简的软件缺陷定位方法
技术领域
本发明涉及软件自动化测试中的缺陷定位方法,特别涉及存在大量测试用例的情况下,为了有效降低测试成本,在保持原有语句块覆盖程度的基础上对测试集进行约简;为避免大量测试信息的丢失导致缺陷定位效果的下降,继而通过添加部分冗余测试用例到约简后得到的代表集中来保持或提高缺陷定位效果。
背景技术
随着现代大规模软件版本不断更迭,测试集的规模也变得庞大,软件测试的成本也随之上升。测试集约简技术则被考虑用来解决此类问题,它可以找到原测试集中规模更小的一个子集,且能满足原始的测试需求,如语句块覆盖程度,分支覆盖程度等,从而大大降低了软件测试的成本。
然而传统的测试集约简技术考虑的往往是单一的测试需求,所以当大部分测试用例被约简掉后,附加的有用的测试信息就丢失了。而缺陷定位技术就是一个基于统计的使用所有测试用例的测试信息(包括测试用例通过与否和测试用例的执行轨迹)帮助程序员定位缺陷所在位置的新兴技术。因此,缺陷定位技术会受测试集约简的影响而变得不准确。软件缺陷定位方法目前被大量应用于大型软件***的集成测试、***测试、验收测试和用户问题报告分析等阶段和工作中。随着现代大规模软件日益复杂,自动化软件测试的使用越来越广泛。自动化测试能够产生大量的测试用例,并且能够记录测试用例的执行信息,因此在修复缺陷前存在着大量的测试数据可以利用。传统的调试方法只是对未通过的单个测试用例进行缺陷跟踪,这样在自动化测试的环境下一方面很难同时对多个未通过的测试用例进行跟踪,另一方面只考虑未通过的测试用例而忽略了通过的测试用例所能提供的信息。软件缺陷定位方法可以在自动化测试环境下综合利用测试执行信息来定位软件缺陷,提高软件的质量。
基于执行轨迹的软件缺陷定位方法可通过对测试数据进行分析,自动定位软件中存在的缺陷。该方法需要收集和整理测试用例执行信息,通过对执行轨迹进行比对计算代码的被怀疑程度(怀疑率),开发者可以按照怀疑率从大到小的顺序对被怀疑代码进行审查,减少移除缺陷必须审查的代码数量和范围,提高查找缺陷的效率。但已有的方法通常单独考虑通过和未通过的测试用例,并没有对测试用例进行筛选,不适于大型软件***的缺陷定位。
综上所述,如何有效的约简测试集规模并同时提高或至少保持缺陷定位效果成为软件调试领域的一个热点问题。由于代表集规模往往很小,适当的增加测试用例并不会对测试成本造成太大影响。可以考虑从冗余集中返回部分测试用例来改善语句块覆盖程度的平衡性,从而在不影响测试集约简的前提下,能够保持或提高缺陷定位效果。
发明内容
本发明所要解决的技术问题是针对传统测试集约简算法导致缺陷定位效果下降,提出一种基于相对冗余测试集约简的缺陷定位方法,该方法在保持测试低成本的前提下可以保持或提高缺陷定位的效果。
为实现上所述目的,本发明采用如下的步骤:
1)对源程序进行插桩,执行测试用例,收集测试用例的执行信息,包括执行结果和执行轨迹。
收集和整理测试用例的执行结果并生成执行轨迹,其中执行轨迹可以矩阵的形式表示,每列代表一个测试用例所执行过的语句块情况,1表示执行过,0表示没有执行;每行代表一个语句块被所有测试用例的执行情况;
2)根据各个测试用例对源代码的覆盖情况,对整个测试集进行约简;约简过程为:设整个测试集为T,使用HGS约简算法对所有测试用例进行约简,得到两个测试集合,即代表集REP和冗余集RED;其中冗余集RED又可划分为高度冗余集TIE和候选集CAN,在候选集CAN中选择加入代表集REP的测试用例组成的集合记为关键集KEY,得到新的代表集相对冗余集REL-REP。
根据各个测试用例的代码覆盖情况选择数目尽可能少的测试用例来满足原有的覆盖需求,本发明在该步骤中使用经典的HGS算法进行测试集约简,其原理是根据测试用例的相对重要性并优先保留重要性较高的测试用例,直到达到原测试集的代码覆盖程度。
3)最后根据相对冗余集REL-REP计算语句块的怀疑率,按照其大小对语句块排序生成缺陷定位报告。
根据新得到的代表集中的测试用例的执行结果和执行轨迹计算语句块怀疑率,本发明在该步骤中使用经典的Tarantula方法进行缺陷定位,能够有效利用通过和未通过的测试用例的执行信息取得较好的定位效果。
上述步骤2)中从候选集CAN中选择测试用例的步骤为:根据代表集REP的情况从冗余集RED中选择关键集KEY,其中
Figure BSA00000173011600031
且|KEY|<<|RED|。
关键集KEY的选择条件是:计算候选集CAN中每个测试用例的权重w,再根据设定保留的测试用例个数n,即|KEY|=n,或是分界权重wd,即对任意测试用例t∈KEY,且wt≥wd
权重的计算是根据平衡代表集中测试用例执行轨迹的分布:对代表集REP中的一个测试用例ti和候选集CAN中的一个测试用例tj,它们覆盖的语句块之间存在以下3种情况:
●B1:被tj覆盖但没有被ti覆盖的语句块;
●B2:被ti和tj同时覆盖的语句块;
●B3:被ti覆盖但没有被tj覆盖的语句块。
设REP集合的大小为n,按照B1,B3,B2的由高到低的权重顺序计算CAN集合中的测试用例tj的权值wj如以下公式所示:
w j = Σ i = 1 n Σ k = 1 3 w B k × | B k | .
由于在步骤2)中按照平衡代表集执行轨迹的分布的原则有效的避开了高度冗余情况的出现,且在保留代表集的前提下加入了少量的测试用例,因此在使用相同缺陷定位技术(如Tarantula方法)的前提下,通过本发明得到的代表集计算的缺陷定位效果要优于传统测试集约简得到的代表集计算的缺陷定位效果,且代表集规模相差不大。
下面结合附图进行详细说明。
附图说明
图1是基于相对冗余测试集约简的软件缺陷定位框架结构图,
图2是基于相对冗余测试集约简的软件缺陷定位框架的工作流程图,
图3是测试集的约简和选择框架流程图,
图4是约简处理器(Reduction Processor)的算法流程图,
图5是约简框架流程图中的权值处理器(w Processor)的具体算法流程图,
图6是本专利方法同传统基于执行轨迹缺陷定位方法的定位效果比较图。
具体实施方式
如图1,基于相对冗余测试集约简的软件缺陷定位框架由测试信息收集整理,测试集约简,相对冗余测试用例选择,怀疑率计算和缺陷定位报告生成四个模块构成。测试信息收集整理模块收集和整理测试用例的相关信息;测试集约简模块根据相关的冗余判定标准对测试集进行约简;相对冗余测试用例选择模块根据本专利提出的相对冗余方法对代表集进行测试用例回添操作;最后的怀疑率计算和缺陷定位报告生成模块根据结果计算怀疑率从而进一步生成缺陷定位报告。
本发明的总流程图如图2所示。首先是测试信息的收集整理工作。第1步首先对源程序进行插桩,收集源程序元数据,即关于源程序结构的数据:包括程序中的类,类中的方法,方法中的语句块等。第2步生成各个测试用例的执行驱动文件,包括测试信息收集的一些设置如执行环境、执行信息保存路径等。第3步执行所有的测试用例并收集最终的测试结果,将测试用例的执行轨迹和执行结果保存在指定的目录下。
接下来是测试集的约简和冗余测试用例的回添。测试集约简可以降低测试集的规模从而节约测试成本,但是在一定程度上又会导致部分测试信息的丢失,从而影响缺陷定位的效果。为减小该种影响,以平衡代表集的语句覆盖为目标,在代表集中重新添加一部分冗余集中的测试用例。
本发明的测试集约简模块和相对冗余测试用例选择模块组成的测试用例选择框架如图3所示,其中菱形表示的是数据,矩形表示的是处理过程。各部分的具体含义如下:
●T:原测试集,包括完整的测试信息,即所有测试用例的执行结果和执行轨迹;
●REP:代表集,HGS约简算法的输出结果,能以较少的测试用例满足原始的需求;
●CAN:候选集,冗余集的一部分,用来从中选择能保持或提高缺陷定位效果测试用例的候选测试集合;
●TIE:高度冗余集,冗余集的另一部分,在HGS约简算法中鉴别出来的集合,因和代表集REP中的测试用例有较高的相似度而排除出回添的可能性,否则会造成缺陷定位效果的下降;
●REL-REP:相对冗余集,由代表集REP和从候选集CAN中选出的关键测试用例组成的新的测试集;
●约简处理器:对原始测试集进行约简的模块;
●权值处理器:从候选集CAN中选择部分测试用例回添到代表集REP中的评价模块。
整个用例选择的框架流程为将原始测试集T进行约简,得到三个测试集合,代表集REP,被排除的高度冗余集TIE,以及余下的可以用来回添的候选集CAN。然后根据权值处理器的处理方法,从候选集CAN中选择部分用例回添到代表集REP得到相对冗余集REL-REP。最终再执行相对冗余集REL-REP中的测试用例,并进行评价,得到最终的报告。图4即是测试集约简算法的流程图,其中包括代表集REP和高度冗余集TIE的生成细节。
作为本发明独创部分的核心,权值处理器是对候选集CAN中测试用例的评价模块。该模块的工作流程如图5所示。首先对之前经过约简处理器处理过而生成的代表集REP和候选集CAN进行序列化,然后针对候选集CAN中的每一个用例,都从代表集REP中选择所有的用例,针对二者的路径覆盖向量计算二者的相对冗余权值。对于从二者中分别取出的测试用例ti和tj来说,他们覆盖语句块的情况存在以下三种情况:
●B1:被tj覆盖但没有被ti覆盖的语句块集合;
●B2:被ti和tj同时覆盖的语句块集合;
●B3:被ti覆盖但没有被tj覆盖的语句块集合。
根据语句块覆盖程度的平衡性原理,当我们从候选集CAN中选择测试用例时,需要尽可能的多覆盖B1并避免覆盖B2;B3不是考虑的重点,但覆盖它有助于平衡语句块之间的覆盖程度;因此我们将按照B1,B3,B2的权重顺序进行计算。令|Bk|表示ti和tj的执行轨迹中第k种语句块的数目,
Figure BSA00000173011600051
表示第k种语句块的权重,按照B1,B3,B2的顺序,可以将
Figure BSA00000173011600052
的值设为最高,
Figure BSA00000173011600053
其次,最低,从而在一定程度上拉开了候选集CAN中测试用例不同程度的贡献值。其中相对冗余距离的计算公式如公式(1)所示:
d = | B 1 | × w B 1 + | B 2 | × w B 2 + | B 3 | × w B 3 - - - ( 1 )
本发明的经验公式为 w B 1 = 3 , w B 2 = - 1 , w B 3 = 1 .
对于任意候选集CAN中的元素tj,我们都需要得到其与所有代表集REP中元素的相对冗余距离,最后合并计算其级数。在每次循环过程中,都有wj=wj’+d,这里wj’是指上一个循环结束之后得到的wj值。综上所述,候选集CAN中tj的权值wj如公式(2)所示:
Figure BSA00000173011600059
回添到代表集REP集合中去。本发明提供两种选择,即选择一定数量的排名靠前的测试用例,如选择排名前20的测试用例或是根据具体情况,设定某种阈值并选择大于此阈值的测试用例,如设定基准值c,对候选集CAN中任意的测试用例tj,当且仅当其权值wj≥c时被选择。
在完成所有的选择回添之后,我们得到了相对冗余集REL-REP,根据该测试集计算怀疑率并生成缺陷定位报告。本专利所采用的缺陷定位方法是传统的Tarantula方法,该方法利用所有测试用例的信息来计算各个语句块的怀疑率,其假设是主要被未通过的测试用例执行过的语句块要比主要被通过的测试用例执行过的语句块更有可能含有缺陷。该方法使用下面的公式对各个语句块计算怀疑率:
sus ( b ) = % failed ( b ) % failed ( b ) + % passed ( b ) - - - ( 3 )
其中sus(b)表示语句块b的怀疑率,%failed(b)是执行语句块b的未通过的测试用例个数和所有未通过的测试用例个数的比值,%passed(b)是执行了语句块b的通过的测试用例个数和所有通过的测试用例个数的比值。
本发明使用Emma来对源代码进行插桩,JUnit完成测试用例执行,并用Ant来完成整个流程的自动化。测试对象是开源软件NanoXML,根据预先植入的16个缺陷将其分成16个单缺陷版本,用来对本发明效果进行检测。通过观察实验结果中缺陷语句块的排位来判定实验效果。排位越高,说明缺陷定位效果越好,即程序员需要检测的语句块数量越少;否则,排位越低,说明缺陷定位效果越差,即程序员需要检测的语句块数量越多。因此可以将排在缺陷语句块前的语句块数目与总语句块数目之比作为实验效果好坏的统计指标。假设排在缺陷语句块前的语句块数目为m,总的语句块数目为N,则定义统计指标score=m/N。对于三个测试集:原测试集,代表集和相对冗余集,分别统计其score值,同时统计其规模以便评估本方法的综合效果。如图6所示,在所有的单缺陷版本中,只有在第6个版本的缺陷中,相对冗余集的score值大于原测试集的score值,而其他的版本中相对冗余集中的score值都小于或等于原测试集的score值;在平均情况统计中,相对冗余集的score值小于原测试集的score值。表1则是3类测试集:原测试集,代表集和相对冗余集的规模比较,可以看出在保持或提高缺陷定位效果的情况下,测试集依然维持在较小的规模,验证了本专利的实际效果。
表1
Figure BSA00000173011600062
Figure BSA00000173011600071

Claims (1)

1.一种基于相对冗余测试集约简的软件缺陷定位方法,其特征在于包括以下步骤:
1)对源程序进行插桩,执行测试用例,收集测试用例的执行信息,包括执行结果和执行轨迹;
2)根据各个测试用例对源代码的覆盖情况,对整个测试集进行约简;约简过程为:设整个测试集为T,使用HGS约简算法对所有测试用例进行约简,得到两个测试集合,即代表集REP和冗余集RED;其中冗余集RED又可划分为高度冗余集TIE和候选集CAN,在候选集CAN中选择加入代表集REP的测试用例组成的集合记为关键集KEY,得到新的代表集相对冗余集REL-REP;
其中关键集KEY的选择条件是:设定关键集KEY规模n或者设定分界权重wd;计算候选集CAN中每个测试用例的权重w;如果设定关键集规模n,则选择权重最大的n个测试用例加入KEY集合;如果设定分界权重wd,则选择所有权重大于等于wd的测试用例加入KEY集合,即对任意测试用例t∈KEY,有wt≥wd
而权重的计算是要求平衡所选代表集中测试用例执行轨迹的分布:对代表集REP中的一个测试用例ti和候选集CAN中的一个测试用例tj,它们覆盖的语句块之间存在以下3种情况:
●B1:被tj覆盖但没有被ti覆盖的语句块;
●B2:被ti和tj同时覆盖的语句块;
●B3:被ti覆盖但没有被tj覆盖的语句块;
设REP集合的大小为n,按照B1,B3,B2的由高到低的权重顺序计算CAN集合中的测试用例tj的权值wj如以下公式所示:
Figure FSB00000664973600011
其中,|Bk|表示ti和tj的执行轨迹中第k种语句块的数目,
Figure FSB00000664973600012
表示第k种语句块的权重;
3)最后根据相对冗余集REL-REP以Tarantula方法计算语句块的怀疑率,按照其大小对语句块排序生成缺陷定位报告。
CN2010102064048A 2010-06-23 2010-06-23 一种基于相对冗余测试集约简的软件缺陷定位方法 Expired - Fee Related CN101866316B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2010102064048A CN101866316B (zh) 2010-06-23 2010-06-23 一种基于相对冗余测试集约简的软件缺陷定位方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2010102064048A CN101866316B (zh) 2010-06-23 2010-06-23 一种基于相对冗余测试集约简的软件缺陷定位方法

Publications (2)

Publication Number Publication Date
CN101866316A CN101866316A (zh) 2010-10-20
CN101866316B true CN101866316B (zh) 2012-01-25

Family

ID=42958048

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2010102064048A Expired - Fee Related CN101866316B (zh) 2010-06-23 2010-06-23 一种基于相对冗余测试集约简的软件缺陷定位方法

Country Status (1)

Country Link
CN (1) CN101866316B (zh)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103106133B (zh) * 2011-11-09 2016-12-07 阿里巴巴集团控股有限公司 软件缺陷定位方法及***
CN102708052B (zh) * 2012-04-27 2017-10-20 北京邮电大学 一种单元测试中软件故障自动定位方法
CN103309811B (zh) * 2013-06-27 2015-09-16 南京大学 一种基于测试执行记录快速定位软件代码缺陷的方法
CN103605603B (zh) * 2013-10-12 2016-03-02 南京大学 覆盖表约简的方法及***
CN103617119B (zh) * 2013-12-03 2016-05-11 南通大学 基于语句交互覆盖的回归测试用例选择方法
CN104090837B (zh) * 2014-06-19 2018-02-09 苏州市职业大学 生成测试用例的方法
CN104281525B (zh) * 2014-10-28 2016-12-07 中国人民解放军装甲兵工程学院 一种缺陷数据分析方法及利用其缩减软件测试项目的方法
CN104598375B (zh) * 2014-11-28 2017-09-12 江苏苏测软件检测技术有限公司 一种用于软件开发的缺陷预测方法
CN104699614B (zh) * 2015-03-27 2017-04-26 重庆大学 一种软件缺陷组件预测的方法
CN105159826B (zh) * 2015-08-20 2018-06-15 浪潮(北京)电子信息产业有限公司 一种定位目标程序中的错误语句的方法和装置
CN106528394A (zh) * 2015-09-09 2017-03-22 中兴通讯股份有限公司 一种软件度量检测方法和***
CN105242134B (zh) * 2015-09-22 2018-06-19 许继集团有限公司 一种适用于智能高压设备***级测试的分布式测试方法
CN105095091B (zh) * 2015-09-23 2018-01-09 南京大学 一种基于倒排索引技术的软件缺陷代码文件定位方法
CN105468517B (zh) * 2015-11-10 2018-03-02 中国矿业大学 一种基于黑盒测试用例约简的统计错误定位方法
CN105760295A (zh) * 2015-12-28 2016-07-13 天津大学 基于搜索算法的多缺陷定位方法
CN106886490B (zh) * 2016-12-30 2019-09-20 浙江理工大学 一种基于失效轨迹的程序错误定位方法
CN107102942B (zh) * 2017-04-01 2020-09-25 南京邮电大学 一种基于输入域错误定位的极小故障定位方法
CN108763075A (zh) * 2018-05-21 2018-11-06 北京五八信息技术有限公司 一种测试方法、装置、设备及计算机可读存储介质
CN110187884B (zh) * 2019-06-04 2020-10-27 中国科学技术大学 一种多线程应用场景下的访存指令插桩优化方法
CN111737107B (zh) * 2020-05-15 2021-10-26 南京航空航天大学 一种基于异质信息网络的重复缺陷报告检测方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100407161C (zh) * 2004-09-09 2008-07-30 北京航空航天大学 软件动态聚类测试方法
CN101231614B (zh) * 2008-02-02 2010-06-02 南京大学 一种基于执行轨迹块相似度的软件缺陷定位方法

Also Published As

Publication number Publication date
CN101866316A (zh) 2010-10-20

Similar Documents

Publication Publication Date Title
CN101866316B (zh) 一种基于相对冗余测试集约简的软件缺陷定位方法
CN101231614B (zh) 一种基于执行轨迹块相似度的软件缺陷定位方法
CN105893256B (zh) 基于机器学习算法的软件故障定位方法
CN110134588B (zh) 一种基于代码和组合覆盖的测试用例优先级排序方法及测试***
CN104050075B (zh) Andriod应用程序的测试方法和装置
CN100456281C (zh) 数据划分设备和数据划分方法
CN110147310A (zh) 一种基于变异策略的并行模糊测试调度方法及装置
CN104239219B (zh) 一种基于覆盖的软件缺陷定位技术的在线评测与实验平台及方法
CN105224463A (zh) 一种基于崩溃栈数据的软件缺陷代码定位方法
CN106095684B (zh) 一种预测性变异测试方法
CN108563555A (zh) 基于四目标优化的故障更改代码预测方法
CN107544905A (zh) 回归测试用例集的优化方法和***
CN106126413A (zh) 基于两阶段包裹式特征选择的软件缺陷预测方法
CN110502447A (zh) 一种基于图的回归测试用例优先排序方法
CN107844414A (zh) 一种基于缺陷报告分析的跨项目、并行化缺陷定位方法
CN111581086B (zh) 一种基于RankNet的混合软件错误定位方法及***
CN104318110B (zh) 一种提高大型复杂***风险设计及维修效率的方法
CN112732577A (zh) 一种多任务软件测试用例进化生成方法
CN104765683A (zh) 基于moea/d算法的回归测试用例多目标优化方法
CN117391258B (zh) 一种负碳排放的预测方法、装置、设备及存储介质
CN105701013A (zh) 基于互信息的软件缺陷数据特征选择方法
CN114153735A (zh) 一种基于频谱技术和断言切换技术的缺陷定位方法
CN103455417B (zh) 一种基于马尔可夫模型的软件错误定位***及错误定位方法
CN103617119B (zh) 基于语句交互覆盖的回归测试用例选择方法
CN103353895A (zh) 一种配电网线损数据的预处理方法

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

Termination date: 20140623

EXPY Termination of patent right or utility model