CN105760295A - 基于搜索算法的多缺陷定位方法 - Google Patents
基于搜索算法的多缺陷定位方法 Download PDFInfo
- Publication number
- CN105760295A CN105760295A CN201511014345.3A CN201511014345A CN105760295A CN 105760295 A CN105760295 A CN 105760295A CN 201511014345 A CN201511014345 A CN 201511014345A CN 105760295 A CN105760295 A CN 105760295A
- Authority
- CN
- China
- Prior art keywords
- defect
- algorithm
- population
- program
- distribution
- 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.)
- Pending
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/3684—Test management for test design, e.g. generating new test cases
-
- 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/3692—Test management for test results 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)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于搜索算法的多缺陷定位方法,步骤一、执行第一阶段的搜索算法,具体包括以下处理:首先使用贪心算法对多缺陷分布的种群进行初始化;然后经执行选择算子、交叉算子和变异算子生成新的个体,重新插入到原种群中,形成下一代种群;当满足搜索算法的终止条件时,则进入第二阶段;步骤二、执行第二阶段的多缺陷定位:得到最终的缺陷分布组合种群,根据候选缺陷分布种群,得到可执行实体排序,映射到程序的真实位置,依据最优候选缺陷分布种群中的多缺陷分布得到对应的程序实体的可疑度系数的排序,算法结束。本发明采用的GAMFal算法在多(单)缺陷定位问题的效果优于现有的SFL方法;只需要较少的人工参与;算法效率上可行。
Description
技术领域
本发明涉及软件开发技术,特别是涉及一种软件缺陷定位方法。
背景技术
软件缺陷定位(softwarefaultlocalization)技术是在执行测试用例集后发现有部分测试用例执行失败时,确定缺陷所在具体位置的一种分析方法。在传统的软件开发过程中,通常是由开发人员手工调试、找到缺陷并进行修复。但这种传统的缺陷定位方法成本较高[1]。为了提高调试效率,把开发人员从枯燥的手工调试中解放出来,研究人员提出了大量的自动化缺陷定位方法用以辅助开发人员快速准确地定位缺陷。已有的自动化缺陷定位方法可以简单分为两类:静态定位方法和动态定位方法。其中静态定位方法[2]在程序运行前通过分析代码结构来定位缺陷,而动态定位方法[3,4,5]则通过分析测试用例的执行轨迹和运行结果来定位缺陷。在动态定位方法中,基于程序频谱的缺陷定位(programspectrumbasedfaultlocalization,简称SFL)技术表现出很好的定位效果[5]。它们通过计算出每个程序实体(可设置为语句、语句块或函数等)内含有缺陷的可能性,然后生成缺陷分析报告并以此来辅助开发人员进行调试,直至找到真正缺陷位置并完成修复。SFL是当前软件缺陷定位问题的研究热点,也是本文研究的问题。
程序频谱是执行测试用例时收集到的程序执行信息,包括测试用例的程序实体覆盖信息和执行结果。在大量SFL方法中,Tarantula[3]、Jaccard[6]、Ochiai[7]和Op[8]等方法取得了较好的效果。它们使用统计学方法计算出程序实体的可疑值,并依次排序。但这类方法在定位单缺陷时的效果要优于定位多缺陷时的效果[4]。已有的可疑度值计算公式一般基于论文中提到的8个假设[12,13],然而在实际软件开发过程中,被测程序内部含有的缺陷数难以预先获知,并且在绝大部分情况下都多于一个。
有研究人员利用谓词将程序划分成块,通过统计谓词在成功测试用例和失败测试用例中的执行情况来进行缺陷定位。Liblit等人[15]提出CBI方法来寻找与程序缺陷最相关的谓词,通过谓词在成功测试用例和失败测试用例执行过程中的取值信息计算谓词的可疑值。随后Liu等人[16]提出了SOBER方法,该方法通过搜集谓词的执行次数,比较谓词执行结果在成功测试用例和失败测试用例上的分布情况计算谓词的可疑值。并且实验结果表明SOBER方法要优于Liblit方法。郑征等人提出一种基于谓词执行序列的缺陷定位方法[17],通过搜集更多谓词执行信息能够进一步优化缺陷定位的效果。随后,他们又对此方法进行补充,提出一种自适应的缺陷定位方法[18],该方法能动态地选择每个谓词需要搜集的信息强度。
近年来,不断有新的方法被引入该研究领域,尤其是机器学习和基于搜索的方法[19]。Yoo提出一种通过遗传算法自动生成SBFL公式的方法,并且能得到跟人工设计公式相近的定位效果[20]。谢晓园等人使用基于搜索的方法从30个不同怀疑率计算公式中,发现了4个最优的公式[21]。玄跻峰等人使用机器学习的方法将多个排序指标结合使用,根据不同的程序选择最优公式[22]。
研究者还从测试用例维护和程序分析角度来进一步提高缺陷定位效果,充分考虑测试用例及程序本身的特性对缺陷定位结果的影响,并以此优化缺陷定位效果。郝丹等人从测试用例出发,通过消除相似测试用例[23]和有害测试用例[24]来优化测试用例集,从而优化缺陷定位的结果。贺韬等人使用变异分析来降低偶然因素的影响,并以此提高缺陷定位的效果[25]。Masri通过分析程序中的信息流来辅助缺陷定位,在分析过程中考虑程序间的依赖关系[26]。张震宇等人加入布尔表达式求值中的短路现象处理来提高缺陷定位效果[27,28]。此外,概率图模型[29,30,31]和程序切片技术[32,33]也被引入到程序缺陷定位技术。
多缺陷定位问题是缺陷定位技术实际应用必须要解决的问题。Jones等人通过分析提出缺陷定位效果与缺陷数量成反比关系,缺陷数量越多,缺陷定位方法得到的效果越差[3]。而DiGiuseppe等人通过大量实验发现缺陷数量对缺陷定位效果的影响可以忽略不计,他们同时也对缺陷间的干扰现象进行深入研究,并将失败测试用例聚类,使得同一类中的测试用例只与一个缺陷相关。Abreu等人提出一种基于贝叶斯的多缺陷定位方法,它能预测程序实体中包含缺陷的概率[34]。文万志等人提出一种基于切片技术的多缺陷定位方法,该方法通过程序切片降低了不同缺陷之间的相互影响[35]。
目前研究人员对多缺陷定位问题进行了初步研究。Jones等人[4]基于测试用例执行结果将被测程序划分为几个不同部分,随后指派不同的开发人员分别去定位相关部分内的缺陷。这种方法需要多个开发人员来检查代码,因此需要较高的人力成本。Abreu等人提出BARINEL方法[9],这种方法使用贝叶斯模型排序代表多缺陷的候选集。BARINEL方法在单缺陷定位和多缺陷定位中都具有较好的性能,但是它需要开发人员在检查代码的过程中保持实时交互,以确保可以依此不断修正候选集排序。Steimann和Bertschler[10]尝试使用概率分布来估计内部缺陷数。然而,缺陷的概率分布难以预知,并且很难进行估计和验证。MUSE方法[11]不断地对程序语句执行变异操作,试图得到所有测试用例都能通过的新版本来定位到缺陷。该方法的效果很好,但是需要耗费大量时间,难以在实际中使用。
GAMFal是一种新的基于遗传算法的多缺陷定位方法框架。首先以基于搜索的软件工程思想对多缺陷问题进行建模,将多缺陷定位问题转化为一类搜索问题;然后以二进制染色体形式表达潜在的多缺陷候选分布,同时基于覆盖的频谱信息及“通过/失败”的执行结果拓展Ochiai方法以构建适应值函数,并以此为依据采用遗传算法搜索解空间,搜索出的最优解可显性地表示多个缺陷的可能位置。这样,该方法便能在较少人工参与的情况下有效地进行多缺陷定位。
参考文献:
[1]VesseyI.Expertiseindebuggingcomputerprograms:Aprocessanalysis.InternationalJournalofMan-MachineStudies,1985,23(5):459–494.[doi:10.1016/S0020-7373(85)80054-7]
[2]MayerWandStumptnerM.Evaluatingmodelsformodel-baseddebugging.In:ProceedingsoftheInternationalConferenceonAutomatedSoftwareEngineering.L'Aquila:SpringerPress,2008,128–137.[doi:10.1109/ASE.2008.23]
[3]JonesJA,HarroldMJ,StaskoJ.Visualizationoftestinformationtoassistfaultlocalization.In:ProceedingsoftheInternationalConferenceonSoftwareEngineering.Orlando:ACMPress,2002,467–477.[doi:10.1145/581339.581397]
[4]JonesJA,BowringJF,HarroldMJ.Harrold.Debugginginparallel.In:ProceedingsoftheInternationalSymposiumonSoftwareTestingandAnalysis.London:ACMPress,2007,16–26.[doi:10.1145/1273463.1273468]
[5]RuiA,ZoeteweijP,GemundAJC.Ontheaccuracyofspectrum-basedfaultlocalization.In:ProceedingsofTestingAcademicandIndustrialConferencePracticeandResearchTechniques.CumberlandLodge:SpringerPress,2007,89-98.[doi:10.1109/TAIC.PART.2007.13]
[6]ChenMY,KicimanE,FratkinE,FoxA,andBrewerE.Pin-point:Problemdeterminationinlarge,dynamicinternetservices.In:ProceedingsofInternationalConferenceonDependableSystemsandNetworks.Washington:IEEEPress,2002,595–604.[doi:10.1109/DSN.2002.1029005]
[7]OchiaiA.Zoogeographicstudiesonthesoleoidfishesfoundinjapananditsneighboringregions.Nihon-suisan-gakkai-shi,1957,22(9):526-530.[doi:10.2331/suisan.22.526]
[8]NaishL,HuaJL,RamamohanaraoK.Amodelforspectra-basedsoftwarediagnosis.ACMTransactionsonsoftwareengineeringandmethodology,2011,20(3):563-574.[doi:10.1145/2000791.2000795]
[9]AbreuR,ZoeteweijP,GemundAJCV.Spectrum-basedmultiplefaultlocalization.In:ProceedingsofInternationalConferenceonAutomatedSoftwareEngineering.Auckland:SpringerPress,2009,88–99.[doi:10.1109/ASE.2009.25]
[10]SteimannF,BertschlerM.Asimplecoverage-basedlocatorformultiplefaults.In:ProceedingsofInternationalConferenceonSoftwareTestingVerificationandValidation.Denver:IEEEPress,2009,366–375.[doi:10.1109/ICST.2009.24]
[11]MoonS,KimY,KimM,andYooS.Askthemutants:Mutatingfaultyprogramsforfaultlocalization.In:ProceedingsofInternationalConferenceonSoftwareTesting,VerificationandValidation.AbanoTerme:IEEEPress,2014,153–162.[doi:10.1109/ICST.2014.28]
[12]ChenX,JuXL,WenWZ,GuQ.ReviewofDynamicFaultLocalizationApproachesBasedonProgramSpectrum.JournalofSoftware,2015(2).390-412(inChinesewithEnglishabstract).[doi:10.13328/j.cnki.jos.004708]
[13]YuK,LinMX.Advancesinautomaticfaultlocalizationtechniques.ChineseJournalofComputers,2011,34(8):1411-1423(inChinesewithEnglishabstract).[doi:10.3724/SP.J.1016.2011.01411]
[14]DiGiuseppeN,JonesJA.Ontheinfluenceofmultiplefaultsoncoverage-basedfaultlocalization.In:ProceedingsoftheInternationalSymposiumonSoftwareTestingandAnalysis.Toronto:ACMPress,2011,210-220.[doi:10.1145/2001420.2001446]
[15]LiblitB,NaikM,ZhengAX,AikenA,JordanMI.Scalablestatisticalbugisolation.In:ProceedingsoftheConferenceonProgrammingLanguageDesignandImplementation.Chicago:ACMPress,2005,15-26.[doi:10.1145/1064978]
[16]LiuC,YanX,FeiL,HanJW,MidkiffSP.SOBER:Statisticalmodel-basedbuglocalization.In:ProceedingsoftheEuropeanSoftwareEngineeringConferenceonHeldJointlywithInternationalSymposiumonFoundationsofSoftwareEngineering.Lisbon:ACMPress,2005,286-295.[doi:10.1145/1081706.1081753]
[17]LiW,ZhengZ,HaoP,GaoYC,RaoPF,GongC.Predicateexecution-sequencebasedfaultlocalizationalgorithm.ChineseJournalofComputers,2013,36(12):2406-2419(inChinesewithEnglishabstract).[doi:10.3724/SP.J.1016.2013.02406]
[18]HaoP,ZhengZ,ZhangZY,GaoYC,GongC,XueYZ.Self-Adaptivefaultlocalizationalgorithmbasedonpredicateexecutioninformationanalysis.ChineseJournalofComputers,2014,37(3):500-511(inChinesewithEnglishabstract).[doi:10.3724/SP.J.1016.2013.00500]
[19]WongWE,andDebroyV.Asurveyonsoftwarefaultlocalization.DepartmentofComputerScience,UTDallas(2009).
[20]Yoo,S.EvolvingHumanCompetitiveSpectra-BasedFaultLocalisationTechniques.SearchBasedSoftwareEngineeringSpringerBerlinHeidelberg,2012:244-258.[doi:10.1007/978-3-642-33119-0_18]
[21]XieXY,KuoFC,ChenTY,YooS,HarmanM.Provablyoptimalandhuman-competitiveresultsinSBSEforspectrumbasedfaultlocalization.In:ProceedingsoftheInternationalConferenceonSearchBasedSoftwareEngineering.SaintPetersburg:SpringerPress,2013.224-238.[doi:10.1007/978-3-642-39742-4_17]
[22]XuanJ,MonperrusM.LearningtoCombineMultipleRankingMetricsforFaultLocalization.In:ProceedingsoftheInternationalConferenceonSoftwareMaintenanceandEvolution.Victoria:IEEEPress,2014,191-200.[doi:10.1109/ICSME.2014.41]
[23]HaoD,ZhangL,PanY,MeiH,SunJS.Onsimilarity-awarenessintesting-basedfaultlocalization.AutomatedSoftwareEngineering,2008,15(2):207-249.[doi:10.1007/s10515-008-0025-9]
[24]HaoD,ZhangL,ZhongH,MeiH,SunJS.Eliminatingharmfulredundancyfortesting-basedfaultlocalizationusingtestsuitereduction:anexperimentalstudy.In:ProceedingsofInternationalConferenceonSoftwareMaintenanceandEvolution.Amsterdam:IEEEPress,2005,683-686.[doi:10.1109/ICSM.2005.43]
[25]HeT,WangXM,ZhouXC,LiWJ,ZhangZY,CheungSC.Asoftwarefaultlocalizationtechniquebasedonprogrammutations.ChineseJournalofComputers,2013,36(11):2236-2244(inChinesewithEnglishabstract).[doi:10.3724/SP.J.1016.2013.02236]
[26]MasriW.Faultlocalizationbasedoninformationflowcoverage.SoftwareTesting,VerificationandReliability,2010,20(2):121-147.[doi:10.1002/stvr.409]
[27]ZhangZY,JiangB,ChanWK,TseTH.Debuggingthroughevaluationsequences:Acontrolledexperimentalstudy.In:ProceedingsofInternationalComputerSoftwareandApplicationsConference.Turku:IEEEPress,2008.128-135.[doi:10.1109/COMPSAC.2008.207]
[28]ZhangZY,JiangB,ChanWK,TseTH,WangX.Faultlocalizationthroughevaluationsequences.JournalofSystemsandSoftware,2010,83(2):174-187.[doi:10.1016/j.jss.2009.09.041]
[29]BaahGK,PodgurskiA,HarroldMJ.Theprobabilisticprogramdependencegraphanditsapplicationtofaultdiagnosis.In:ProceedingsoftheInternationalSymposiumonSoftwareTestingandAnalysis.Seattle:ACMPress,2008,189-200.[doi:10.1145/1390630.1390654]
[30]BaahGK,PodgurskiA,HarroldMJ.Causalinferenceforstatisticalfaultlocalization.In:ProceedingsoftheInternationalSymposiumonSoftwareTestingandAnalysis.Trento:ACMPress,2010,73-84.[doi:10.1145/1831708.1831717]
[31]BaahGK,PodgurskiA,HarroldMJ.Mitigatingtheconfoundingeffectsofprogramdependencesforeffectivefaultlocalization.In:ProceedingsoftheJointMeetingoftheEuropeanSoftwareEngineeringConferenceandtheSymposiumontheFoundationsofSoftwareEngineering.Szeged:ACMPress,2011,146-156.[doi:10.1145/2025113.2025136]
[32]AgrawalH,HorganJR.Dynamicprogramslicing.In:ProceedingsoftheConferenceonProgrammingLanguageDesignandImplementation.WhitePlains:ACMPress,1990,246-256.[doi:10.1145/93542.93576]
[33]AgrawalH,HorganJR,LondonS,WongWE.Faultlocalizationusingexecutionslicesanddataflowtests.In:ProceedingsoftheInternationalSymposiumonSoftwareReliabilityEngineering.Toulouse:IEEEPress,1995,143-151.[doi:10.1109/ISSRE.1995.497652]
[34]AbreuR,ZoeteweijP,GemundAJCV.Spectrum-Basedmultiplefaultlocalization.In:ProceedingsoftheInternationalConferenceonAutomatedSoftwareEngineering.Auckland:SpringerPress,2009,88-99.[doi:10.1109/ASE.2009.25]
[35]WenWZ,LiBX,SunXB,QiSS.Atechniqueofmultiplefaultlocalizationbasedonconditionalexecutionslicingspectrum.JournalofComputerResearchandDevelopment,2013,50(5):1030-1043(inChinesewithEnglishabstract).
发明内容
针对上述的现有技术及存在的问题,本发明提出了一种基于搜索算法的多缺陷定位方法,利用GAMFal算法实现软件多(单)缺陷分的定位问题。
本发明提出了一种基于搜索算法的多缺陷定位方法,该方法包括以下步骤:
步骤一、执行第一阶段的搜索算法,具体包括以下处理:
首先使用贪心算法对多缺陷分布的种群进行初始化;然后经执行选择算子、交叉算子和变异算子生成新的个体,重新插入到原种群中,形成下一代种群;当满足搜索算法的终止条件时,则进入第二阶段的多缺陷定位;
步骤二、执行第二阶段的多缺陷定位:得到最终的缺陷分布组合种群,根据候选缺陷分布种群,得到可执行实体排序,映射到程序的真实位置,依据最优候选缺陷分布种群中的多缺陷分布得到对应的程序实体的可疑度系数的排序,算法结束。
所述最优候选缺陷分布通过以下步骤获得:
循环进行选择算子、交叉算子、变异算子及重插入过程,直到循环次数达到作为终止条件的最大迭代次数Ngen,当过程停止时,得到的最优候选缺陷分布种群将作为第二阶段多缺陷定位的依据。
与现有技术相比,本发明采用的GAMFal算法在多(单)缺陷定位问题的效果优于现有的SFL方法;只需要较少的人工参与;算法效率上可行。
附图说明
图1为GAMFal算法的流程图;
图2为AG过程初始化生成的n个个体;
图3为AG过程的流程图;
图4为单缺陷定位结果比较结果示意图;(a)为GAMFal在Siemens套件部分程序的结果,(b)为GAMFal在Linux上部分程序的结果;
图5为Siemens程序多缺陷定位结果比较结果示意图;
图6为print_tokens程序多缺陷定位结果比较结果示意图;
图7为print_tokens2程序多缺陷定位结果比较结果示意图;
图8为replace程序多缺陷定位结果比较结果示意图;
图9为tot_info程序多缺陷定位结果比较结果示意图;
图10为Linux程序多缺陷定位结果比较结果示意图;
具体实施方式
GAMFal算法的核心是Multi-Ochiai可疑度系数计算公式和遗传操作算子的选择,图1给出了整个算法的流程图,算法共分为两个阶段,第一阶段首先使用贪心算法对多缺陷分布的种群进行初始化;然后执行选择、交叉和变异算子,生成新的个体并添加到种群中,同时以Multi-Ochiai可疑度系数作为适应度值对个体进行评价并进化得到新种群;如果终止条件被满足,则将得到最终的最优多缺陷分布种群。然后进入第二阶段,依据最优种群中的多缺陷分布得到对应的程序实体的可疑度排序,算法结束。
1、染色体编码方式
GAMFal算法将候选缺陷分布表示为一个二进制向量:
c={c1,c2,c3,...,cj,...cn}
其中,n为被测程序中可执行的程序实体数量,cj表示被测程序中的第j个程序实体,如果cj=1,则在该候选缺陷分布中,第j个程序实体被认为是存在缺陷的;如果cj=0,则在该候选缺陷分布中,第j个程序实体被认为没有缺陷。例如一个候选缺陷分布,表示被测程序共有9条可执行的程序实体,其中第3个和第8个程序实体被认为是有缺陷的,其余的则被认为是没有缺陷的。
2、适应度值函数
本方法提出了Multi-Ochiai可疑度系数计算公式便是针对这一问题在Ochiai可疑度系数计算公式上做的改进。该适应度值函数基于如下假设:
假设1:一个缺陷分布的可疑度与该分布能解释的失败用例数成正比。
假设2:一个缺陷分布的可疑度与该分布能解释的通过用例数成反比。
假设3:在设定的可疑度公式中,假设1所占的比重要更大一些。
Multi-Ochiai可疑度系数计算公式度量候选缺陷分布的可疑度值。对于一个候选缺陷分布C,其可疑度值(即该候选缺陷分布为真实缺陷分布的概率)可由如下公式计算出来:φ(C)
其中,φ(C)为候选缺陷分布C解释失败测试用例的能力,P(C)是一个惩罚函数;其定义为:
公式(2)中的λ(x)函数被称为示性函数,定义为:
公式(1)中的定义P(C)为:
公式(2)和(4)中的Mi表示第i个测试用例的覆盖情况,MF为所有失败测试用例的覆盖情况,MP为所有失败测试用例的覆盖情况,Mij为定义3中覆盖矩阵的元素,TF为失败测试用例的数量。与假设1对应,公式(1)和(2)中的φ(C)表达了候选缺陷分布C“解释”失败测试用例的能力;即如果一个失败测试用例运行了一个或者多个在C中被假定为有错的语句,则该失败测试用例能够被C解释。反之如果该失败测试用例运行到的语句在C中都被认为是无错的,则该失败测试用例不能被C解释。如公式(2)所示,φ(C)的值为候选缺陷分布C能够解释的失败测试用例的数量;φ(C)的值加1,当且仅当C能够解释一个失败的测试用例。
公式(4)中|TP|的是通过测试用例的数量。P(C)是一个惩罚函数,与假设2相对应,如果一个候选缺陷分布C所假设为有错的程序实体被通过的测试用例执行到,则P(C)的值加1。需要说明的是,如果C能解释一个失败的测试用例,则φ(C)的值加1;而P(C)中并未引入示性函数,则只要C中有错的语句被通过的测试用例执行一次,则P(C)的值1。这样做的目的是让候选缺陷分布C中被认为有错的语句数量保持在一个比较低的水平,这与实际调试时程序的缺陷数量一致。如果一个候选缺陷分布C中被认为有错的语句数量较多,则其P(C)值会更大,从而降低该候选缺陷分布的可疑度值。反之,如果不进行惩罚,则可能出现极端情况,即包含缺陷实体数量最多的候选分布的Multi-Ochiai可疑度值最高,这样的结论将推出所有程序实体都是有缺陷的,显然无法有效的辅助开发人员定位缺陷。因此,GAMFal方法使用惩罚函数以降低那些过多估计缺陷数量候选分布的适应度值,这样既可以进一步优化GAMFal算法的执行结果,又能在一定程度上提高算法的执行效率。在GAMFal方法中,对于一个给定的缺陷分布,其Multi-Ochiai可疑度值越高,则表示该分布解释失败测试用例的能力越强,解释正确测试用例的能力越弱。
3、遗传操作算子及最优种群搜索过程
如上节中所述,Multi-Ochiai可疑度系数计算公式可计算出每一个候选缺陷分布的可疑度值。本节所述的方法就是对候选缺陷分布进行搜索,找出其中可疑度值较大的种群,最终得到程序实体的可疑度排名列表。由于候选解的空间较大且无法用解析的方法求解该问题,本文将采用遗传算法来对该问题进行求解。
遗传算法由可行候选解集的一个初始种群开始,种群由经过基因编码的一定数目个体组成,而每个个体是染色体带有一定特征的实体。通常采用简化的编码方法,即二进制编码对原始问题中的表现型进行编码,使之成为基因型的个体。初始种群产生后,按照适者生存和优胜劣汰的原理,逐代地演化以产生新的个体,并保留更好的个体进入下一代。在每一代中,根据个体的适应度值来选择个体,进行交叉和变异,从而产生新的个体。这一过程迭代进行,直到达到终止条件,终止条件一般为预设的迭代次数,或者是种群中的个体的适应度达到一个预设的值等等。最终代种群中的最优个体经过解码,作为问题的近似最优解。
表1、GAMFal算法伪代码
在GAMFal算法中,使用长度为n的二进制向量C来表示一个候选缺陷分布,n为被测程序的可执行语句数量。二进制向量C即可作为遗传算法中的一个个体。而Multi-Ochiai可疑度系数计算公式即作为遗传算法中的适应度函数,即Multi-Ochiai值可作为在遗传算法中度量候选缺陷分布C的标准。GAMFal方法中使用遗传算法搜索高可疑度值候选缺陷分布,表1是GAMFal算法的伪代码,算法的详细过程如下:
(1)初始化种群
在本方法中,使用一个贪心算法过程Additional-Greedy(AG)来生成初始候选解种群,该算法能在满足所有个体符合条件的情况下,尽可能地保证初始种群的多样性,算法的流程图如图3所示。AG过程的输入包括覆盖矩阵M、测试用例结果向量R以及遗传算法种群中包含的个体数量Np。AG过程首先生成n个个体,每一个体(即候选缺陷分布)均只有一条语句被认为有错,即长度为n的二进制串中只有一个位置为1,其他为0,且个体之间1的位置互异,如图2所示。计算每一个个体的值,如果,则该候选缺陷分布C能够解释所有的失败测试用例,是本问题的一个可行解。如果,则需要对该个体进行修正,即在该候选缺陷分布中加入语句ex(即把缺陷分布组合中ex对应的位置置1),使得该候选缺陷分布能够解释所有的失败的测试用例。ex需要能够解释最多的原候选缺陷分布不能解释的失败测试用例;也就是说,在ex被加入到候选缺陷分布C后,增加的幅度最大;ex加入后,C如果能够解释所有的失败测试用例,则该过程结束,若不能,则继续加入语句,直到该个体能够解释所有失败测试用例为止。至此,AG过程获得了一个有n个可行个体的种群。如果n<Np,则复制数个可行个体直至将初始种群中个体数量补充至Np;如果,则选择其中Multi-Ochiai可疑度值最大,即适应度值最高的Np个个体作为初始种群。AG过程生成的Np个个体的初始种群具有相对较高的适应度值,且具有较好的多样性,因为每个个体都是由具有不同缺陷位置的候选缺陷分布扩展而来。高质量的初始种群有利于遗传算法最终得到较好的结果。
初始化得到的种群将依次使用选择、交叉和变异算子来产生新的个体。新个体再重插入到种群中,开始新一轮的选择、交叉和变异。
(2)选择算子
选择算子用来确定重组或交叉的个体,以及被选个体将产生多少个子代个体。选择算子是一个基于适应度值的操作,适应度较高的个体被选择的可能性更大。本方法中的适应度函数为Multi-Ochiai可疑度系数。参数GGAP(0<GGAP≤1)用以确定种群中被选择的个体所占的比例。选择算子有很多种,本方法所使用的是轮盘赌选择算子。轮盘赌选择算子类似于博彩游戏中的轮盘赌,个体适应度按比例转化为选中的概率,将轮盘分为个NP扇区,进行选择的次数是GGAP×NP次,所以需要产生GGAP×NP个(0,1]之间的随机数,也相当于转动GGAP×NP次转盘。随机数所落在的区间所代表的个体被选中,在轮盘上直观地显示为转动停止时被指针指向的扇区所代表的个体被选中。以Nnc表示当前次选择时种群内还未被选中的个体数量,Cl表示某一未被选中的个体,则其中个体C在该次选择中被选中的概率可由下式计算:
(3)交叉算子
交叉算子在两个已有染色体的基础上进行操作,产生新的染色体。常见的交叉算子包括单点交叉、多点交叉、洗牌交叉等等。参数PC指定两个染色体上相同位置的基因进行交叉的概率。在本方法中,使用的交叉算子是缩小代理(reducedsurrogate)的洗牌交叉算子。在洗牌交叉算子中,进行交叉的染色体的每一对相同位置的基因都有PC的概率进行交换;而缩小代理是指交叉后的染色体需与父辈染色体不同。例如,我们以Ci表示某一个体,old1、old2、new1、new2分别为个体的标号,在选择算子中有两个个体被选择,作为父辈个体进行交叉:
Cold1=<0,1,0,1,0,0,0,1,0,0>
Cold2=<1,0,1,0,0,0,0,0,1,1>
经过交叉算子运算后,得到的两个子代的个体为:
Cnew1=<1,1,1,0,0,0,0,0,1,0>
Cnew2=<0,0,0,1,0,0,0,1,0,1>
可见在交叉前后,两个个体共有5个位置的基因得到交换,从而产生了两个不同于父辈个体的新个体。需要说明的是,有些如本例中的第五个基因位置,也有可能得到了交叉,但因为在父辈个体中,该位置均为0,因此并没有在子代中产生新的基因型。
(4)变异算子
在交叉算子运算中,父代的个体经过交叉得到新的基因型以组成新的子代个体。但如果在某个基因位置上父代的基因型均相同,则子代就不可能产生新的基因型。因此,算法将引入变异算子以确保种群的多样性。参数用以指定由交叉算子产生的子代个体的每一个基因位变异的概率,即从0变异为1或从1变异为0的概率,0<Pm<1。Pm的取值通常很小,因为变异算子不能大幅度改变群体的基因型。通常在缺陷定位问题中,假设程序中的缺陷数量是很少的,因此需要限制变异算子以免其无限制地增加候选缺陷分布中的“1”。本方法引入参数来保证候选分布中的缺陷数量维持在比较少的水平,通常是一个比较小的整数。同时,本方法使用了两个参数Pm1和Pm2来指定变异概率,0<Pm1<Pm2<1。在进行变异之前,计算由交叉算子获得的个体中“1”的数量。如果该数量小于或等于,则该个体中的每一个0以Pm1概率变异为1;如果该数量大于,则该个体中的每一个1以Pm2的概率变异为0。
(5)重插入
由选择算子、交叉算子及变异算子运算后得到的新个体需要被重新插入原种群中,形成下一代种群。此时需要计算原种群中的个体以及新生成个体的适应度值,选择其中适应度值最高的NP个个体组成新种群。因此,原种群中适应度值较差的个体将被新生成的适应度值较高的个体替换。每一代所生成的最优缺陷分布均被保留至候选缺陷分布种群中,以作为得到程序实体排名列表的依据。
在本方法中,Ngen参数为最大迭代次数,即终止条件。迭代第(2)至第(5)步,即循环进行选择算子、交叉算子、变异算子及重插入过程。直到循环次数达到Ngen。当过程停止时,得到的最优候选缺陷分布种群将作为第二阶段多缺陷定位的依据。
由遗传算法获得的候选缺陷分布种群中的个体有可能并不能完全解释所有的失败测试用例,因此需要一个筛选的过程。筛选过程即计算种群中每一个个体的φ(C)值,保留φ(C)值等于的|TF|个体,抛弃其他个体。此时的候选缺陷分布种群中的个体均能够完全解释所有失败测试用例。然后将种群中的个体按其适应度值由大到小进行排序,得到候选缺陷分布的可疑度值列表。
3.确定多缺陷位置
本阶段将最优候选缺陷分布种群转化为语句的可疑度排名列表。在可疑度值较高的候选缺陷分布中被认为有错的语句的可疑度应该更高。如果在同一候选缺陷分布中有数条语句,则需要参考种群内其它个体包含的缺陷位置,如果完全相同则按随机的顺序进行排列。例如,以下是一个已排序的候选缺陷分布种群:
<0,0,0,1,0,1,0,0,0,0>
<0,1,0,1,0,0,0,0,0,0>
<0,1,0,0,0,1,0,0,0,0>
<1,0,1,0,0,0,1,1,0,1>
<1,0,0,0,1,0,0,1,1,0>
按从上至下的顺序,其可疑度(适应度)依次降低。因此,在第一个个体(候选缺陷分布)中被认为有错的语句的可疑度最高,即第4和第6条语句可疑度最高,这两条语句之间的排序可参考最优种群内其它个体包含的缺陷位置进行排序,如果完全相同则随机进行排序。因此,由这个候选缺陷分布种群可得语句的可疑度排名列表为:<e4,e6,e2,e1,e8,e3,e7,e10,e5,e9>。由于对处于同一候选缺陷分布中的语句采用了随机排序的策略,因此由同一候选缺陷分布种群得出的语句可疑度排名列表有可能不同。
本发明具体实施例描述如下:
GAMFal方法主要使用在软件测试中的软件缺陷定位阶段。不同于已有的其他方法的是,GAMFal方法首先假设出缺陷的位置分布,再通过遗传算法和MultiOchiai适应度值函数搜索最优种群,最后根据得到的最优种群生成缺陷位置的排序。
在具体实施的过程中,GAMFal方法需要如下四个集合作为输入:
定义1(测试用例集):表示被测程序的配套测试用例集,其中表示该测试用例集的第i个测试用例。
定义2(待测程序实体集):表示被测程序内包含的程序实体集,其中表示第i个程序实体。程序实体粒度可设置为语句、语句块或函数等。
定义3(覆盖矩阵):用来表示和之间的覆盖关系。是一个mn矩阵,其中第i行表示第i个测试用例的程序实体覆盖情况,第j列表示第j个程序实体被不同测试用例覆盖的情况。每一个Mij代表第i个测试用例对第j个程序实体的覆盖情况,时,表示测试用例i覆盖程序实体j。时,表示测试用例i未覆盖程序实体j。
定义4(执行结果向量):代表测试用例集中的测试用例的测试结果,表示第个测试用例的执行结果,。当时,表示第个测试用例执行通过。当时,表示第个测试用例执行失败。
最终的程序会输出程序实体的排序,这个排序结果主要可以用在一下几个方面。
(1)直接使用程序实体排序。程序员可以根据该排序结果依次查找程序中的缺陷,或者将该排序结果做为其他工具或者算法的输入,进行进一步的处理。现在软件测试领域内的缺陷自动修复方法就普遍会使用缺陷定位的结果做为前提,以优化缺陷修复的效率和结果。
(2)对排序结果变形使用。因为GAMFal方法得到的程序实体的直接排序结果不够直观,因此可以对该结果进行变形展示,例如根据程序实体的排序对程序本身进行可视化的展示,以更加直观地表示程序各个模块发生错误的可能性。
本发明的效果验证:
借助真实程序以评估我们所提出的GAMFal方法在多缺陷定位问题中的有效性。首先提出了本方法的三个技术优势,并设计对应的实验进行验证;其次我们列出了实证研究所用到的真实数据集,包括程序、缺陷、测试用例集及运行结果;在描述实验结果之前,我们拓展定义了多缺陷定位方法的评价标准EXAMF和EXAML,然后对实证研究结果进行总结,借助显著性检验与已有的经典SFL方法进行比较,并验证GAMFal的有效性。
1、方法优势与实验验证
为了评价本文提出的算法框架,我们采用Matlab实现了文中的算法框架。在执行算法框架之前,我们采用两种方式进行数据采集:(1)所有版本的Siemens程序是在配置为3.10GHzIntelCorei5-2400CPU、4GB物理内存,安装了SunOs5.10操作系统的Dell计算机上执行;(2)Linux的三个程序是在配置为3.00GHzIntel(R)Xeon(R)E5-2623v3CPU、32GB物理内存,安装了CentOs7.0操作系统的服务器上运行。GAMFal和其他缺陷定位方法是在配置为3.40GHzIntelCorei7-3770CPU、8GB物理内存、MicrosoftWindows764-bits操作系统的Dell计算机上执行。Gcov工具用来收集可执行语句的覆盖信息,它能得到每一条可执行语句在测试用例执行过程中的执行信息。随后使用Python脚本从gcov执行结果中生成程序的覆盖矩阵。
实证研究的主要目标包括两个方面,首先基于评测标准EXAMF和EXAML,本文提出的GAMFal方法是否有效改善现有SFL方法在多缺陷定位问题的性能?另一方面是考虑方法的效率问题,对于真实的缺陷定位问题,GAMFal在执行时间方面是否是可接受的?基于上述两个目标,我们设计实验以验证GAMFal方法的如下三个优势。
优势1:在给定的评价标准EXAMF和EXAML下,GAMFal算法在多(单)缺陷定位问题的效果优于现有的SFL方法。
优势2:GAMFal算法可以需要较少的人工参与。
优势3:GAMFal算法在算法效率上可行。
2、评测数据集
我们的实证研究同时使用了小规模程序和大规模程序,这些程序都可以从SIR库中下载。其中:(1)小规模程序来自西门子套件中的7个程序,包括print_tokens、print_tokens2、replace、schedule、schedule2、tcas、tot_info等。这些程序最少有174行,最多有539行,其中一半以上是可执行语句。每个程序都有一个正确版本和多个错误版本,其中每个错误版本内仅含有一个缺陷。这些程序配套的测试用例集中,最少的有1052个测试用例,最多的有5542个测试用例。(2)大规模程序来自Linux程序,分别是gzip、grep和sed。这三个程序分别有6576行、12635行和7125行,其中可执行语句大约占1/4。但这些程序配套的测试用例集规模较小,最少的有213个,最多的有470个。
Siemens程序的错误版本中有些缺陷所在行不是可执行的,这超出了SFL方法的适用范围,很难得到准确的结果。因此实验中的有些缺陷需要重新植入。我们在Siemens七个程序中植入单个缺陷进行单缺陷的评估实验,在print_tokens、print_tokens2、replace和tot_info这四个程序中植入多个缺陷来完成多缺陷的评估实验。选用这四个程序植入多个缺陷是因为它们包含更多的可执行代码行数,以便植入更多的缺陷组合。三个Linux源程序中已有的植入缺陷都是在可执行代码行,所以我们在其单缺陷版本的基础上将缺陷进行不同组合,生成一批包含两个缺陷和三个缺陷的版本。
实证研究中评测程序的具体信息如表2所示:
表2、实证研究中考虑的评测程序
实验中的参数设置如表3所示,其中Ngen表示遗传算法最大迭代次数,Np表示初始种群及每次迭代待选种群的个体数,GGAP表示每次迭代被选择个体占待选个体的比例,Pc表示两个染色体上相同位置的基因进行交叉的概率,Pm1和Pm2表示个体中染色体变异的概率,Thresholdm表示个体中的缺陷数量上限。
表3实验中参数设定
3、评测指标
在单缺陷定位中,一般借助EXAM指标[57]对方法的有效性进行评估,该指标返回的是检测到缺陷语句前需要检查的语句占所有语句的百分比。对于指定的被测程序,EXAM值越小,表示该方法的缺陷定位效果越好(需要说明的是,有相同怀疑度的实体在检查时的排序是随机的)。而在多缺陷定位中,针对单缺陷的EXAM指标并不完全适用。因此我们拓展EXAM的定义使之适用于多缺陷问题定位方法的评价:
定义11(EXAMF指标):该指标返回的是检测到第1个缺陷前需要检查的语句占所有语句的百分比。
定义12(EXAML指标):该指标返回的是检测到最后1个缺陷前需要检查的语句占所有语句的百分比。
在多缺陷定位时,开发人员通常有两种检查代码寻找缺陷的策略。第一种是找到立刻解决,开发人员根据可疑度排序找到第一个缺陷的位置后便停止搜索并修复缺陷。之后重新运行算法得到新的可疑度排序,直到程序中没有缺陷为止。第二种是一次性找出所有的缺陷并修改,开发人员预先估计程序中可能的缺陷数量,找到最后一个缺陷,最后再进行修复。值得注意的是,在多缺陷查找过程中,应该设定一个查找阀值,当查找百分比超过阀值就停止查找,以免因为缺陷数量估计错误而检查很多无用代码。
EXAMF指标在一次性只找一个缺陷的策略中更有效,因为开发人员只关心第一个缺陷的位置。这种情况下,缺陷定位的方法需要尽可能减弱一个缺陷与其他缺陷的联系。也就是说,这种方法能在只有一个缺陷的程序中得到较好的可疑度排序结果,而在多个缺陷的程序中则表现不太好。相反,EXAML指标在多缺陷定位中显得更为重要,它保证了所有的缺陷程序实体的可疑度值排序较为靠前。本文将同时使用EXAMF指标和EXAML指标来评价GAMFal方法和其他方法在多缺陷定位程序中的效果。
4、结果分析
(1)单缺陷版本实验评估
虽然本文主要是研究多缺陷定位问题,但为检验新方法的适用性,我们首先检验GAMFal在单缺陷版本的表现。本节中我们在单缺陷版本中对比GAMFal和其他几种SFL方法的定位效果,其他缺陷定位方法包括:Tarantula(Ta)、ImprovedTarantula(IT)和Ochiai(Oc)。多缺陷版本的比较实验将在下一节中展示。实验中采用的参数取值如上文表3所示。
如表2所示,共选择了138个Siemens单缺陷版本和28个Linux单缺陷版本,每种缺陷定位方法都执行30次取平均值来代表它的定位效果,记录下单缺陷版本的平均EXAM值。
如图4所示,借助箱形图展示了4种方法在单缺陷程序上的执行结果,(a)、GAMFal与ImprovedTarantula和Ochiai有比较接近的定位效果,均优于Tarantula方法;(b)、显示大规模Linux程序上GAMFal在平均定位效果和低百分比定位结果占的比例更高;根据图4显示的结果可以得出GAMFal在单缺陷程序上的定位效果不逊于另外三种方法,在大规模程序上的表现甚至要更好。
(2)多缺陷版本实证评估
表2中的其他四个Siemens程序(print_tokens,print_tokens2,replace和tot_info)中的159个版本和47个Linux版本是用来评估多缺陷定位问题的。和单缺陷评估实验一样,每种缺陷定位方法都被执行30次取平均值来展示它的定位效果,所有缺陷版本的EXAMF和EXAML都被记录下来。四种方法的效果比较如图5至10所示。图5至10显示对于Siemens程序,在EXAMF指标下,四种方法的结果好坏不一,但总体结果非常相近;而在EXAML指标下,GAMFal方法结果明显好于其他三种方法。图10显示对于Linux的大规模程序,GAMFal方法在两个指标EXAMF和EXAML下的结果都要明显好于其他三种方法。
为了保证实验结论的可靠性,下面对实验结果进行方差检验。检验的假设是四种方法之间的平均定位效果没有显著差异,设置显著性水平为0.05。我们分析多缺陷实验中的EXAMF和EXAML指标,如图5所示,它们的分布是非正态的,所以我们使用一种非参数的统计检验方法Friedman检验来检验假设的可靠性。
表6和表7分别显示了EXAMF和EXAML的Friedman检验结果。F值能根据组内平方和和组间平方和计算得到,F值越大,则拒绝原假设的可信度越高。值是F值对应的显著性水平,表3和表4中的结果值都小于0.05,所以原假设应该被拒绝。也就是说,四种方法的结果有显著差异。
Friedman检验只能发现四种方法的结果有显著差异,但是不能发现具体的差异性。因此有必要使用最小显著差异法(Least-SignificantDifference,简称LSD)比较任意两种方法之间的差异。表5和表6显示了使用LSD方法分别对EXAMF和EXAML进行检验的结果。如果置信度下限和置信度上限之间没有包含0,则可以认为两种方法之间的差异是显著的。在表7中,四种方法之间的差异是不显著的,只有Ochiai方法略优于其他三种方法。表7显示GAMFal要显著优于其他三种方法。Tarantula也明显要好于ImprovedTarantula和Ochiai两种方法,而ImprovedTarantula和Ochiai两种方法没有明显差异。
表3、EXAMF的Friedman检验
表4、EXAML的Friedman检验
表5、EXAMF的LSD检验结果
表6EXAML的LSD检验结果
(3)实验结果总结
本节将根据上述描述的实验结果对本发明的GAMFal算法的三个优势进行验证讨论,具体如下:
1)在给定的评价标准EXAMF和EXAML下,GAMFal算法在多(单)缺陷定位问题的效果是否优于现有的SFL方法?
本节将分单缺陷和多缺陷、EXAMF和EXAML标准以及大规模程序(Linux)和小规模的程序(Siemens套件)对此问题分别进行讨论。
根据图4至10的实验结果可知,对于单缺陷问题,在小规模Siemens程序集上,GAMFal方法的定位效率不劣于其它三种方法;而在大规模的Linux程序集上要明显好于其它三种方法。对于多缺陷问题,在小规模Siemens程序集上,GAMFal方法在EXAMF指标上跟其他三种方法的结果近似,而在EXAML指标上明显优于其他三种方法。这就说明GAMFal方法应用于Siemens程序集上时能在保证不降低找到第一个缺陷效率的情况下,能更快的找到最后一个缺陷,并使得包含缺陷语句的怀疑值排名整体提高,从而帮助开发人员更快地锁定缺陷。在大规模Linux程序上的实验说明,GAMFal方法在EXAMF指标和EXAML指标下都明显优于其他三种方法。这说明在程序中存在多个缺陷时,本发明提出的方法能更快地定位到第一个缺陷的位置,同时使得程序中包含缺陷的语句排名整体提高。
通过上述的显著性检验可以看出,本发明提出的方法在平均性能上要显著优于其他三种方法,特别是在多缺陷定位中。新方法在保证单缺陷定位准确性的前提下,主要针对多个缺陷的覆盖路径上有重复非缺陷程序实体的情况,因此在某些程序(如小规模的Siemens程序)上没有表现出明显的优化效果。而在实际的开发过程中,一方面程序中的缺陷数无法确定,且往往超过一个,另一方面实际程序中的代码复用量很高,这使得不同缺陷的执行路径上的重复率也很高,使用单缺陷定位方法很容易将这些复用模块的可疑值计算为最高,影响缺陷定位效果。本文提出的方法能很好地应对这两个问题,这使得本文的方法更容易应用到实际开发中去。
2)GAMFal算法是否可以需要较少的人工参与?
传统的缺陷定位方法多是一次检查一个缺陷,而GAMFal方法在计算过程中以多缺陷分布个体为检查基础,且根据实验结果可知,算法终止时的最优种群中,包含多个缺陷的个体数量占总种群的95%以上,这将使得开发人员可一次检测多个缺陷,从而减少开发人员在多缺陷定位的参与,以提高多缺陷定位的效率。同时遗传算法是一个基于搜索的方法,需要人工参与的情况也较少。总体来看,GAMFal方法将可以减少人工的参与。
3)GAMFal算法在算法效率上是否可行?
表7所示GAMFal算法在7个多缺陷程序上的执行效率。从表中可看出GAMFal算法的执行时间与程序的可执行代码数、测试用例数及遗传算法的种群数、迭代次数等因素相关。在相同的遗传算法参数设定情况下,程序的可执行代码行数和测试用例数越多,GAMFal算法执行时间越长。表中gzip和sed程序的可执行代码行与测试用例数的乘积小于print_tokens和print_tokens2,实际执行时间却更多,这说明可执行代码行数对算法执行效率的影响更大。另外,GAMFal算法在包含3197个程序实体和470个测试用例的grep程序上的执行时间约为25s,这说明GAMFal算法在大程序上的执行效率不会大幅下降,由于遗传算法是一种基于搜索的算法,算法执行时间相对传统运算求解的方法要高;但在缺陷定位过程中,秒级时间消耗对于开发人员排查缺陷是可以接受的,符合实际应用的效率要求。
表7、GAMFal算法的执行效率
Claims (2)
1.一种基于搜索算法的多缺陷定位方法,其特征在于,该方法包括以下步骤:
步骤一、执行第一阶段的搜索算法,具体包括以下处理:
首先使用贪心算法对多缺陷分布的种群进行初始化;然后经执行选择算子、交叉算子和变异算子生成新的个体,重新插入到原种群中,形成下一代种群;当满足搜索算法的终止条件时,则进入第二阶段的多缺陷定位;
步骤二、执行第二阶段的多缺陷定位:得到最终的缺陷分布组合种群,根据候选缺陷分布种群,得到可执行实体排序,映射到程序的真实位置,依据最优候选缺陷分布种群中的多缺陷分布得到对应的程序实体的可疑度系数的排序,算法结束。
2.如权利要求1所述的基于搜索算法的多缺陷定位方法,其特征在于,所述最优候选缺陷分布通过以下步骤获得:
循环进行选择算子、交叉算子、变异算子及重插入过程,直到循环次数达到作为终止条件的最大迭代次数Ngen,当过程停止时,得到的最优候选缺陷分布种群将作为第二阶段多缺陷定位的依据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201511014345.3A CN105760295A (zh) | 2015-12-28 | 2015-12-28 | 基于搜索算法的多缺陷定位方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201511014345.3A CN105760295A (zh) | 2015-12-28 | 2015-12-28 | 基于搜索算法的多缺陷定位方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105760295A true CN105760295A (zh) | 2016-07-13 |
Family
ID=56342245
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201511014345.3A Pending CN105760295A (zh) | 2015-12-28 | 2015-12-28 | 基于搜索算法的多缺陷定位方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105760295A (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107729241A (zh) * | 2017-10-12 | 2018-02-23 | 中国矿业大学 | 一种基于变异体分组的软件变异测试数据进化生成方法 |
CN109165159A (zh) * | 2018-08-10 | 2019-01-08 | 北京理工大学 | 一种基于程序频谱的多缺陷定位方法 |
CN109522097A (zh) * | 2018-10-11 | 2019-03-26 | 天津大学 | 一种基于自适应随机测试的并发缺陷检测方法 |
CN110554952A (zh) * | 2018-06-04 | 2019-12-10 | 西安邮电大学 | 一种基于搜索的分层回归测试数据生成方法 |
CN111124884A (zh) * | 2019-11-20 | 2020-05-08 | 北京航空航天大学 | 一种基于遗传算法的多故障解耦和故障定位方法 |
CN111444079A (zh) * | 2019-01-16 | 2020-07-24 | 河南工业大学 | 一种软件缺陷修复方法及装置 |
CN111737120A (zh) * | 2020-06-15 | 2020-10-02 | 河南工业大学 | 一种软件缺陷修复方法及装置 |
CN112685320A (zh) * | 2021-01-09 | 2021-04-20 | 北京信息科技大学 | 一种基于多候选程序的软件缺陷修复方法及装置 |
CN112965897A (zh) * | 2021-02-19 | 2021-06-15 | 浙江理工大学 | 一种基于mRMR算法挑选可疑度公式的程序错误定位方法 |
CN113282485A (zh) * | 2021-04-25 | 2021-08-20 | 南京大学 | 一种基于自适应搜索的程序自动修复方法 |
CN115185814A (zh) * | 2022-06-13 | 2022-10-14 | 中南大学 | 一种基于二维程序频谱的多缺陷定位方法、系统及设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101866316A (zh) * | 2010-06-23 | 2010-10-20 | 南京大学 | 一种基于相对冗余测试集约简的软件缺陷定位方法 |
KR101134735B1 (ko) * | 2010-11-03 | 2012-04-13 | 재단법인대구경북과학기술원 | 소프트웨어 컴포넌트 설계정보를 이용한 소프트웨어 테스트 방법 및 시스템 |
CN103198016A (zh) * | 2013-03-26 | 2013-07-10 | 哈尔滨工业大学 | 基于联合依赖概率建模的软件错误定位方法 |
-
2015
- 2015-12-28 CN CN201511014345.3A patent/CN105760295A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101866316A (zh) * | 2010-06-23 | 2010-10-20 | 南京大学 | 一种基于相对冗余测试集约简的软件缺陷定位方法 |
KR101134735B1 (ko) * | 2010-11-03 | 2012-04-13 | 재단법인대구경북과학기술원 | 소프트웨어 컴포넌트 설계정보를 이용한 소프트웨어 테스트 방법 및 시스템 |
CN103198016A (zh) * | 2013-03-26 | 2013-07-10 | 哈尔滨工业大学 | 基于联合依赖概率建模的软件错误定位方法 |
Non-Patent Citations (1)
Title |
---|
邹雨果: "基于程序谱的软件错误定位方法研究", 《万方学位论文》 * |
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107729241B (zh) * | 2017-10-12 | 2020-11-03 | 中国矿业大学 | 一种基于变异体分组的软件变异测试数据进化生成方法 |
CN107729241A (zh) * | 2017-10-12 | 2018-02-23 | 中国矿业大学 | 一种基于变异体分组的软件变异测试数据进化生成方法 |
CN110554952A (zh) * | 2018-06-04 | 2019-12-10 | 西安邮电大学 | 一种基于搜索的分层回归测试数据生成方法 |
CN110554952B (zh) * | 2018-06-04 | 2023-01-20 | 西安邮电大学 | 一种基于搜索的分层回归测试数据生成方法 |
CN109165159A (zh) * | 2018-08-10 | 2019-01-08 | 北京理工大学 | 一种基于程序频谱的多缺陷定位方法 |
CN109165159B (zh) * | 2018-08-10 | 2021-10-01 | 北京理工大学 | 一种基于程序频谱的多缺陷定位方法 |
CN109522097B (zh) * | 2018-10-11 | 2023-03-07 | 天津大学 | 一种基于自适应随机测试的并发缺陷检测方法 |
CN109522097A (zh) * | 2018-10-11 | 2019-03-26 | 天津大学 | 一种基于自适应随机测试的并发缺陷检测方法 |
CN111444079A (zh) * | 2019-01-16 | 2020-07-24 | 河南工业大学 | 一种软件缺陷修复方法及装置 |
CN111444079B (zh) * | 2019-01-16 | 2022-09-30 | 河南工业大学 | 一种软件缺陷修复方法及装置 |
CN111124884A (zh) * | 2019-11-20 | 2020-05-08 | 北京航空航天大学 | 一种基于遗传算法的多故障解耦和故障定位方法 |
CN111737120A (zh) * | 2020-06-15 | 2020-10-02 | 河南工业大学 | 一种软件缺陷修复方法及装置 |
CN111737120B (zh) * | 2020-06-15 | 2022-09-23 | 河南工业大学 | 一种软件缺陷修复方法及装置 |
CN112685320A (zh) * | 2021-01-09 | 2021-04-20 | 北京信息科技大学 | 一种基于多候选程序的软件缺陷修复方法及装置 |
CN112965897B (zh) * | 2021-02-19 | 2022-07-05 | 浙江理工大学 | 一种基于mRMR算法挑选可疑度公式的程序错误定位方法 |
CN112965897A (zh) * | 2021-02-19 | 2021-06-15 | 浙江理工大学 | 一种基于mRMR算法挑选可疑度公式的程序错误定位方法 |
CN113282485A (zh) * | 2021-04-25 | 2021-08-20 | 南京大学 | 一种基于自适应搜索的程序自动修复方法 |
CN113282485B (zh) * | 2021-04-25 | 2023-11-03 | 南京大学 | 一种基于自适应搜索的程序自动修复方法 |
CN115185814A (zh) * | 2022-06-13 | 2022-10-14 | 中南大学 | 一种基于二维程序频谱的多缺陷定位方法、系统及设备 |
CN115185814B (zh) * | 2022-06-13 | 2024-05-21 | 中南大学 | 一种基于二维程序频谱的多缺陷定位方法、系统及设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105760295A (zh) | 基于搜索算法的多缺陷定位方法 | |
Uchôa et al. | How does modern code review impact software design degradation? an in-depth empirical study | |
Jiarpakdee et al. | Autospearman: Automatically mitigating correlated software metrics for interpreting defect models.(2018) | |
Bertolino et al. | On the use of testability measures for dependability assessment | |
Ceylan et al. | Software defect identification using machine learning techniques | |
Gonzalez‐Sanchez et al. | Prioritizing tests for software fault diagnosis | |
Abreu et al. | Diagnosing multiple intermittent failures using maximum likelihood estimation | |
Neelofar et al. | Improving spectral‐based fault localization using static analysis | |
CN111831556A (zh) | 软件多故障解耦及并行定位方法及装置 | |
Amara et al. | Towards a new framework of software reliability measurement based on software metrics | |
Zeng et al. | Dependent failure behavior modeling for risk and reliability: A systematic and critical literature review | |
Badri et al. | Predicting unit testing effort levels of classes: An exploratory study based on multinomial logistic regression modeling | |
Zou et al. | An empirical study of bug fixing rate | |
Jiarpakdee et al. | Autospearman: Automatically mitigating correlated metrics for interpreting defect models | |
Rosli et al. | The design of a software fault prone application using evolutionary algorithm | |
US8402421B2 (en) | Method and system for subnet defect diagnostics through fault compositing | |
Han et al. | A systematic mapping study of software performance research | |
Zakari et al. | Simultaneous isolation of software faults for effective fault localization | |
Küçük et al. | The impact of rare failures on statistical fault localization: the case of the defects4j suite | |
Xia et al. | Balancing effectiveness and flakiness of non-deterministic machine learning tests | |
Chandrasekaran et al. | Evaluating the effectiveness of ben in localizing different types of software fault | |
Zozas et al. | Estimating the maintenance effort of JavasCript applications | |
CN110008098B (zh) | 评估业务流程中的节点的运行状况的方法和装置 | |
Xiao et al. | A Systematic Literature Review on Test Case Prioritization and Regression Test Selection | |
Liutenko et al. | Consideration of the software tests quality evaluation problem |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20160713 |
|
WD01 | Invention patent application deemed withdrawn after publication |