CN105975388A - 基于频谱的增量式缺陷定位方法 - Google Patents
基于频谱的增量式缺陷定位方法 Download PDFInfo
- Publication number
- CN105975388A CN105975388A CN201610184439.3A CN201610184439A CN105975388A CN 105975388 A CN105975388 A CN 105975388A CN 201610184439 A CN201610184439 A CN 201610184439A CN 105975388 A CN105975388 A CN 105975388A
- Authority
- CN
- China
- Prior art keywords
- statement
- test
- test case
- sequence
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3676—Test management for coverage analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Test And Diagnosis Of Digital Computers (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了基于频谱的增量式缺陷定位方法,该方法采用增量式逐步迭代的方法,利用程序信息和测试信息找出程序缺陷语句或者预测缺陷语句可能存在的范围。该方法首先通过运行测试用例,收集测试用例在程序中执行的覆盖信息即频谱信息以及运行结果信息生成覆盖信息表;再对覆盖信息表进行统计分析,计算程序语句可疑度,根据可疑度对程序语句进行排序获得缺陷定位序列;根据定位序列中语句排列逐个进行排错,直到找到引发程序异常的语句。本发明从多角度采取优化策略提高软件缺陷定位的效率,提高了测试用例的覆盖率,很好地减少了收集频谱的开销,提高了可疑度算法的精确性。
Description
技术领域
本发明涉及一种基于频谱的增量式缺陷定位方法,属于软件测试技术领域。
背景技术
多年来,人们在缺陷定位的研究中提出了许多方法,主要通过程序的静态信息和动态信息来定位程序错误。但获得静态信息的开销较大,对于大型软件,全面的静态分析甚至是不现实的,而动态信息的收集主要是运行测试用例,并不会给测试带来过多的开销。同时,由于动态信息包含了程序运行时的信息,与利用静态信息的方法相比,可以提供更准确的结果。
利用程序频谱信息进行缺陷定位,是目前比较切实有效的软件缺陷定位方法,程序频谱是一种表示程序运行时的覆盖信息,反应程序运行某一特征的代码剖面信息。程序频谱与程序行为之间存在着一定的关系,通过研究运行失败测试用例得到的频谱信息与运行通过测试用例得到的频谱信息之间的差异性可为软件缺陷定位提供帮助。对于程序的单条语句,被失败测试用例执行的越多,通过的测试用例执行的越少,语句含有错误的可能性就越大,发生错误的概率就越大。利用这种特征对程序语句被通过测试用例以及失败测试用例的覆盖情况进行统计分析,找出含有缺陷的程序语句。对基于频谱的程序定位方法,这里
发明内容
本发明目的在于解决了上述现有技术的不足,提出了一种基于频谱的增量式缺陷定位方法,该方法采取优化策略产生一种新的缺陷定位方法,使缺陷定位的效率更高,本发明采取一种增量式的方法执行测试用例,并考虑了大量测试用例情况下的边际效应,对后续增加的测试用例对可疑度的贡献进行动态加权,对语句可疑度进行修正,根据修正后的定位序列进行缺陷定位。具体概述如下:对采集的所有测试用例集进行等量随机分组,选择其中一组测试用例执行,收集本组测试用例的执行信息(即频谱)以及结果信息,生成覆盖信息表,对覆盖信息表进行统计分析,进行语句可疑度计算,根据可疑度值的大小获得定位序列。重新选择一组新的测试用例执行,原组测试用例的频谱信息与结果信息与新组测试用例执行信息进行动态加权对原可疑度进行修正,获得新的定位序列,新的定位序列与原定位序列进行比较,若序列趋于稳定或测试用例均执行完毕,则终止测试用例的执行,根据获得的最新定位序列逐个进行排错,直到找到引发程序异常的语句。
本发明解决其技术问题所采取的技术方案是:一种基于频谱的增量式缺陷定位方法,该方法包括如下步骤:
步骤1:获取可执行的待测程序以及测试用例集,测试用例分组;
步骤1-1:获取待测的可执行程序P;
步骤1-2:将程序P的每条语句进行编号,按序编为S1,S2,S3,…,Sj,…,Sn,将编号集合记为S,其中Sj表示程序P的第j条语句,n为程序语句的总条数;
步骤1-3:获取测试用例集,记为Listsuites;
步骤1-4:将测试用例集Listsuites中的测试用例进行等量随机分组,共分成k组,并对组进行编号,依次编为Group1,Group2,Group3,...,Groupk;
步骤2:运行测试用例,获取覆盖信息表;
步骤2-1:选取一组测试用例;
步骤2-2:对选择的测试用例集中的测试用例进行编号,按序编为
test1,test2,test3,…,testi,…,testm,其中testi表示选定测试用例组中的第i条测试用例,m为选定测试用例组中测试用例的总条数;
步骤2-3:从选定的测试用例集按序读取测试用例testi;
步骤2-4:运行当前读取的测试用例testi;
步骤2-5:标记语句覆盖情况;
步骤2-5-1:判定程序P的语句Sj是否被测试用例覆盖,如果“是”,则转步骤2-5-2:,否则转步骤2-5-3;
步骤2-5-2:将语句标记为1;
步骤2-5-3:将语句标记为0;
步骤2-5-4:判定程序P是否执行结束,如果“是”,则转步骤2.5.5),否则转步骤2-5-1:,直到程序P的n条语句均被判定覆盖情况;
步骤2-5-5:收集执行完当前测试用例获得的频谱信息
T(S1),T(S2),T(S3),…,T(Sj),…,T(Sn),其中T(Sj)表示程序P的第j条语句被当前运行测试用例覆盖的情况;
步骤2-6:判定测试用例运行结果;
步骤2-6-1:获取当前测试用例testi在程序中的实际运行结果;
步骤2-6-2:获取当前测试用例testi的预期运行结果;
步骤2-6-3:判断testi的实际运行结果与预期结果是否相同,如果“是”,转步骤2.6.4),否则转步骤2.6.5);
步骤2-6-4:运行结果记为0,记入Ri中,Ri表示测试用例运行结果情况;
步骤2-6-5:运行结果记为1,记入Ri中,Ri表示测试用例运行结果情况;
步骤2-7:收集测试用例testi的运行情况,记为:
F[testi]{T(S1),T(S2),T(S3),…,T(Sj),…,T(Sn),Ri},
其中:T(Sj)表示语句Sj被当前测试用例覆盖的情况,即频谱信息;Ri表示当前测试用例的运行通过情况,即结果信息;
步骤2.8:将F[testi]{T(S1),T(S2),T(S3),…,T(Sj),…,T(Sn),Ri}按行存入如图1所示的覆盖信息表G中,G由F[testi]{T(S1),T(S2),T(S3),…,T(Sj),…,T(Sn),Ri}累积生成;
步骤2.9:判断选定的测试用例集中的所有的测试用例是否均被执行,如果“是”,转步骤2-10:,否则转步骤2-3;
步骤2-10:获取包含选定测试用例集中所有测试用例的频谱信息以及结果信息的覆盖信息表G;
步骤3:可疑度计算;
步骤3-1:针对Sj语句,收集执行完选定测试用例集所提供的<aef,aep,anf,anp>,其中,ef表示测试用例i执行语句Sj,且执行实际结果与预期结果不一致;
ep表示某测试用i例执行语句Sj,且执行实际结果与预期结果一致;
nf表示某测试用例i没有执行语句Sj,且执行实际结果与预期结果不一致;
np表示某测试用例i没有执行语句Sj,且执行实际结果与预期结果一致;
表示语句Sj被测试用例覆盖且测试用例失败的次数,Gi,j表示覆盖信息表G的第i行第j列的元素值,Ri表示覆盖信息G中R列的第i行元素值;
表示语句Sj被测试用例覆盖且测试用例通过的次数;
表示语句Sj没有被测试用例覆盖且测试用例失败的次数;
表示语句Sj没有被测试用例覆盖且测试用例通过的次数;
步骤3-2:令<Aef,Aep,Anf,Anp>=<aef,aep,anf,anp>,将<Aef,Aep,Anf,Anp>初始化为<aef,aep,anf,anp>的当前值;
步骤3-3:根据公式1计算语句Sj的可疑度fSj;
步骤3-4:将记入Zrough中,Zrough表示可疑度值序列;
步骤3-5:判断所有语句是否均获得可疑度值,如果“是”,转步骤3-6,否则转步骤3-1;
步骤3-6:获得语句可疑度值序列Zrough;
步骤4:获取初始定位序列;
步骤4-1:获取程序语句编号序列S:S1,S2,S3,…,Sj,…,Sn;
步骤4-2:获取语句序列S:S1,S2,S3,…,Sj,…,Sn相应语句的可疑度值序列
Zrough:Z1,Z2,Z3,…,Zj,…,Zn,其中Zj表示第j条语句的可疑度值;
步骤4-3:根据Zrough中可疑度值进行降序排列;
步骤4-4:根据已排序的Zrough序列,匹配对应的程序语句编号,对
S:S1,S2,S3,…,Sj,…,Sn进行排序,排序后的S即为缺陷定位序列,记为Srough;
步骤5:测试用例增量;
步骤5-1:增加一组测试用例并执行;
步骤5-1-1:选取下一组测试用例;
步骤5-1-2:重复步骤2-2:至步骤3-1;
步骤5-2:可疑度修正;
步骤5-2-1:获取执行完上一组测试用例获得语句Sj的<Aef,Aep,Anf,Anp>;
步骤5-2-2:将ef,ep,nf,np统称为ev,利用公式2分别计算ef,ep,nf,np再次发生的概率p(ef),p(ep),p(nf),p(np);
步骤5-2-3:利用公式3分别计算ef,ep,nf,np再次发生后所提供的信息量H(ef),H(ep),H(nf),H(np);
步骤5-2-4:利用公式4分别计算ef,ep,nf,np的增量权重αef,αep,αnf,αnp;
其中,k为测试用例组数,1/k即为选定执行的测试用例条数占测试用例总条数的百分比;
步骤5-2-5:获取执行完本选定组测试用例获得的语句Sj的<aef,aep,anf,anp>,利用公式5,分别计算Aef,Aep,Anf,Anp,
Aev=Aev+αev×aev 公式5
步骤5-2-6:利用公式1重新计算语句可疑度;
步骤5-2-7:将fSj记入zslight中,zslight表示修正后的可疑度值序列;
步骤5-2-8:判断所有语句是否均获得修正后的可疑度值,如果“是”,转步骤5.2.9),否则转步骤5-2-1;
步骤5-2-9:获得语句可疑度值序列zslight;
步骤5-3:定位序列修正;
步骤5-3-1:获取语句编号序列S:S1,S2,S3,…,Sj,…,Sn;
步骤5-3-2:获取语句序列S:S1,S2,S3,…,Sj,…,Sn相应语句的可疑度值序列
zslight:z1,z2,z3,…,zj,…,zn,其中zj表示修正后的第j条语句的可疑度值;
步骤5-3-3:根据zslight中可疑度值进行降序排列;
步骤5-3-4:根据已排序的zslight序列,匹配对应的程序语句编号,对
S:S1,S2,S3,…,Sj,…,Sn进行排序,将排序后的S序列即为修正后定位序列,记为Sslight;
步骤6:定位序列判定;
步骤6-1:检验所有测试用例是否均执行完毕,如果“是”,转步骤6-8;
步骤6-2:获取定位序列Srough;
步骤6-3:获取定位序列Sslight;
步骤6-4:将Sslight与Srough进行比较,检验Sslight相对于Srough是否稳定,如果“是”,转步骤6-8:,否则转步骤6-5;
步骤6-5:令Srough=Sslight,
步骤6-6:Sslight清空;
步骤6-7:转步骤5-1;
步骤6-8:Sslight判定为最终定位序列;
步骤7:根据定位序列进行缺陷语句定位;
步骤7-1:获取最终定位序列Sslight;
步骤7-2:读取Sslight中的编号Sj;
步骤7-3:查看程序P的语句Sj是否含有缺陷,如果“是”,转步骤7-4:,否则转步骤7-2;
步骤7-4:确定程序语句Sj为缺陷语句;
步骤7-5:检验程序P所有缺陷是否均被定位,如果“是”,转步骤7-6:,否则转步骤7-2;
步骤7-6:缺陷定位结束。
有益效果:
1、本发明利用增量的方式执行测试用例,在语句可疑度计算中考虑到了多测试用例的边际效应,对缺陷定位序列进行实时修正,提高缺陷定位的效率,降低软件开发过程中缺陷定位的成本。
2、本发明采取优化策略产生一种新的缺陷定位方法,使缺陷定位的效率更高,该方法采取一种增量式的方法执行测试用例,并考虑了大量测试用例情况下的边际效应,对后续增加的测试用例对可疑度的贡献进行动态加权,对语句可疑度进行修正,根据修正后的定位序列进行缺陷定位。
3、本发明增量式体现在测试用例的分批执行,实时对定位序列进行修正,旨在减少收集程序谱的开销,提高软件缺陷定位的效率。
4、本发明从多角度采取优化策略提高软件缺陷定位的效率,提高了测试用例的覆盖率,很好地减少了收集频谱的开销,提高了可疑度算法的精确性。
附图说明
图1为本发明测试用例执行过程示意图。
图2为本发明程序语句可疑度计算示意图。
图3为本发明初始定位序列生成示意图。
图4为本发明修正定位序列生成示意图。
图5为本发明最终定位序列判定示意图。
图6为本发明缺陷定位过程示意图。
具体实施方式
下面结合说明书附图对本发明创造作进一步的详细说明。
本发明的基于频谱的增量式缺陷定位方法是通过执行测试用例获得动态信息进行缺陷定位的方法。首先选定部分测试用例执行,对程序运行结果进行收集产生覆盖信息表,再根据覆盖信息表进行统计分析,进行可疑度计算,进而根据程序可疑度获得初始定位序列,采取逐步添加测试用例的方式对定位序列进行实时修正,获得排序相对稳定的定位序列,从测试用例集执行到定位缺陷语句的实现步骤为:
步骤1:获取可执行的待测程序以及测试用例集,测试用例分组;
步骤1-1:获取待测的可执行程序P,即包含缺陷语句的可执行程序;
步骤1-2:对程序P的每条语句进行编号,依次编为S1,S2,S3,…,Sj,…,Sn,其中,Sj表示程序P的第j条语句。对语句进行编号为可疑度计算以及语句排序提供便利;
步骤1-3:获取测试用例集,记为Listsuites,测试用例按照特定的规则利用测试工具自动生成。一条测试用例由测试输入、执行条件以及预期结果组成;
步骤1-4:将测试用例集Listsuites中的测试用例进行等量随机分组,共分成k组,并对组进行编号,依次编为Group1,Group2,Group3,...,Groupk;测试用例的分组为测试用例的增量执行提供便利。随机分组的目的在于使得每组测试用例中包含各种类型的测试用例,保证每组测试用例的多样性。
步骤2:运行测试用例,获取程序执行的动态信息,如图1所示;
步骤2-1:选取一组测试用例;
步骤2-2:对选择的测试用例集中的测试用例进行编号,按序编为
test1,test2,test3,…,testi,…,testm,其中testi表示选定测试用例组中的第i条测试用例,m为选定测试用例组中测试用例的总条数;对测试用例进行编号便于对执行情况进行统计分析;
步骤2-3:从选定的测试用例集中读取测试用例testi;
步骤2-4:根据测试用例的输入以及执行条件执行读取的测试用例testi;
步骤2-5:在测试用例执行过程中对未覆盖语句以及覆盖的语句用“0”和“1”进行区分标记,“0”表示语句没有被当前测试用例执行,“1”表示语句被当前测试用例执行;
步骤2-6:测试用例执行结束,获取实际运行结果,将执行结果与测试用例的预期结果进行比较,用“0”和“1”进行区分标记执行结果。“0”表示实际执行结果与预期结果一致,测试用例为通过的测试用例;“1”表示实际执行结果与预期结果不一致,测试用例为失败的测试用例;
步骤2-7:用gcoverage收集测试用例的执行情况,执行情况包括测试用例执行过程中的语句覆盖情况以及最终执行结果情况,由“0”和“1”表示为频谱
F[testi]{T(S1),T(S2),T(S3),…,T(Sj),…,T(Sn),Ri},也即频谱信息,表示测试用例运行轨迹。其中,T(Sj)表示测试用例testi对语句Sj的覆盖情况,Ri表示第i条测试用例的运行结果;步骤2.9将F[testi]{T(S1),T(S2),T(S3),…,T(Sj),…,T(Sn),Ri}按行存入覆盖信息表G中,G由F[testi]{T(S1),T(S2),T(S3),…,T(Sj),…,T(Sn),Ri}累积生成,形成覆盖信息表目的在于对覆盖信息进行统计分析。
步骤2.8:转步骤2-3:,读取并执行下一条测试用例,收集测试用例的运行情况,持续读取测试用例并执行,直至选定的测试用例集中的测试用例均被执行并获得覆盖信息;
步骤2.9:获得包含选定测试用例集中所有测试用例的覆盖信息表G;
步骤3:用可疑度值来衡量语句含有缺陷的可能性,进行语句可疑度计算,如图2;
步骤3-1:针对Sj语句,对覆盖信息表进行统计分析,收集执行完选定测试用例集所提供的<aef,aep,anf,anp>,其中,ef表示测试用例i执行语句Sj,且执行实际结果与预期结果不一致;
ep表示某测试用i例执行语句Sj,且执行实际结果与预期结果一致;
nf表示某测试用例i没有执行语句Sj,且执行实际结果与预期结果不一致;
np表示某测试用例i没有执行语句Sj,且执行实际结果与预期结果一致;
表示语句Sj被测试用例覆盖且测试用例失败的次数,Gi,j表示覆盖信息表G的第i行第j列的元素值,Ri表示覆盖信息G中R列的第i行元素值;
表示语句Sj被测试用例覆盖且测试用例通过的次数;
表示语句Sj没有被测试用例覆盖且测试用例失败的次数;
表示语句Sj没有被测试用例覆盖且测试用例通过的次数;
步骤3-2:令<Aef,Aep,Anf,Anp>=<aef,aep,anf,anp>,即将<Aef,Aep,Anf,Anp>初始化为<aef,aep,anf,anp>的当前值;
步骤3-3:根据公式1计算语句Sj的可疑度fSj,语句可疑度值越大,含有缺陷的可能性就越大,语句可疑度值越大,含有缺陷的可能性就越大;
步骤3-4:对计算的语句可疑度值进行存储,将记入Zrough中,Zrough表示可疑度值序列;
步骤3-5:转步骤3-1:,计算下一条语句的可疑度值,持续进行,直到所有的语句均进行统计分析,获得可疑度值;
步骤3-6:获得完整语句可疑度值序列Zrough;
步骤4:获取初始定位序列如图3;
步骤4-1:获取程序语句编号序列S:S1,S2,S3,…,Sj,…,Sn,S为程序语句编号集合;
步骤4-2:获取语句序列S:S1,S2,S3,…,Sj,…,Sn相应语句的可疑度值序列
Zrough:Z1,Z2,Z3,…,Zj,…,Zn,其中Zj表示第j条语句的可疑度值,可疑度作为错误定位的依据,可疑度值越大的语句含有缺陷的可能性就越大;
步骤4-3:根据Zrough中可疑度值进行降序排列,排列越前的语句含有缺陷的可能性越大;
步骤4-4:根据已排序的Zrough序列,匹配对应的程序语句编号,对
S:S1,S2,S3,…,Sj,…,Sn进行排序,可疑度值大的语句编号排列在前,若遇到可疑度值相同的语句则编号小的语句排列在前,排序后的S即为缺陷定位序列,记为Srough,Srough即为初始定位序列;
步骤5:增量式的缺陷定位方法中,本发明采取逐步增加测试用例的方式,并实时对缺陷定位序列进行修正。测试用例增量执行,修正定位序列生成如图4;
步骤5-1:选择下一组测试用例并执行,收集覆盖信息,生成覆盖信息表;
步骤5.2)针对语句Sj,对覆盖信息表进行统计,获得执行完本组测试用例获得的<aef,aep,anf,anp>;
步骤5-3:利用<Aef,Aep,Anf,Anp>,利用公式2分别计算ef,ep,nf,np再次发生的概率,并利用公式3计算各自发生所提供的信息量,利用公式4求得加权因子,如公式5中利用加权因子对<Aef,Aep,Anf,Anp>进行修正,获得修正后的<Aef,Aep,Anf,Anp>;
Aev=Aev+αev×aev 公式5
其中,ev为ef,ep,nf,np的统称,计算过程中分别用ef,ep,nf,np进行替换。
步骤5-3:获取语句Sj的<Aef,Aep,Anf,Anp>,利用公式1重新计算语句的可疑度值,并存入可疑度值序列zslight中;
步骤5.4:转步骤5-2,计算下一条语句的可疑度,持续进行,直至所有语句均重新获得可疑度值,并计入zslight;
步骤5.5:对可疑度值序列zslight进行降序排列,根据已排序的zslight同步对程序语句编号序列S进行排序,可疑度值大的语句编号在前,若遇到可疑度值相同的语句则语句编号小的语句在前,获得修正后的定位序列Sslight;
步骤6:定位序列作为缺陷定位的依据,需要判定修正后的定位序列是否为最终的定位序列,定位序列的判定如图5;
步骤6-1:判定所有测试用例是否均被执行,如果均被执行则判定Sslight为最终的定位序列,否则转步骤6-2;
步骤6-2:将定位序列Srough与Sslight进行比较,若Sslight相对于Srough稳定则判定Ssligh为最终的定位序列,否则转步骤6-3;
步骤6-3:将Sslight序列赋给Srough,Sslight清空,转步骤5-1:,执行一组新的测试用例,获取新的Sslight,进行定位序列判定;
步骤7:根据定位序列定位缺陷语句,缺陷定位过程如图6;
步骤7-1:定位序列作为缺陷定位的依据,获取最终定位序列Sslight;
步骤7-2:语句在Sslight中的顺序决定了缺陷查找的顺序,读取Sslight中的编号Sj;
步骤7-3:查看程序P中语句Sj是否含有缺陷,如果含有缺陷,则断定语句Sj为缺陷语句,否则转步骤7-2;
步骤7-5:检验程序P所有缺陷是否均被定位,如果程序P的缺陷均已定位,缺陷定位结束,否则转步骤7-2。
表1:覆盖信息表
S1 | S2 | S3 | S4 | S5 | S6 | S7 | Ri | |
Test1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
Test2 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 |
Test3 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 |
Test4 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Test5 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 |
Test6 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 |
Test7 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
Test8 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 |
Test9 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
Test10 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 |
Test11 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 |
Test12 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 1 |
Test13 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 |
Test14 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 |
Test15 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
Test16 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 |
Test17 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 0 |
Test18 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 |
Test19 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 |
Test20 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 |
本发明是请根据上述表1的覆盖信息表所示,进行描述。
Claims (7)
1.一种频谱信息去冗余优化的软件缺陷方法,其特征在于,所述方法包含如下步骤:
获取初始定位序列;包括:
获取程序语句编号序列S:S1,S2,S3,…,Sj,…,Sn;
获取语句序列S:S1,S2,S3,…,Sj,…,Sn相应语句的可疑度值序列Zrough:Z1,Z2,Z3,…,Zj,…,Zn,其中Zj表示第j条语句的可疑度值;
根据Zrough中可疑度值进行降序排列;
根据已排序的Zrough序列,匹配对应的程序语句编号,对S:S1,S2,S3,…,Sj,…,Sn进行排序,排序后的S即为缺陷定位序列,记为Srough;
测试用例增量执行;包括:
增加一组测试用例并执行;
选取下一组测试用例;
可疑度修正;
获取执行完上一组测试用例获得语句Sj的<Aef,Aep,Anf,Anp>;
将ef,ep,nf,np统称为ev,利用公式(2)分别计算ef,ep,nf,np再次发生的概率p(ef),p(ep),p(nf),p(np);
根据公式3分别计算ef,ep,nf,np再次发生后所提供的信息量H(ef),H(ep),H(nf),H(np);
根据公式4分别计算ef,ep,nf,np的增量权重αef,αep,αnf,αnp;
其中,k为测试用例组数,1/k即为选定执行的测试用例条数占测试用例总条数的百分比;
获取执行完本选定组测试用例获得的语句Sj的<aef,aep,anf,anp>,利用公式5,分别计算Aef,Aep,Anf,Anp,
Aev=Aev+αev×aev 公式5
根据公式1重新计算语句可疑度
将记入zslight中,zslight表示修正后的可疑度值序列;
判断所有语句是否均获得修正后的可疑度值;
获得语句可疑度值序列zslight;
定位序列修正;
获取语句编号序列S:S1,S2,S3,…,Sj,…,Sn;
获取语句序列S:S1,S2,S3,…,Sj,…,Sn相应语句的可疑度值序列zslight:z1,z2,z3,…,zj,…,zn,其中zj表示修正后的第j条语句的可疑度值;
根据zslight中可疑度值进行降序排列;
根据已排序的zslight序列,匹配对应的程序语句编号,对S:S1,S2,S3,…,Sj,…,Sn进行排序,将排序后的S序列即为修正后定位序列,记为Sslight;
定位序列判定;
根据定位序列进行缺陷语句定位。
2.根据权利要求1所述的一种基于频谱信息的增增量式软件缺陷方法,其特征在于,所述方法包括:
步骤1:获取可执行的待测程序以及测试用例集,测试用例分组;
步骤1-1:获取待测的可执行程序P;
步骤1-2:将程序P的每条语句进行编号,按序编为S1,S2,S3,…,Sj,…,Sn,将编号集合记为S,其中Sj表示程序P的第j条语句,n为程序语句的总条数;
步骤1-3:获取测试用例集,记为Listsuites;
步骤1-4:将测试用例集Listsuites中的测试用例进行等量随机分组,共分成k组,并对组进行编号,依次编为Group1,Group2,Group3,...,Groupk。
3.根据权利要求1所述的一种基于频谱信息的增增量式软件缺陷方法,其特征在于,所述方法包括:
步骤2:运行测试用例,获取覆盖信息表;
步骤2-1:选取一组测试用例;
步骤2-2:对选择的测试用例集中的测试用例进行编号,按序编为test1,test2,test3,…,testi,…,testm,其中testi表示选定测试用例组中的第i条测试用例,m为选定测试用例组中测试用例的总条数;
步骤2-3:从选定的测试用例集按序读取测试用例testi;
步骤2-4:运行当前读取的测试用例testi;
步骤2-5:标记语句覆盖情况;
步骤2-5-1:判定程序P的语句Sj是否被测试用例覆盖,如果“是”,则转步骤2-5-2:,否则转步骤2-5-3;
步骤2-5-2:将语句标记为1;
步骤2-5-3:将语句标记为0;
步骤2-5-4:判定程序P是否执行结束,如果“是”,则转步骤2.5.5,否则转步骤2-5-1:,直到程序P的n条语句均被判定覆盖情况;
步骤2-5-5:收集执行完当前测试用例获得的频谱信息T(S1),T(S2),T(S3),…,T(Sj),…,T(Sn),其中T(Sj)表示程序P的第j条语句被当前运行测试用例覆盖的情况;
步骤2-6:判定测试用例运行结果;
步骤2-6-1:获取当前测试用例testi在程序中的实际运行结果;
步骤2-6-2:获取当前测试用例testi的预期运行结果;
步骤2-6-3:判断testi的实际运行结果与预期结果是否相同,如果“是”,转步骤2.6.4,否则转步骤2.6.5;
步骤2-6-4:运行结果记为0,记入Ri中,Ri表示测试用例运行结果情况;
步骤2-6-5:运行结果记为1,记入Ri中,Ri表示测试用例运行结果情况;
步骤2-7:收集测试用例testi的运行情况,记为F[testi]{T(S1),T(S2),T(S3),…,T(Sj),…,T(Sn),Ri},
其中:T(Sj)表示语句Sj被当前测试用例覆盖的情况,即频谱信息;Ri表示当前测试用例的运行通过情况,即结果信息;
步骤2.8:将F[testi]{T(S1),T(S2),T(S3),…,T(Sj),…,T(Sn),Ri}按行存入如图1所示的覆盖信息表G中,G由F[testi]{T(S1),T(S2),T(S3),…,T(Sj),…,T(Sn),Ri}累积生成;
步骤2.9:判断选定的测试用例集中的所有的测试用例是否均被执行,如果“是”,转步骤2-10:,否则转步骤2-3;
步骤2-10:获取包含选定测试用例集中所有测试用例的频谱信息以及结果信息的覆盖信息表G。
4.根据权利要求1所述的一种基于频谱信息的增增量式软件缺陷方法,其特征在于,所述方法包括:
步骤3:可疑度计算;
步骤3-1:针对Sj语句,收集执行完选定测试用例集所提供的<aef,aep,anf,anp>,其中,ef表示测试用例i执行语句Sj,且执行实际结果与预期结果不一致;
ep表示某测试用i例执行语句Sj,且执行实际结果与预期结果一致;
nf表示某测试用例i没有执行语句Sj,且执行实际结果与预期结果不一致;
np表示某测试用例i没有执行语句Sj,且执行实际结果与预期结果一致;
表示语句Sj被测试用例覆盖且测试用例失败的次数,Gi,j表示覆盖信息表G的第i行第j列的元素值,Ri表示覆盖信息G中R列的第i行元素值,即:
表示语句Sj被测试用例覆盖且测试用例通过的次数;
表示语句Sj没有被测试用例覆盖且测试用例失败的次数;
表示语句Sj没有被测试用例覆盖且测试用例通过的次数;
步骤3-2:令<Aef,Aep,Anf,Anp>=<aef,aep,anf,anp>,将<Aef,Aep,Anf,Anp>初始化为<aef,aep,anf,anp>的当前值;
步骤3-3:根据公式1计算语句Sj的可疑度
步骤3-4:将记入Zrough中,Zrough表示可疑度值序列;
步骤3-5:判断所有语句是否均获得可疑度值,如果“是”,转步骤3-6,否则转步骤3-1;
步骤3-6:获得语句可疑度值序列Zrough。
5.根据权利要求1所述的一种基于频谱信息的增增量式软件缺陷方法,其特征在于,所述定位序列判定包括:
步骤6-1:检验所有测试用例是否均执行完毕,如果“是”,转步骤6-8;
步骤6-2:获取定位序列Srough;
步骤6-3:获取定位序列Sslight;
步骤6-4:将Sslight与Srough进行比较,检验Sslight相对于Srough是否稳定,如果“是”,转步骤6-8:,否则转步骤6-5;
步骤6-5:令Srough=Sslight;
步骤6-6:Sslight清空;
步骤6-7:转步骤5-1;
步骤6-8:Sslight判定为最终定位序列。
6.根据权利要求1所述的一种基于频谱信息的增增量式软件缺陷方法,其特征在于,根据定位序列进行缺陷语句定位包括:
步骤7-1:获取最终定位序列Sslight;
步骤7-2:读取Sslight中的编号Sj;
步骤7-3:查看程序P的语句Sj是否含有缺陷,如果“是”,转步骤7-4:,否则转步骤7-2;
步骤7-4:确定程序语句Sj为缺陷语句;
步骤7-5:检验程序P所有缺陷是否均被定位,如果“是”,转步骤7-6:,否则转步骤7-2;
步骤7-6:缺陷定位结束。
7.根据权利要求1所述的一种基于频谱信息的增增量式软件缺陷方法,其特征在于,所述方法是对采集的所有测试用例集进行等量随机分组,选择其中一组测试用例执行,收集本组测试用例的执行信息以及结果信息,生成覆盖信息表,对覆盖信息表进行统计分析,进行语句可疑度计算,根据可疑度值的大小获得定位序列,重新选择一组新的测试用例执行,原组测试用例的频谱信息与结果信息与新组测试用例执行信息进行动态加权对原可疑度进行修正,获得新的定位序列,新的定位序列与原定位序列进行比较,若序列趋于稳定或测试用例均执行完毕,则终止测试用例的执行,根据获得的最新定位序列逐个进行排错,直到找到引发程序异常的语句。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610184439.3A CN105975388B (zh) | 2016-03-28 | 2016-03-28 | 基于频谱的增量式缺陷定位方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610184439.3A CN105975388B (zh) | 2016-03-28 | 2016-03-28 | 基于频谱的增量式缺陷定位方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105975388A true CN105975388A (zh) | 2016-09-28 |
CN105975388B CN105975388B (zh) | 2019-05-03 |
Family
ID=56989253
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610184439.3A Active CN105975388B (zh) | 2016-03-28 | 2016-03-28 | 基于频谱的增量式缺陷定位方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105975388B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109376080A (zh) * | 2018-09-27 | 2019-02-22 | 北京大学 | 时间适配的自动化缺陷定位方法和装置 |
CN110209573A (zh) * | 2019-05-08 | 2019-09-06 | 三峡大学 | 一种增强软件故障定位效果的方法 |
CN110515826A (zh) * | 2019-07-03 | 2019-11-29 | 杭州电子科技大学 | 一种基于次数频谱与神经网络算法的软件缺陷定位方法 |
CN111275198A (zh) * | 2020-01-16 | 2020-06-12 | 北京理工大学 | 一种轴承异常检测方法及系统 |
CN112711537A (zh) * | 2020-12-31 | 2021-04-27 | 武汉船舶通信研究所(中国船舶重工集团公司第七二二研究所) | 软件缺陷定位方法及装置、电子设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070240113A1 (en) * | 2006-01-30 | 2007-10-11 | Microsoft Corporation | Model independent input reduction |
CN104008051A (zh) * | 2014-05-16 | 2014-08-27 | 南京邮电大学 | 频谱信息去冗优化的软件缺陷定位方法 |
-
2016
- 2016-03-28 CN CN201610184439.3A patent/CN105975388B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070240113A1 (en) * | 2006-01-30 | 2007-10-11 | Microsoft Corporation | Model independent input reduction |
CN104008051A (zh) * | 2014-05-16 | 2014-08-27 | 南京邮电大学 | 频谱信息去冗优化的软件缺陷定位方法 |
Non-Patent Citations (2)
Title |
---|
BENOIT BAUDRY 等: "Improving Test Suites for Efficient Fault Localization", 《28TH INTERNATIONAL CONFERENCE ON SOFTWARE ENGINEERING》 * |
王新平 等: "基于执行轨迹的软件缺陷定位方法研究", 《计算机科学》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109376080A (zh) * | 2018-09-27 | 2019-02-22 | 北京大学 | 时间适配的自动化缺陷定位方法和装置 |
CN109376080B (zh) * | 2018-09-27 | 2021-10-01 | 北京大学 | 时间适配的自动化缺陷定位方法和装置 |
CN110209573A (zh) * | 2019-05-08 | 2019-09-06 | 三峡大学 | 一种增强软件故障定位效果的方法 |
CN110209573B (zh) * | 2019-05-08 | 2023-06-02 | 三峡大学 | 一种增强软件故障定位效果的方法 |
CN110515826A (zh) * | 2019-07-03 | 2019-11-29 | 杭州电子科技大学 | 一种基于次数频谱与神经网络算法的软件缺陷定位方法 |
CN111275198A (zh) * | 2020-01-16 | 2020-06-12 | 北京理工大学 | 一种轴承异常检测方法及系统 |
CN111275198B (zh) * | 2020-01-16 | 2023-10-24 | 北京理工大学 | 一种轴承异常检测方法及系统 |
CN112711537A (zh) * | 2020-12-31 | 2021-04-27 | 武汉船舶通信研究所(中国船舶重工集团公司第七二二研究所) | 软件缺陷定位方法及装置、电子设备及存储介质 |
CN112711537B (zh) * | 2020-12-31 | 2022-08-12 | 武汉船舶通信研究所(中国船舶重工集团公司第七二二研究所) | 软件缺陷定位方法及装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN105975388B (zh) | 2019-05-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105975388A (zh) | 基于频谱的增量式缺陷定位方法 | |
CN101819601B (zh) | 学术文献自动分类的方法 | |
CN111507412B (zh) | 一种基于历史数据辅助场景分析的电压缺失值填补方法 | |
CN102708045B (zh) | 一种缓解路径爆炸的动态符号执行方法 | |
CN108733966A (zh) | 一种基于决策树群的多维电能表现场状态检验方法 | |
CN103336771B (zh) | 基于滑动窗口的数据相似检测方法 | |
CN101866316A (zh) | 一种基于相对冗余测试集约简的软件缺陷定位方法 | |
CN106126413A (zh) | 基于两阶段包裹式特征选择的软件缺陷预测方法 | |
Abedinnia et al. | New simple constructive heuristic algorithms for minimizing total flow-time in the permutation flowshop scheduling problem | |
CN112364352A (zh) | 可解释性的软件漏洞检测与推荐方法及系统 | |
CN114610706B (zh) | 基于过采样和改进随机森林的窃电检测方法、系统及装置 | |
CN106056235A (zh) | 基于古林法物元可拓模型的输电网效率效益检测方法 | |
CN108038211A (zh) | 一种基于上下文的无监督关系数据异常检测方法 | |
CN106251241A (zh) | 一种基于特征选择改进的LR‑Bagging算法 | |
CN103268573B (zh) | 一种基于主成分分析的风电场标杆风机选择方法 | |
CN113808680A (zh) | 基于SHAP值构建可解释的XGBoost回归模型预测PCE的QSPR方法及其系统 | |
CN111525615A (zh) | 一种基于保证率的山地光伏电站出力特性评估方法及系统 | |
CN111814826A (zh) | 退役动力电池余能快速检测评级方法 | |
CN111798057A (zh) | 一种基于模糊层次盈利分析的充电场站选址方法 | |
CN112070136A (zh) | 基于提升度决策树及改进smote对不平衡数据的分类方法 | |
CN112200209A (zh) | 一种基于日差分用电量的贫困用户识别方法 | |
CN107392048A (zh) | 一种数据可视化中的差分隐私保护方法及其评价指标 | |
CN106776283A (zh) | 一种基于条件概率的程序错误定位方法 | |
CN116821913A (zh) | 基于效用调节策略的智能合约漏洞检测方法 | |
CN103326396B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |