CN111737120A - 一种软件缺陷修复方法及装置 - Google Patents
一种软件缺陷修复方法及装置 Download PDFInfo
- Publication number
- CN111737120A CN111737120A CN202010544826.XA CN202010544826A CN111737120A CN 111737120 A CN111737120 A CN 111737120A CN 202010544826 A CN202010544826 A CN 202010544826A CN 111737120 A CN111737120 A CN 111737120A
- Authority
- CN
- China
- Prior art keywords
- individual
- fitness
- suspicious
- patch
- program
- 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
Images
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/362—Software debugging
- G06F11/3628—Software debugging of optimised code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/12—Computing arrangements based on biological models using genetic models
- G06N3/126—Evolutionary algorithms, e.g. genetic algorithms or genetic programming
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Biophysics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Evolutionary Biology (AREA)
- Bioinformatics & Computational Biology (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Genetics & Genomics (AREA)
- Artificial Intelligence (AREA)
- Biomedical Technology (AREA)
- Computational Linguistics (AREA)
- Quality & Reliability (AREA)
- Physiology (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种软件缺陷修复方法及装置,属于软件工程技术领域。该方法包括:在程序中定位可疑单元;在程序中搜索可疑单元的相似单元,选择M个相似单元作为M个原始个体,组成初始种群;根据程序执行测试用例的情况构造适应度函数,使个体适应度与个体所通过的正、反测试用例个数成正相关,且与个体通过的测试用例中与原始个体不一致的测试用例数成正相关;迭代地进行遗传操作,生成新种群,计算新种群中每个个体的适应度,直至满足迭代停止条件,输出满足迭代停止条件的个体作为补丁,以进行程序修复。本发明能够提高程序修复成功率和修复速度。
Description
技术领域
本发明涉及一种软件缺陷修复方法及装置,属于软件工程技术领域。
背景技术
随着科技的快速发展,人们对软件的要求逐渐提高,软件的功能越来越丰富,规模越来越庞大,但由于当前开发人员的自身局限性或软件本身因素,软件中表现出来的错误也越来越多,而且软件缺陷种类也更加繁杂,由软件缺陷造成的经济损失也越来越大。为了解决软件使用过程中涌现出来的不同问题,开发人员不得不投入极大的人力资源进行软件调试以修复软件缺陷,具体来说,调试过程需要分析和理解失败的执行,确定失败的原因,实现修复,并验证修复后的程序是否正确工作,也就是说,在没有引入任何副作用的情况下修复问题。影响调试成本的因素有很多,但影响最大的是仍然需要大量的人工调试来识别和排除错误。有资料表明,软件维护的成本在软件开发成本中占50%~75%,其中,程序错误定位和修复的成本消耗最大。
传统的人工缺陷修复依赖专业人员,代码复杂易出错,修改时间长,易引入新错误,潜在风险大,总体成本高。为了便于后期维护、降低修复成本,缺陷程序自动修复技术应运而生。现有的软件缺陷自动修复技术,例如授权公告号为CN103294595B的中国发明专利文件中,提出了一种基于遗传算法的软件修复方法,该软件修复方法只采用经典的遗传算法,种群中个体的多样性较少,收敛速度慢,软件修复的成功率较低,软件修复速度慢。
发明内容
本发明的目的是提供一种软件缺陷修复方法及装置,用以解决现有的软件缺陷修复方法的修复成功率低、修复速度慢的问题。
为实现上述目的,本发明提供了一种软件缺陷修复方法,该方法包括以下步骤:
在程序中定位可疑单元,所述可疑单元为可疑语句或可疑语句组合;
在程序中搜索可疑单元的相似单元,选择M个相似单元作为M个原始个体,组成初始种群;所述相似单元是与可疑语句的变量、关键词和运算符至少有一个相同的语句,或者是与可疑语句组合中的变量、关键词和运算符至少有一个相同的语句组合;
根据程序执行测试用例的情况构造适应度函数,使个体适应度与个体所通过的正、反测试用例个数成正相关,且与个体通过的测试用例中与原始个体不一致的测试用例数成正相关;
迭代地进行遗传操作,生成新种群,计算新种群中每个个体的适应度,直至满足迭代停止条件,输出满足迭代停止条件的个体作为补丁,以进行程序修复。
本发明还提供了一种软件缺陷修复装置,该装置包括处理器和存储器,所述处理器执行由所述存储器存储的计算机程序,以实现以上软件缺陷修复方法。
本发明的软件缺陷修复方法及装置的有益效果是:本发明在构建初始种群时,首先将可能导致软件出现缺陷的可疑单元定位出来,然后将与可疑单元的变量、关键词和运算符至少有一个相同的相似单元作为原始个体,保证了原始个体与可疑单元有极大的相关性,相比于现有技术中直接将源程序复制作为原始个体,减少了程序中无关语句参与遗传操作的可能,降低了无关语句的干扰,使缺陷修复更精准,能够提高修复成功率,同时缩小了搜索范围,修复速度更快。
根据定位到的可疑单元的不同,可采用不同的修复方式,进一步地,在上述方法及装置中,所述补丁包括:一个可疑语句的补丁、若干个可疑语句的补丁的组合,或者可疑语句组合的补丁。
进一步地,在上述方法及装置中,所述遗传操作包括交叉操作,所述交叉操作的执行过程如下:对种群中适应度大于设定值的个体采取固定位置的单点交叉策略,即根据需要保护的基因的位置确定交叉点;对种群中适应度小于设定值的个体采取随机位置的单点交叉策略,即交叉点随机确定。
这样做的有益效果是:对于种群中的所有个体,适应度高者采取固定位置的单点交叉策略,适应度值低者采取随机位置的单点交叉策略,充分考虑到了个体差异,不仅能够对适应度高的个体中的有价值基因进行保护,防止其中的有价值基因被破坏,提高交叉重组的有效性,还能够对适应度低的个体进行基因的重组,增加种群中个体的多样性,有利于快速生成高质量的个体,提高修复效率。
进一步地,在上述方法及装置中,构造好的适应度函数为:其中,f(xi)表示个体xi的适应度,Pp(xi)表示个体xi所通过的正测试用例个数,Pn(xi)表示个体xi所通过的反测试用例个数,W1表示所通过正测试用例的权重,W2表示所通过反测试用例的权重,Cg表示原始个体通过的测试用例数,Ci表示个体xi通过的测试用例中与原始个体不一致的测试用例数。
这样做的有益效果是:所构造的适应度函数复杂度较低,使搜索过程更加迅速,能以最快速度找到最优解。
为了增加种群中个体的多样性,以便找到最优解,进一步地,在上述方法及装置中,所述遗传操作包括变异操作,对正测试用例没有访问的路径节点以及适应度较低的个体进行变异操作,变异操作包括语句对应节点的修改、替换和删除。
为了实现编码转换,进一步地,在上述方法及装置中,所述每个语句通过抽象语法树表达。
为了提高原始个体与可疑单元的相关性,降低无关语句的干扰,使缺陷修复更精准,提高修复成功率及修复速度,进一步地,在上述方法及装置中,按照相似度由高到低排序选择相似单元;其中,当相似单元与可疑单元的变量、关键词和运算符相同的数量越多,则相似度越高。
为了进一步提高修复准确率,进一步地,在上述方法及装置中,该方法还包括对生成的补丁进行有效性验证的步骤,所述有效性验证是指,在用生成的补丁对程序进行修复后,利用测试用例集测试修复后的程序是否还会出现缺陷,若没有缺陷出现,则说明该补丁为有效补丁;否则,说明该补丁为无效补丁。
进一步地,在上述方法及装置中,所述迭代停止条件为达到最大进化代数或个体的适应度达到设定要求。
附图说明
图1是方法实施例1中的软件缺陷修复方法流程图;
图2是方法实施例2中的软件缺陷修复方法流程图;
图3是方法实施例3中的软件缺陷修复方法流程图;
图4是装置实施例的结构图。
具体实施方式
本发明提供了一种软件缺陷修复方法及装置,能够提高软件的修复成功率和修复速度。
方法实施例1
一般来说,软件出现问题后,需要采取合适的方式,检测其是否存在缺陷。如果存在缺陷,则需要对这些缺陷进行定位,即找到缺陷程序中的可疑语句,可疑语句是可能导致程序出现缺陷的语句。然后,根据可疑语句构建可疑单元,可疑单元为可疑语句或可疑语句组合,在可疑单元的基础上进行缺陷修复,也就是说软件缺陷定位是软件缺陷修复的前提。
其中,可疑语句的定位可以采用现有成熟的缺陷定位方法实现,例如,可以采用Tarantula方法实现,具体地,先获取缺陷程序源代码;然后利用Tarantula方法得到缺陷程序中每个语句的怀疑值信息;最后将怀疑值高于设定值(根据实际需要设置)的语句作为可疑语句。当然,还可以采用现有的其他软件缺陷定位方法完成,例如Improved Tarantula或Ochiai等。
下面基于软件缺陷定位完成后所获得可疑语句的数量,分情况介绍利用本发明的软件缺陷修复方法进行软件缺陷修复的过程。
本实施例提供了一种基于遗传规划算法的软件缺陷修复方法,遗传规划算法源于遗传算法,本质上属于经典遗传算法的一个改进,在数据挖掘、图像处理、路径规划等领域有重要应用。与遗传算法中的位串不同,遗传规划算法的进化种群个体采用的是树型编码,相对应的交叉、变异操作也与遗传算法有所不同。遗传规划算法的变异、交叉策略是基于抽象语法树的节点进行的,变异或交叉的可能是某个子树或某个叶子节点,具体变化根据采用的变异策略有所不同。
本实施例中,软件缺陷定位完成后仅获得1个可疑语句,以下称可疑语句A。
结合图1本实施例的软件缺陷修复方法包括以下步骤:
步骤1:编码转换,生成初始种群。
具体步骤如下:
S101:在ubuntu操作系统中,将缺陷程序源代码转换成抽象语法树,缺陷程序的每个语句有其对应的树结构,后续的遗传操作在相应语句所对应的树节点上进行;
S102:设置初始种群的大小,令初始种群中包含M个原始个体,M可根据实际需要设置;
S103:在缺陷程序中搜索可疑语句A的相似语句,相似语句是指与可疑语句A的变量、关键词和运算符至少有一个相同的语句。其中,当变量、关键词和运算符均相同时,相似度最高;当变量、关键词和运算符中有2个相同时,相似度次之;当变量、关键词和运算符中仅有1个相同时,相似度最低。
S104:根据搜索得到的相似语句数量,进行原始个体的选择,组成初始种群。其中,当搜索得到的相似语句数量大于M时,按照相似度从高到低从相似语句中选取M个语句作为M个原始个体,组成初始种群;当搜索得到的相似语句数量小于等于M时,将每一个相似语句均作为一个原始个体,同时将初始种群的大小调整为与搜索得到的相似语句的数量相同。
本实施例中相似语句的搜索范围是整个缺陷程序,搜索范围全面,不会发生遗漏,保证了相似语句搜索结果的可靠。
作为其他实施方式,当搜索得到的相似语句数量大于M时,还可以从中随机选择M个语句作为原始个体。
作为其他实施方式,编码转换不限于抽象语法树,还可以采用链表等形式。
步骤2:构造适应度函数,计算初始种群中每个个体的适应度。
适应度函数是描述个体性能的主要指标,当给定一个个体时,适应度函数返回一个表示该个体接受度的一个数值,即适应度。在构造适应度函数时,适应度函数的复杂度不能过高。因为适应度函数的复杂度是遗传算法复杂度的主要组成部分,适应度函数的选取直接影响到遗传算法的收敛速度以及能否找到最优解,所以适应度函数的设计应尽可能简单,使计算的时间复杂度最小。
本实施例中,先令缺陷程序执行测试用例集,其中,测试用例集包括正测试用例集和负测试用例集,正测试用例集为在程序中正确执行的测试用例的集合,负测试用例集为程序执行异常终止或者得出错误结果的测试用例的集合;然后,获取缺陷程序所执行测试用例的情况;最后,根据缺陷程序运行过程中通过的正测试用例、反测试用例的情况,构造适应度函数。本实施例所构造的适应度函数为:
其中,f(xi)表示个体xi的适应度,Pp(xi)表示个体xi所通过的正测试用例个数,Pn(xi)表示个体xi所通过的反测试用例个数,W1表示所通过正测试用例的权重,W2表示所通过反测试用例的权重,Cg表示原始个体通过的测试用例数,Ci表示个体xi通过的测试用例中与原始个体不一致的测试用例数。
本实施例所构造的适应度函数复杂度较低,使搜索过程更加迅速,能以最快速度找到最优解。当然,只要适应度函数的构建符合如下规律:个体适应度与个体所通过的正、反测试用例个数成正相关,且与个体通过的测试用例中与原始个体不一致的测试用例数成正相关,适应度函数不局限于本实施例所提供的形式,例如还可以为:
f(xi)=PT(xi)+α·Pdif(xi)
其中,f(xi)表示个体xi的适应度,PT(xi)表示个体xi所通过的测试用例总数,个体xi所通过的测试用例包括正测试用例和负测试用例,其中,Pp(xi)表示个体xi所通过的正测试用例个数,Pn(xi)表示个体xi所通过的反测试用例个数,则PT(xi)=Pp(xi)+Pn(xi),Pdif(xi)表示个体xi通过的测试用例中与原始个体不一致的测试用例数,α表示个体xi与原始个体测试用例执行情况不同时的权重值。
步骤3:执行遗传操作,生成新种群。
该步骤包括变异操作、交叉操作和选择操作3个子步骤,具体如下:
步骤3-1:执行变异操作
本实施例中,对于正测试用例没有访问的路径节点以及适应度较低的个体进行变异操作,变异操作包括语句对应节点的修改、替换和删除,具体如下:
S301:设置变异概率;
S302:根据测试用例的执行情况和个体的适应度值选择变异个体;
S303:对所选择的变异个体进行节点的修改、替换或删除操作;
S304:变异操作结束。
本实施例中的变异操作,能够增加种群中个体的多样性,以便找到最优解。
步骤3-2:按照混合交叉策略执行交叉操作
本实施例中,混合交叉策略包括固定位置的单点交叉策略和随机位置的单点交叉策略。其中,固定位置的单点交叉策略是指,交叉点由个体中需要保护的基因的位置确定。其中,需要保护的基因所在位置通过遍历树结构后找到相应节点得到;随机位置的单点交叉策略是指,交叉点由随机选择确定。
其中,当参与单点交叉的两个个体均是高适应度且需要保护的基因相同时,交叉点由任一个个体中该需要保护的基因的位置确定;当参与单点交叉的两个个体均是高适应度但需要保护的基因不同时,随机选择一个个体的基因进行保护,交叉点由该选择的个体中需要保护的基因的位置确定;当参与单点交叉的两个个体均是低适应度时,交叉点由任一个个体随机确定;当参与单点交叉的两个个体一个是高适应度一个是低适应度时,交叉点由高适应度的个体中需要保护的基因的位置确定。
采用混合交叉策略执行交叉操作的具体步骤如下:
S401:根据种群中个体的适应度值将种群分为两组,适应度值高于设定值的个体为一组,适应度值低于设定值的个体为一组。例如,将种群中个体根据适应度值大小排序,得到种群适应度列表,设定f为种群适应度列表10%(该值可根据实际需要调整)位置的个体适应度值,以f为界限,适应度值大于f的个体为一组,适应度值小于等于f的为一组;
S402:根据个体适应度值选取不同的单点交叉策略。具体地,对于适应度f(xi)>f的个体,采取固定位置的单点交叉策略,即根据需要保护的基因确定交叉点k;对于适应度f(xi)≤f的个体,采取随机位置的单点交叉策略,即交叉点k为随机选择的;
S403:交叉点k确定后,对个体p1和个体p2执行交叉操作得到子个体O1和子个体O2的过程如下:
对于个体p1选取其前k个基因作为子个体O1的前k个基因;
对于个体p2选取其后N-k个基因作为子个体O1的后N-k个基因,N为个体的总基因数;
子个体O2以相同方式产生;即子个体O1由个体p1的前k个基因和个体p2的后N-k个元素组成;子个体O2由个体p2的前k个基因和个体p1的后N-k个元素组成;
S404:混合交叉策略执行结束。
本实施例中的混合交叉策略,充分考虑到了个体差异,不仅能够对适应度高的个体中的有价值基因进行保护,防止其中的有价值基因被破坏,提高交叉重组的有效性,还能够对适应度低的个体进行基因的重组,增加种群中个体的多样性,有利于快速生成高质量的个体,提高修复效率。
作为其他实施方式,执行交叉操作时,还可以对所有个体均采用同样的交叉策略,例如单点交叉或两点交叉等。
步骤3-3:按照正比选择策略执行选择操作
根据正比选择策略进行个体的选择,即个体的适应度值越大,选中该个体进行遗传的机会越大。对于个体i,设其适应度为Fi,假定种群规模为M,则该个体被选中的概率Pi可以表示为:
进行选择操作的具体过程如下:
S501:根据当前种群中每个个体的适应度值,计算每个个体被选中的概率;
S502:选择概率较大的M个个体进入下一代;
S503:选择操作结束。
步骤4:计算新种群中每个个体的适应度,并判断是否满足迭代终止条件,若满足,则生成补丁,缺陷程序修复完成;否则,先去除适应度低的个体(作为其他实施方式,该步骤可省略),再继续迭代执行步骤3和步骤4。
本实施例中,令满足迭代终止条件为当前种群中有个体的适应度值达到设定要求,则该适应度值达到设定要求的个体就是补丁。作为其他实施方式,还可以令满足迭代终止条件为迭代次数达到最大迭代次数,这种情况下,补丁是迭代次数达到最大迭代次数的种群中适应度值最大的个体。
作为其他实施方式,为了进一步提高修复准确率,在生成补丁后,还可以对补丁进行有效性验证,即在用补丁对软件进行修复后,基于现有的测试用例集,测试修复后的程序是否还会出现缺陷,若没有缺陷出现,则说明程序修复成功,该补丁为有效补丁;否则,该补丁未通过有效性验证,说明该补丁为无效补丁,程序修复失败。
本实施例中,仅定位到1个可疑语句,此时可疑单元就是该可疑语句,相似单元就是该可疑语句的相似语句,所得到的补丁就是该可疑语句的补丁。
方法实施例2
本实施例中,获得软件缺陷定位完成后获得n个不同的可疑语句,n≥2。下面以获得2个不同的可疑语句(以下称可疑语句B和可疑语句C)为例,详细介绍利用本实施例的软件缺陷修复方法进行软件缺陷修复的过程,如图2所示:
先按照方法实施例1中的方法,寻找可疑语句B的相似语句,根据搜索得到的相似语句数量,进行原始个体的选择,建立初始种群1;
再按照方法实施例1中的方法,寻找可疑语句C的相似语句,根据搜索得到的相似语句数量,进行原始个体的选择,建立初始种群2;
然后,按照方法实施例1中的方法,分别对初始种群1和初始种群2进行处理得到可疑语句B的补丁和可疑语句C的补丁;
最后,生成补丁完成程序修复,这时生成的补丁是可疑语句B的补丁和可疑语句C的补丁的组合。
当n>2时,进行软件缺陷修复的过程与此类似,这里不再赘述。
本实施例中,定位到n个不同的可疑语句,在进行软件缺陷修复时,仍以可疑单元是一个可疑语句,相似单元是一个相似语句的方式进行,针对每个可疑语句得到其对应的补丁,将所有可疑语句的补丁组合起来作为修复程序所需的补丁,即本实施例所得补丁实际上是n个可疑语句的补丁的组合。
方法实施例3
本实施例中,软件缺陷定位完成后获得n个不同的可疑语句,n≥2。
下面以获得3个不同的可疑语句(以下称可疑语句E、可疑语句F和可疑语句G)为例,详细介绍利用本实施例的软件缺陷修复方法进行软件缺陷修复的过程,如图3所示:
首先由这3个不同的可疑语句得到一个可疑语句组合Z,该可疑语句组合Z是这3个不同的可疑语句所覆盖的语句块;例如,可疑语句E、可疑语句F和可疑语句G分别是缺陷程序的第3条语句、第9条语句和第10条语句,则可疑语句组合Z就是缺陷程序中从第3条语句到第10条语句的语句块;
其中,可疑语句组合的变量、关键词和运算符为组合中所有可疑语句的变量、关键词和运算符的和。例如,若可疑语句E的变量为a,关键词为int,运算符为+;可疑语句F的变量为b,关键词为float,运算符为×;可疑语句G的变量为c,关键词为byte,运算符为&。那么,可疑语句组合Z的变量为a、b、c,关键词为int、float、byte,运算符为+、×、&。
然后,寻找该可疑语句组合Z的相似单元Z',此时,相似单元Z'是与可疑语句组合Z中的变量、关键词和运算符至少有一个相同的语句组合;相似单元Z'是一个结构与可疑语句组合Z相似的语句块;
接着,根据搜索得到的相似单元数量,按照方法实施例1中的方法进行原始个体的选择,建立初始种群;
接着,按照方法实施例1中的方法,对建立的初始种群进行处理生成相应的补丁;
最后,利用生成的补丁完成程序修复。
当n>2时,进行软件缺陷修复的过程与此类似,这里不再赘述。
本实施例中,定位到n个不同的可疑语句,所生成的补丁是可疑语句组合的补丁。
本实施例中的软件缺陷修复方法,适用于软件缺陷定位完成后获得的不同的可疑语句较多的情况,在进行软件缺陷修复时,以可疑单元是一个可疑语句组合,相似单元是与可疑语句组合中的变量、关键词和运算符至少有一个相同的语句组合的方式进行,如此构建的初始种群中实际上包含了与每个可疑语句的相似语句,生成的补丁中必然包含了每个可疑语句的补丁,如此只需建立一个初始种群,执行一次算法,就可以生成程序修复所需的所有补丁,修复效率高、速度快。
装置实施例
本实施例提供了一种软件缺陷修复装置,如图4所示,包括处理器和存储器,存储器中存储有可在处理器上运行的计算机程序,处理器在执行该计算机程序时实现上述方法实施例中的软件缺陷修复方法。
也就是说,以上方法实施例中的方法应理解为可由计算机程序指令实现软件缺陷修复方法的流程。可提供这些计算机程序指令到处理器(如通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备等),使得通过处理器执行这些指令产生用于实现上述方法流程所指定的功能。
本实施例所指的处理器是指微处理器MCU或可编程逻辑器件FPGA等的处理装置;
本实施例所指的存储器包括用于存储信息的物理装置,通常是将信息数字化后再以利用电、磁或者光学等方式的媒体加以存储。例如:利用电能方式存储信息的各式存储器,RAM、ROM等;利用磁能方式存储信息的的各式存储器,硬盘、软盘、磁带、磁芯存储器、磁泡存储器、U盘;利用光学方式存储信息的各式存储器,CD或DVD。当然,还有其他方式的存储器,例如量子存储器、石墨烯存储器等等。
通过上述存储器、处理器以及计算机程序构成的装置,在计算机中由处理器执行相应的程序指令来实现,处理器可以搭载各种操作系统,如windows操作系统、linux系统、android、iOS系统等。
Claims (10)
1.一种软件缺陷修复方法,其特征在于,该方法包括以下步骤:
在程序中定位可疑单元,所述可疑单元为可疑语句或可疑语句组合;
在程序中搜索可疑单元的相似单元,选择M个相似单元作为M个原始个体,组成初始种群;所述相似单元是与可疑语句的变量、关键词和运算符至少有一个相同的语句,或者是与可疑语句组合中的变量、关键词和运算符至少有一个相同的语句组合;
根据程序执行测试用例的情况构造适应度函数,使个体适应度与个体所通过的正、反测试用例个数成正相关,且与个体通过的测试用例中与原始个体不一致的测试用例数成正相关;
迭代地进行遗传操作,生成新种群,计算新种群中每个个体的适应度,直至满足迭代停止条件,输出满足迭代停止条件的个体作为补丁,以进行程序修复。
2.根据权利要求1所述的软件缺陷修复方法,其特征在于,所述补丁包括:一个可疑语句的补丁、若干个可疑语句的补丁的组合,或者可疑语句组合的补丁。
3.根据权利要求1所述的软件缺陷修复方法,其特征在于,所述遗传操作包括交叉操作,所述交叉操作的执行过程如下:对种群中适应度大于设定值的个体采取固定位置的单点交叉策略,即根据需要保护的基因的位置确定交叉点;对种群中适应度小于设定值的个体采取随机位置的单点交叉策略,即交叉点随机确定。
5.根据权利要求1-4任一项所述的软件缺陷修复方法,其特征在于,所述遗传操作包括变异操作,对正测试用例没有访问的路径节点以及适应度较低的个体进行变异操作,变异操作包括语句对应节点的修改、替换和删除。
6.根据权利要求1-4任一项所述的软件缺陷修复方法,其特征在于,所述每个语句通过抽象语法树表达。
7.根据权利要求1-4任一项所述的软件缺陷修复方法,其特征在于,按照相似度由高到低排序选择相似单元;其中,当相似单元与可疑单元的变量、关键词和运算符相同的数量越多,则相似度越高。
8.根据权利要求1所述的软件缺陷修复方法,其特征在于,该方法还包括对生成的补丁进行有效性验证的步骤,所述有效性验证是指,在用生成的补丁对程序进行修复后,利用测试用例集测试修复后的程序是否还会出现缺陷,若没有缺陷出现,则说明该补丁为有效补丁;否则,说明该补丁为无效补丁。
9.根据权利要求1所述的软件缺陷修复方法,其特征在于,所述迭代停止条件为达到最大进化代数或个体的适应度达到设定要求。
10.一种软件缺陷修复装置,其特征在于,该装置包括处理器和存储器,所述处理器执行由所述存储器存储的计算机程序,以实现如权利要求1-9任一项所述的软件缺陷修复方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010544826.XA CN111737120B (zh) | 2020-06-15 | 2020-06-15 | 一种软件缺陷修复方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010544826.XA CN111737120B (zh) | 2020-06-15 | 2020-06-15 | 一种软件缺陷修复方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111737120A true CN111737120A (zh) | 2020-10-02 |
CN111737120B CN111737120B (zh) | 2022-09-23 |
Family
ID=72649202
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010544826.XA Active CN111737120B (zh) | 2020-06-15 | 2020-06-15 | 一种软件缺陷修复方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111737120B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112948193A (zh) * | 2021-03-08 | 2021-06-11 | 北京理工大学 | 一种基于差异测试的fpga综合工具缺陷检测方法 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103294595A (zh) * | 2013-05-23 | 2013-09-11 | 西安电子科技大学 | 一种基于遗传算法的软件修复方法 |
US20130308570A1 (en) * | 2012-05-17 | 2013-11-21 | Beijing University Of Posts And Telecommunications | Method for joint optimization of schedule and resource allocation based on the genetic algorithm |
CN103914386A (zh) * | 2014-04-21 | 2014-07-09 | 西北工业大学 | 基于输入参数特征谱的软件缺陷定位方法 |
CN105760295A (zh) * | 2015-12-28 | 2016-07-13 | 天津大学 | 基于搜索算法的多缺陷定位方法 |
WO2016165392A1 (zh) * | 2015-04-17 | 2016-10-20 | 华南理工大学 | 一种基于遗传算法的云计算资源调度方法 |
CN107577603A (zh) * | 2017-08-31 | 2018-01-12 | 中国科学院软件研究所 | 一种基于测试用例构建决策树的程序条件语句自动化修复系统及方法 |
CN109885471A (zh) * | 2017-12-06 | 2019-06-14 | 河南工业大学 | 一种基于粒子群优化的软件多错误定位方法及处理装置 |
CN110427316A (zh) * | 2019-07-04 | 2019-11-08 | 沈阳航空航天大学 | 基于访问行为感知的嵌入式软件缺陷修复方法 |
CN110442527A (zh) * | 2019-08-16 | 2019-11-12 | 扬州大学 | 面向bug报告的自动化修复方法 |
CN110879778A (zh) * | 2019-10-14 | 2020-03-13 | 杭州电子科技大学 | 一种新的动态反馈和改进型补丁评价的软件自动修复方法 |
-
2020
- 2020-06-15 CN CN202010544826.XA patent/CN111737120B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130308570A1 (en) * | 2012-05-17 | 2013-11-21 | Beijing University Of Posts And Telecommunications | Method for joint optimization of schedule and resource allocation based on the genetic algorithm |
CN103294595A (zh) * | 2013-05-23 | 2013-09-11 | 西安电子科技大学 | 一种基于遗传算法的软件修复方法 |
CN103914386A (zh) * | 2014-04-21 | 2014-07-09 | 西北工业大学 | 基于输入参数特征谱的软件缺陷定位方法 |
WO2016165392A1 (zh) * | 2015-04-17 | 2016-10-20 | 华南理工大学 | 一种基于遗传算法的云计算资源调度方法 |
CN105760295A (zh) * | 2015-12-28 | 2016-07-13 | 天津大学 | 基于搜索算法的多缺陷定位方法 |
CN107577603A (zh) * | 2017-08-31 | 2018-01-12 | 中国科学院软件研究所 | 一种基于测试用例构建决策树的程序条件语句自动化修复系统及方法 |
CN109885471A (zh) * | 2017-12-06 | 2019-06-14 | 河南工业大学 | 一种基于粒子群优化的软件多错误定位方法及处理装置 |
CN110427316A (zh) * | 2019-07-04 | 2019-11-08 | 沈阳航空航天大学 | 基于访问行为感知的嵌入式软件缺陷修复方法 |
CN110442527A (zh) * | 2019-08-16 | 2019-11-12 | 扬州大学 | 面向bug报告的自动化修复方法 |
CN110879778A (zh) * | 2019-10-14 | 2020-03-13 | 杭州电子科技大学 | 一种新的动态反馈和改进型补丁评价的软件自动修复方法 |
Non-Patent Citations (3)
Title |
---|
VIDROHA DEBROY AND W. ERIC WONG: "Using Mutation to Automatically Suggest Fixes for Faulty Programs", 《 2010 THIRD INTERNATIONAL CONFERENCE ON SOFTWARE TESTING, VERIFICATION AND VALIDATION》 * |
周明泉等: "一种基于频谱信息并结合碰集和遗传算法的缺陷定位方法", 《计算机科学》 * |
王甜甜等: "示例演化驱动的学生程序自动修复", 《软件学报》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112948193A (zh) * | 2021-03-08 | 2021-06-11 | 北京理工大学 | 一种基于差异测试的fpga综合工具缺陷检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111737120B (zh) | 2022-09-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Wang et al. | Search, align, and repair: data-driven feedback generation for introductory programming exercises | |
CN110502447B (zh) | 一种基于图的回归测试用例优先排序方法 | |
Bouchachia | An immune genetic algorithm for software test data generation | |
CN103294595B (zh) | 一种基于遗传算法的软件修复方法 | |
CN105260312B (zh) | 一种多核实时系统应用数据竞争错误的调试方法 | |
CN106776208A (zh) | 一种软件运行时故障定位方法 | |
CN110399286A (zh) | 一种基于独立路径的测试数据自动生成方法 | |
CN111737120B (zh) | 一种软件缺陷修复方法及装置 | |
CN102622295B (zh) | 一种基于谓词执行信息分析的自适应软件缺陷定位方法 | |
CN117453539A (zh) | 一种基于大语言模型赋能的编译器缺陷定位方法 | |
CN111782532A (zh) | 一种基于网络异常节点分析的软件故障定位方法及系统 | |
Wu et al. | Genmunn: A mutation-based approach to repair deep neural network models | |
CN111767546B (zh) | 一种基于深度学习的输入结构推断方法和装置 | |
CN106776283A (zh) | 一种基于条件概率的程序错误定位方法 | |
Masud et al. | Strategy for mutation testing using genetic algorithms | |
CN110879778B (zh) | 一种新的动态反馈和改进型补丁评价的软件自动修复方法 | |
CN114064472A (zh) | 基于代码表示的软件缺陷自动修复加速方法 | |
CN115827353A (zh) | 故障诊断方法及装置 | |
CN115460297A (zh) | 一种网络安全协议的自动形式化验证方法 | |
Li et al. | CLACER: A deep learning-based compilation error classification method for novice students’ programs | |
CN113282495A (zh) | 一种基于轨迹监控的Java软件故障定位方法 | |
Romanov et al. | Prediction of types in python with pre-trained graph neural networks | |
Shaka et al. | Error Tracing in Programming: A Path to Personalised Feedback | |
CN114880218B (zh) | 一种基于搜索的smt求解器故障定位方法 | |
CN115774677B (zh) | 一种基于多参数输入的模糊测试方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |