CN113282485B - 一种基于自适应搜索的程序自动修复方法 - Google Patents

一种基于自适应搜索的程序自动修复方法 Download PDF

Info

Publication number
CN113282485B
CN113282485B CN202110447621.4A CN202110447621A CN113282485B CN 113282485 B CN113282485 B CN 113282485B CN 202110447621 A CN202110447621 A CN 202110447621A CN 113282485 B CN113282485 B CN 113282485B
Authority
CN
China
Prior art keywords
search space
defect
patch
program
search
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.)
Active
Application number
CN202110447621.4A
Other languages
English (en)
Other versions
CN113282485A (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 CN202110447621.4A priority Critical patent/CN113282485B/zh
Publication of CN113282485A publication Critical patent/CN113282485A/zh
Application granted granted Critical
Publication of CN113282485B publication Critical patent/CN113282485B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种基于自适应搜索的程序自动修复方法。本方法可以自动对原始缺陷程序进行修改,使得其能够通过给定的测试用例集。本方法通过补丁的疏密程度,推测出当前搜索空间是否过小或者过大,并且通过分析得到影响搜索空间大小的因素,包括缺陷语句、修改算子、可重用代码元素和最多修改位置,根据这些因素设定了一系列策略,自适应调整搜索空间的大小,并且通过补丁验证,最终给出缺陷程序的修复结果。在开源缺陷数据集Defects4J上的实验表明,基于自适应搜索的程序自动修复方法较传统的基于固定搜索空间的程序自动修复方法有更好的修复效果。

Description

一种基于自适应搜索的程序自动修复方法
技术领域
本发明涉及一种基于自适应搜索的程序自动修复方法,可在程序修复过程中自适应调整搜索空间大小,以实现更好的修复效果。属于软件调试技术领域。
背景技术
软件故障调试是一个痛苦、耗时且昂贵的过程。调试过程要求软件开发人员来分析和理解程序失败的执行过程,找到故障的根本原因,然后实现修复方案,直到验证修复后的软件能够正确运行而不引入新的缺陷。软件调试过程耗费了大量人力成本,软件产品总体开发成本的一半左右都耗费在软件故障调试过程之中。如果软件程序能够自动修复,无疑将大大减少开发人员的维护成本和时间,更快地提高软件质量。
为了减少开发人员的工作量,近年来,程序自动修复技术作为一种有效修复和维护软件的解决方案被广泛研究,并取得显著的研究成果。其中,研究最广泛的是一类基于搜索的程序自动修复方法,这类方法通常采用随机或者启发式的搜索算法来探索可能的修复空间。在此类方法中,最关键的两个阶段是补丁生成和补丁验证,首先会通过修改源程序生成许多补丁,然后尝试验证每个补丁,生成验证的过程不断循环进行,直到满足某些停止条件为止。基于搜索的程序自动修复方法把修复看作是一个搜索问题,即在算法规定的补丁修复空间中,找到能够正确通过所有测试的补丁。
由于搜索代价往往是有限的,因此现有的基于搜索的方法会限制搜索空间的大小,然而如何针对不同的程序设定合适大小的搜索空间依然是个难题,原因在于:
(1)如果补丁搜索空间设置过小,那么很有可能在验证完所有生成的补丁后仍不能找到目标补丁;
(2)如果补丁搜索空间设置过大,验证完所有生成的补丁又需要花费大量的时间,搜索代价过于巨大。
现有的这种预先固定补丁搜索空间的方式不能确定合适的搜索空间大小,很容易存在大小不合理的现象,从而导致修复失败。
发明内容
发明目的:现有的基于固定搜索空间的方法采取预先设定搜索空间的方式,可能存在大小不合理的现象,空间过小或者过大都有可能在规定的时间限制内搜索不到正确补丁,因此往往需要对搜索代价和搜索结果做出权衡。本发明采用一种基于自适应搜索的方法,在修复过程中根据已生成补丁的疏密程度自适应地调整补丁搜索空间的大小。该技术方案需要考虑以下问题:
(1)通过判断哪些指标来决定是否需要调整搜索空间大小;
(2)通过哪些方式来实现调整搜索空间大小。
对于问题(1),由于补丁生成时采用随机搜索的策略,当搜索空间过小时,有较大概率重复生成相同的补丁,当搜索空间过大时,这一概率会变得极小。因此,本发明根据重复生成相同补丁的频率近似表示当前搜索空间内生成补丁的疏密程度。本发明定义了补丁生成窗口,记录生成的补丁及其缓存命中次数,通过将窗口内缓存命中数与上限阈值和下限阈值相比较,决定当前是否扩大或缩小搜索空间。
对于问题(2),通过分析我们发现影响补丁搜索空间的因素主要包括:缺陷语句数量、修改算子数量、可重用代码元素数量以及对源缺陷程序的最多修改位置。因此针对这四个因素,本发明制定了一系列策略来自适应调整搜索空间大小。对于缺陷语句,本发明动态调整缺陷定位阈值,只取可疑度大于阈值的语句;对于修改算子,根据其粒度划分为粗粒度的语句级别算子和细粒度的表达式级别算子;对于可重用代码元素,提出一种使用已有代码元素合成新代码元素的方法;对于最多修改位置,本发明实现了对程序中上下文相似的多处位置同时修改。
本发明提出一种基于自适应搜索的程序自动修复方法APRAS(Automatic ProgramRepair based on Adaptive Search)。在真实缺陷数据集上的实验结果表明,本发明方法在修复成功率上,相较于现有的基于固定搜索空间的方法有所提升。
技术方案:一种基于自适应搜索的程序自动修复方法,自动对原始缺陷程序进行修改,使得其能够通过给定的测试用例集,通过补丁的疏密程度,推测出当前搜索空间是否过小或者过大,并且通过分析得到影响搜索空间大小的因素,包括缺陷语句、修改算子、可重用代码元素和最多修改位置,根据这些因素设定了一系列策略,自适应调整搜索空间的大小,在搜索空间中随机生成补丁,并且通过基于软件动态更新的方法来加速补丁验证,提高验证效率,最终给出缺陷程序的修复结果。
具体包括以下两个部分:
(1)通过补丁生成缓存记录修复过程中生成过的补丁,通过设定数量补丁的窗口内缓存命中数来获取补丁疏密程度;
(2)通过影响搜索空间的各因素设定策略,在修复过程中以自适应方式调整动态搜索空间大小。
(1)通过补丁生成缓存记录修复过程中生成过的补丁,通过特定数量补丁的窗口内缓存命中数来获取补丁疏密程度;
APRAS的输入为缺陷程序P以及配套的测试用例集T,最终输出可以通过测试的正确补丁R。修复过程中会对缺陷程序P进行随机修改得到候选补丁Pd,修改动作d表示为三元组(f,o,u)的形式,f为修改的语句位置,o为采用的修改算子,u为选择的可重用代码元素。修复过程中连续生成的设定数量补丁组成一个补丁生成窗口<Pd1,Pd2,Pd3…PdL>,L为窗口长度,即窗口内的补丁数量。维护一个补丁生成缓存,每个候选补丁Pd在生成时都会去判断是否已经存在于缓存中。如果存在那么说明之前已经生成同样的补丁,该补丁对应的缓存命中次数hcp自增并且舍弃该补丁,重新生成新的补丁;如果不存在则将该补丁个体添加到补丁缓存。补丁窗口内缓存命中数hcw为窗口内所有补丁缓存命中数之和,通过下面的公式来进行更新:
hcw=hcw+hcpn-hcpo
其中,hcpn表示最新生成的补丁对应的缓存命中数,hcpo表示窗口中最早生成的补丁对应的缓存命中数。
根据补丁生成窗口内缓存命中次数hcw来判断当前是否需要调整搜索空间的大小。若hcw大于上限阈值ΦH,则扩大搜索空间;若hcw小于下限阈值ΦL,则缩小搜索空间。不同规模的搜索空间对应的缓存命中阈值也不同,缓存命中阈值和实际搜索空间大小呈正相关关系。按照如下公式计算缓存命中阈值:
其中NF表示缺陷语句集合F的基数,NO表示修改算子集合O的基数,NU表示可重用代码元素集合U的基数,α表示更新系数,范围取(0,1]。
(2)通过影响搜索空间的各因素设定策略,在修复过程中以自适应方式调整动态搜索空间大小。
通过分析发现,影响搜索空间大小的因素主要包括缺陷语句数量NF、修改算子数量NO、可重用代码元素数量NU和对源缺陷程序的最多修改位置j。针对此四个因素,本发明提出四种策略来调整搜索空间大小,分别是:调整缺陷语句数量、改变修改算子粒度、合成可重用代码元素以及修改上下文相似位置。
调整缺陷语句数量通过改变缺陷定位阈值μ的方式来实现。只选择可疑度v≥μ的语句作为修改对象,按照如下公式来对μ进行更新:
其中,β表示阈值更新系数,范围取(0,1]。改变修改算子粒度包括扩大搜索空间时由语句级别扩展到表达式级别,缩小搜索空间时由表达式级别回退到语句级别。合成可重用代码元素是通过将已有表达式包含的变量和常量用占位符代替,并记录表达式本身和占位符所代表的元素的数据类型,提取出一系列抽象表达式,在某个修改位置应用抽象表达式来合成具体表达式时,通过该位置可访问到的变量信息,选择匹配的变量替换占位符,从而得到新的可重用表达式。修改上下文相似位置通过对某条缺陷语句f以及与之相似的其他语句S(f)同时修改,将多行修改的搜索空间大小降低到单行修改级别。
附图说明
图1是基于自适应搜索的程序自动修复方法APRAS模型图;
图2是本发明实施流程。
具体实施方式
下面结合具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。
基于自适应搜索的程序自动修复方法,包括:
(1)通过补丁生成缓存记录修复过程中生成过的补丁,通过特定数量补丁的窗口内缓存命中数来获取补丁疏密程度;
APRAS的输入为缺陷程序P以及配套的测试用例集T,最终输出可以通过测试的正确补丁R。修复过程中会对缺陷程序P进行随机修改得到候选补丁Pd,修改动作d表示为三元组(f,o,u)的形式,f为修改的语句位置,o为采用的修改算子,u为选择的可重用代码元素。修复过程中连续生成的设定数量补丁组成一个补丁生成窗口<Pd1,Pd2,Pd3…PdL>,L为窗口长度,即窗口内的补丁数量。维护一个补丁生成缓存,每个候选补丁Pd在生成时都会去判断是否已经存在于缓存中。如果存在那么说明之前已经生成同样的补丁,该补丁对应的缓存命中次数hcp自增并且舍弃该补丁,重新生成新的补丁;如果不存在则将该补丁个体添加到补丁缓存。补丁窗口内缓存命中数hcw为窗口内所有补丁缓存命中数之和,通过下面的公式来进行更新:
hcw=hcw+hcpn-hcpo
其中,hcpn表示最新生成的补丁对应的缓存命中数,hcpo表示窗口中最早生成的补丁对应的缓存命中数。
根据补丁生成窗口内缓存命中次数hcw来判断当前是否需要调整搜索空间的大小。若hcw大于上限阈值ΦH,则扩大搜索空间;若hcw小于下限阈值ΦL,则缩小搜索空间。不同规模的搜索空间对应的缓存命中阈值也不同,缓存命中阈值和实际搜索空间大小呈正相关关系。按照如下公式计算缓存命中阈值:
其中NF表示缺陷语句集合F的基数,NO表示修改算子集合O的基数,NU表示可重用代码元素集合U的基数,α表示更新系数,范围取(0,1]。
(2)通过影响搜索空间的各因素设定策略,在修复过程中以自适应方式调整动态搜索空间大小。
通过分析发现,影响搜索空间大小的因素主要包括缺陷语句数量NF、修改算子数量NO、可重用代码元素数量NU和对源缺陷程序的最多修改位置j。针对此四个因素,本发明提出四种策略来调整搜索空间大小,分别是:调整缺陷语句数量、改变修改算子粒度、合成可重用代码元素以及修改上下文相似位置。
调整缺陷语句数量通过改变缺陷定位阈值μ的方式来实现。只选择可疑度v≥μ的语句作为修改对象,按照如下公式来对μ进行更新:
其中,β表示阈值更新系数,范围取(0,1]。改变修改算子粒度包括扩大搜索空间时由语句级别扩展到表达式级别,缩小搜索空间时由表达式级别回退到语句级别。合成可重用代码元素是通过将已有表达式包含的变量和常量用占位符代替,并记录表达式本身和占位符所代表的元素的数据类型,提取出一系列抽象表达式,在某个修改位置应用抽象表达式来合成具体表达式时,通过该位置可访问到的变量信息,选择匹配的变量替换占位符,从而得到新的可重用表达式。修改上下文相似位置通过对某条缺陷语句f以及与之相似的其他语句S(f)同时修改,将多行修改的搜索空间大小降低到单行修改级别。
本方法模型图如图1所示。首先,输入缺陷程序和测试用例集,经过预处理阶段得到缺陷语句集合、修改算子集合以及可重用代码元素集合。然后,在补丁生成阶段,根据上面得到的这些集合共同构成补丁搜索空间,在搜索空间中随机搜索生成候选补丁,通过补丁生成缓存的命中次数来表示当前搜索空间的疏密程度,据此来调整搜索空间的大小。最后通过补丁验证阶段来验证候选补丁的正确性。
在缺陷定位阶段,使用基于频谱的测试工具GZoltar来对缺陷程序进行缺陷定位,该方法可以获取每条语句执行过的失败测试用例和通过测试用例的数量,进而通过Ochihi方法计算出每条缺陷语句对应的可疑度,最终可以得到一个缺陷语句集合F。并且,为了支持表达式级别上的修改,对缺陷语句中所包含的可能存在缺陷的表达式也进行了定位。
在进行相似代码检测时,首先通过抽象语法树解析得到待检测目标语句对应的节点,然后逐级向上直到方法级别,遍历该语句所在方法体中的语句,如果某条语句与目标语句所包含token的Jaccard相似系数大于等于阈值,则将其加入相似语句集合中。下面是Jaccard相似系数计算公式:
对于相似的代码,将它们对应的AST节点建立一对一的映射关系M。如果某条修改的缺陷语句存在与之相似的其他语句,通过映射关系M,将该缺陷语句应用的修改动作同时应用到其他相似语句位置,即对上下文相似的代码位置同步修改。
在提取可重用代码元素时。可重用代码元素指的是当修改动作为插入和替换时所需要的新的代码元素,根据操作算子的粒度,可重用代码元素又可分为可重用语句和可重用表达式。对于提取出来的语句或表达式,分析其中使用到的变量和方法信息,修复过程中通过比较可重用代码元素和缺陷位置的信息,可以过滤掉变量或方法不在作用域中的情况,减小编译失败的概率。为了增加可重用代码元素的数量,提出一种可以使用程序中已有的代码元素来合成新的可重用代码元素的方法。本方法中的可重用代码元素特指可重用表达式。对于已有的表达式,将其中包含的变量和常量用占位符来代替,并记录表达式本身和占位符所代表的元素的数据类型,提取出一系列抽象表达式。在某个修改位置应用抽象表达式来合成具体表达式时,通过该位置可访问到的变量信息,选择类型匹配的变量替换占位符,从而得到新的可重用表达式。
修改算子的粒度包括粗粒度的语句级别和细粒度的表达式级别。语句级别的修改算子包括:插入一条语句、删除一条语句、将一条语句替换成另外一条语句。表达式级别的修改算子包括:相同类型表达式替换、逻辑表达式插入和删除。扩大搜索空间时,修改算子的粒度可以从语句级别扩展到表达式级别;反之,缩小搜索空间时,修改算子粒度从表达式级别回退到语句级别。
实验设置:为每个缺陷设置修复时间上限为2小时,如果能够在规定时间内给出可以通过测试用例集的修复补丁,则认为修复成功。
评价指标:将修复成功率Success Rate(SR)作为评价指标,SR计算公式如下所示:
其中,K为缺陷总数,τ(i)为指示函数,第i个缺陷修复成功时τ(i)=1,否则τ(i)=0。
实验数据:选取了开源的真实缺陷数据集Defects4J中的5个缺陷项目Chart、Closure、Lang、Math、Time。其中过滤掉不能应用缺陷定位工具GZoltar的缺陷,共计360个缺陷,每个项目的缺陷数量如表1所示,共计360个缺陷。
比较方法:选取了三种不同的程序自动修复方法来与APRAS进行比较:
(1)jGenProg,一种基于遗传编程的修复方法;
(2)iKali,一种基于随机删除的修复方法;
(3)jMutRepair,一种基于变异的修复方法。
以上三种方法均采用相同的缺陷定位工具GZoltar,且都是基于固定搜索空间的程序自动修复方法。
实验结果:将APRAS与这三种基于固定搜索空间的程序自动修复方法进行比较,结果如表2所示。可以看到,APRAS的修复成功率达到了18.3%,相比于对比方法有了显著的提升,证明了本发明在修复实际程序缺陷时的有效性。
表1实例缺陷数量统计
项目标识 项目名 缺陷数量
Chart jfreechart 26
Closure closure-compiler 138
Lang commons-lang 64
Math commons-math 106
Time joda-time 26
表2实例修复成功率

Claims (9)

1.一种基于自适应搜索的程序自动修复方法,其特征在于,通过补丁的疏密程度,推测出当前搜索空间是否过小或者过大,并且通过分析得到影响搜索空间大小的因素,根据这些因素设定了一系列策略,自适应调整搜索空间的大小,在搜索空间中随机生成补丁,最终给出缺陷程序的修复结果;具体包括以下两个部分:
(1)通过补丁生成缓存记录修复过程中生成过的补丁,通过设定数量补丁的窗口内缓存命中数来获取补丁疏密程度;
(2)通过影响搜索空间的各因素设定策略,在修复过程中以自适应方式调整动态搜索空间大小;
所述通过补丁生成缓存记录修复过程中生成过的补丁,通过设定数量补丁的窗口内缓存命中数来获取补丁疏密程度的部分中:
缺陷程序P以及配套的测试用例集T作为输入,通过测试的正确补丁R为输出;修复过程中会对缺陷程序P进行随机修改得到候选补丁Pd,修改动作d表示为三元组(f,o,u)的形式,f为修改的语句位置,o为采用的修改算子,u为选择的可重用代码元素;修复过程中连续生成的设定数量补丁组成一个补丁生成窗口<Pd1,Pd2,Pd3…PdL>,L为窗口长度,即窗口内的补丁数量;维护一个补丁生成缓存,每个候选补丁Pd在生成时都会去判断是否已经存在于缓存中;如果存在那么说明之前已经生成同样的补丁,该补丁对应的缓存命中次数hcp自增并且舍弃该补丁,重新生成新的补丁;如果不存在则将该补丁个体添加到补丁缓存;补丁窗口内缓存命中数hcw为窗口内所有补丁缓存命中数之和,通过下面的公式来进行更新:
hcw=hcw+hcpn-hcpo
其中,hcpn表示最新生成的补丁对应的缓存命中数,hcpo表示窗口中最早生成的补丁对应的缓存命中数。
2.根据权利要求1所述的基于自适应搜索的程序自动修复方法,其特征在于,影响搜索空间大小的因素包括缺陷语句、修改算子、可重用代码元素和最多修改位置。
3.根据权利要求1所述的基于自适应搜索的程序自动修复方法,其特征在于,首先,输入缺陷程序和测试用例集,经过预处理阶段得到缺陷语句集合、修改算子集合以及可重用代码元素集合;在补丁生成阶段,根据上面得到的这些集合共同构成补丁搜索空间,在搜索空间中随机搜索生成候选补丁,通过补丁生成缓存的命中次数来表示当前搜索空间的疏密程度,据此来调整搜索空间的大小;最后通过补丁验证阶段来验证候选补丁的正确性。
4.根据权利要求3所述的基于自适应搜索的程序自动修复方法,其特征在于,根据补丁生成窗口内缓存命中次数hcw来判断当前是否需要调整搜索空间的大小;若hcw大于上限阈值ΦH,则扩大搜索空间;若hcw小于下限阈值ΦL,则缩小搜索空间;不同规模的搜索空间对应的缓存命中阈值也不同,缓存命中阈值和实际搜索空间大小呈正相关关系;按照如下公式计算缓存命中阈值:
其中NF表示缺陷语句集合F的基数,NO表示修改算子集合O的基数,NU表示可重用代码元素集合U的基数,α表示更新系数,范围取(0,1]。
5.根据权利要求2所述的基于自适应搜索的程序自动修复方法,所述通过影响搜索空间的各因素设定策略,在修复过程中以自适应方式调整动态搜索空间大小的部分中:
针对四种因素,提出四种策略来调整搜索空间大小,分别是:调整缺陷语句数量、改变修改算子粒度、合成可重用代码元素以及修改上下文相似代码位置;
所述调整缺陷语句数量通过改变缺陷定位阈值μ的方式来实现;只选择可疑度v≥μ的语句作为修改对象;
所述改变修改算子粒度包括扩大搜索空间时由语句级别扩展到表达式级别,缩小搜索空间时由表达式级别回退到语句级别;
所述合成可重用代码元素是通过将已有表达式包含的变量和常量用占位符代替,并记录表达式本身和占位符所代表的元素的数据类型,提取出一系列抽象表达式,在某个修改位置应用抽象表达式来合成具体表达式时,通过该位置可访问到的变量信息,选择匹配的变量替换占位符,从而得到新的可重用表达式
所述修改上下文相似代码位置通过对某条缺陷语句f以及与之相似的其他语句S(f)同时修改,将多行修改的搜索空间大小降低到单行修改级别。
6.根据权利要求3所述的基于自适应搜索的程序自动修复方法,其特征在于,在缺陷定位阶段,使用基于频谱的测试工具GZoltar来对缺陷程序进行缺陷定位,该方法获取每条语句执行过的失败测试用例和通过测试用例的数量,进而通过Ochihi方法计算出每条缺陷语句对应的可疑度,最终得到一个缺陷语句集合F;并且,为了支持表达式级别上的修改,对缺陷语句中所包含的可能存在缺陷的表达式也进行了定位。
7.根据权利要求5所述的基于自适应搜索的程序自动修复方法,其特征在于,在进行相似代码检测时,首先通过抽象语法树解析得到待检测的目标语句对应的节点,然后逐级向上直到方法级别,遍历该语句所在方法体中的语句,如果某条语句与目标语句所包含token的Jaccard相似系数大于等于阈值,则将其加入相似语句集合中;下面是Jaccard相似系数计算公式:
对于相似的代码,将它们对应的AST节点建立一对一的映射关系M;如果某条修改的缺陷语句存在与之相似的其他语句,通过映射关系M,将该缺陷语句应用的修改动作同时应用到其他相似语句位置,即对上下文相似的代码位置同步修改。
8.根据权利要求2所述的基于自适应搜索的程序自动修复方法,其特征在于,在提取可重用代码元素时;可重用代码元素指的是当修改动作为插入和替换时所需要的新的代码元素,根据操作算子的粒度,可重用代码元素又分为可重用语句和可重用表达式;对于提取出来的语句或表达式,分析其中使用到的变量和方法信息,修复过程中通过比较可重用代码元素和缺陷位置的信息,过滤掉变量或方法不在作用域中的情况;可重用代码元素特指可重用表达式。
9.根据权利要求6所述的基于自适应搜索的程序自动修复方法,其特征在于,修改算子的粒度包括粗粒度的语句级别和细粒度的表达式级别;语句级别的修改算子包括:插入一条语句、删除一条语句、将一条语句替换成另外一条语句;表达式级别的修改算子包括:相同类型表达式替换、逻辑表达式插入和删除;扩大搜索空间时,修改算子的粒度从语句级别扩展到表达式级别;反之,缩小搜索空间时,修改算子粒度从表达式级别回退到语句级别。
CN202110447621.4A 2021-04-25 2021-04-25 一种基于自适应搜索的程序自动修复方法 Active CN113282485B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110447621.4A CN113282485B (zh) 2021-04-25 2021-04-25 一种基于自适应搜索的程序自动修复方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110447621.4A CN113282485B (zh) 2021-04-25 2021-04-25 一种基于自适应搜索的程序自动修复方法

Publications (2)

Publication Number Publication Date
CN113282485A CN113282485A (zh) 2021-08-20
CN113282485B true CN113282485B (zh) 2023-11-03

Family

ID=77277343

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110447621.4A Active CN113282485B (zh) 2021-04-25 2021-04-25 一种基于自适应搜索的程序自动修复方法

Country Status (1)

Country Link
CN (1) CN113282485B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115951892A (zh) * 2022-11-08 2023-04-11 北京交通大学 一种基于表达式的程序补丁生成方法

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1856781A (zh) * 2003-08-11 2006-11-01 合声系统公司 用于创建和使用自适应参考模型的系统及方法
WO2013121394A1 (en) * 2012-02-15 2013-08-22 Universidade Do Porto Remote debugging service
CN105760295A (zh) * 2015-12-28 2016-07-13 天津大学 基于搜索算法的多缺陷定位方法
CN106445801A (zh) * 2016-04-27 2017-02-22 南京慕测信息科技有限公司 一种基于频谱定位和可视化定位软件缺陷的方法
CN107577603A (zh) * 2017-08-31 2018-01-12 中国科学院软件研究所 一种基于测试用例构建决策树的程序条件语句自动化修复系统及方法
GB201808056D0 (en) * 2018-05-17 2018-07-04 Babylon Partners Ltd Device and method for natural language processing
CN109066710A (zh) * 2018-07-13 2018-12-21 国网安徽省电力有限公司滁州供电公司 一种多目标无功优化方法、装置、计算机设备及存储介质
CN110009710A (zh) * 2019-02-21 2019-07-12 李婉彤 一种基于粒子群优化算法的网络拓扑图形自动生成方法
KR20190127411A (ko) * 2018-05-04 2019-11-13 한국과학기술원 코드 및 변화 메트릭들을 이용한 결함 위치 추정 방법 및 장치
CN111625444A (zh) * 2020-04-10 2020-09-04 中国科学院软件研究所 一种基于频谱法的程序错误定位方法和装置

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1856781A (zh) * 2003-08-11 2006-11-01 合声系统公司 用于创建和使用自适应参考模型的系统及方法
WO2013121394A1 (en) * 2012-02-15 2013-08-22 Universidade Do Porto Remote debugging service
CN105760295A (zh) * 2015-12-28 2016-07-13 天津大学 基于搜索算法的多缺陷定位方法
CN106445801A (zh) * 2016-04-27 2017-02-22 南京慕测信息科技有限公司 一种基于频谱定位和可视化定位软件缺陷的方法
CN107577603A (zh) * 2017-08-31 2018-01-12 中国科学院软件研究所 一种基于测试用例构建决策树的程序条件语句自动化修复系统及方法
KR20190127411A (ko) * 2018-05-04 2019-11-13 한국과학기술원 코드 및 변화 메트릭들을 이용한 결함 위치 추정 방법 및 장치
GB201808056D0 (en) * 2018-05-17 2018-07-04 Babylon Partners Ltd Device and method for natural language processing
CN109066710A (zh) * 2018-07-13 2018-12-21 国网安徽省电力有限公司滁州供电公司 一种多目标无功优化方法、装置、计算机设备及存储介质
CN110009710A (zh) * 2019-02-21 2019-07-12 李婉彤 一种基于粒子群优化算法的网络拓扑图形自动生成方法
CN111625444A (zh) * 2020-04-10 2020-09-04 中国科学院软件研究所 一种基于频谱法的程序错误定位方法和装置

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Threats to Validity in Experimenting Mutation-Based Fault Localization;Juyoung Jeon;2020 IEEE/ACM 42nd International Conference on Software Engineering: New Ideas and Emerging Results (ICSE-NIER);1-4 *
一种基于本体的软件自适应机制;潘健等;《计算机科学》;第34卷(第11期);264-269 *
基于启发式搜索的软件缺陷自动修复技术研究;石建树;《中国优秀硕士学位论文全文数据库 信息科技辑》(第01期);I138-371 *

Also Published As

Publication number Publication date
CN113282485A (zh) 2021-08-20

Similar Documents

Publication Publication Date Title
JP7131199B2 (ja) クロスプロジェクト学習のための関連ソフトウェアプロジェクトの自動識別
Black et al. Maintaining the performance of a learned classifier under concept drift
CN113282485B (zh) 一种基于自适应搜索的程序自动修复方法
CN113221960B (zh) 一种高质量漏洞数据收集模型的构建方法及收集方法
US20080127043A1 (en) Automatic Extraction of Programming Rules
CN106250319A (zh) 静态代码扫描结果处理方法和装置
CN107025175A (zh) 一种模糊测试种子用例变长字段修剪方法
CN114996279A (zh) 一种sql脚本的优化方法及装置
CN111581086B (zh) 一种基于RankNet的混合软件错误定位方法及系统
CN114139164A (zh) 一种可信操作系统内核模糊测试的变异方法
DE112021005910T5 (de) Schnellere abdeckungskonvergenz mit automatischer testparameterabstimmung bei eingeschränkter zufallsverifikation
CN117272330B (zh) 服务器系统加固更新方法及系统
CN108228232B (zh) 一种针对程序中循环问题的自动修复方法
CN113901463A (zh) 面向概念漂移的可解释Android恶意软件检测方法
US20230409976A1 (en) Rewriting method and information processing apparatus
CN111967575A (zh) 一种半自动化模型更新系统及模型更新方法
CN115758379A (zh) 一种基于迁移学习的跨语言编译器漏洞挖掘方法和装置
CN115080386A (zh) 基于自动驾驶功能要求的场景有效性分析方法与设备
CN113282495A (zh) 一种基于轨迹监控的Java软件故障定位方法
Hu et al. Distribution-driven, embedded synthetic data generation system and tool for RDBMS
Carvalho et al. A hybrid genetic algorithm/decision tree approach for coping with unbalanced classes
CN112818344B (zh) 一种运用人工智能算法提高病毒查杀率的方法
CN117592061B (zh) 融合代码漏洞特征及属性图的源代码安全检测方法与装置
CN117473510B (zh) 一种基于图神经网络和漏洞补丁关系的自动化漏洞挖掘技术
CN111221864B (zh) 一种基于mysql慢查询日志词频分析的索引智能推荐方法

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