CN111124922B - 基于规则的自动程序修复方法、存储介质和计算设备 - Google Patents
基于规则的自动程序修复方法、存储介质和计算设备 Download PDFInfo
- Publication number
- CN111124922B CN111124922B CN201911354940.XA CN201911354940A CN111124922B CN 111124922 B CN111124922 B CN 111124922B CN 201911354940 A CN201911354940 A CN 201911354940A CN 111124922 B CN111124922 B CN 111124922B
- Authority
- CN
- China
- Prior art keywords
- rule
- program
- item set
- defect
- item
- 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
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/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2465—Query processing support for facilitating data mining operations in structured databases
-
- 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
- G06F8/658—Incremental updates; Differential updates
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02P—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
- Y02P90/00—Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
- Y02P90/30—Computing systems specially adapted for manufacturing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Computer Security & Cryptography (AREA)
- Quality & Reliability (AREA)
- Computer Hardware Design (AREA)
- Fuzzy Systems (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于规则的自动程序修复方法、存储介质和计算设备,方法包括首先采用基于规则的缺陷定位方法对被测的缺陷程序中的缺陷进行定位;然后根据缺陷的具体位置生成补丁候选者,不同的补丁候选者构成补丁候选者列表;接着针对于缺陷程序的缺陷,从补丁候选者列表选择出对应的补丁候选者并进行校验;校验完成之后,将补丁候选者与缺陷所在位置的上下文进行同步,以此完成自动程序修复。本发明可以精准定位到缺陷所在的位置,生成补丁自动修复软件中的缺陷,帮助开发人员减少修复缺陷的步骤。
Description
技术领域
本发明涉及自动程序修复领域,特别涉及一种基于规则的自动程序修复方法、存储介质和计算设备。
背景技术
由于需求不清晰、开发者技术不足和程序算法错误,程序中存在已知或未知的缺陷,影响软件质量。目前工业界主要通过人力对程序进行维护,从而减少缺陷。然而通过人力进行维护需要大量的劳动力和时间,因此就需要自动程序修复方法帮助开发者快速修复程序中的缺陷。
当前主流的自动程序修复方法主要分为两类:一类是基于测试集,另一类是基于非测试集。目前大部分自动程序修复方法可归为基于测试集。一般来说,基于测试集的自动程序修复方法需要包含能够检测出缺陷的测试用例集,当所有的测试用例均能执行通过,则认为缺陷修复成功。基于非测试集的自动程序修复方法借助契约或者缺陷报告等信息对补丁进行评估,以保证修复的正确性。程序通常遵循许多隐式编程规则,当这些隐式编程规则被违反时,程序很容易产生缺陷。例如,PR-Miner[Li,Zhenmin,and Yuanyuan Zhou."PR-Miner:automatically extracting implicit programming rules and detectingviolations in large software code."ACM SIGSOFT Software EngineeringNotes.Vol.30.No.5.ACM,2005.]挖掘大量开源项目的隐式编程规则,检测定位程序中的缺陷。然而PR-Miner挖掘规则的过程中只使用程序的结构信息,而忽略语义信息,进而影响检测的准确率。PSP-Finder[Cui,Zhanqi,et al."PSP-Finder:a defect detection methodbased on mining correlations from function call paths."Chinese Journal ofElectronics 27.4(2018):776-782.]在PR-Miner的基础上进行改进,通过静态分析技术大大提高缺陷检测的稳定性和准确性。然而PSP-Finder仅仅只能检测程序中的缺陷,无法帮助开发人员减少修复缺陷的步骤,快速自动化的修复程序缺陷。可见,有必要研究出能够克服如上现有方法缺陷的新的自动程序修复方法。
发明内容
本发明的第一目的在于克服现有技术的缺点与不足,提供一种基于规则的自动程序修复方法,该方法可以精准定位到缺陷所在的位置,生成补丁自动修复软件中的缺陷,帮助开发人员减少修复缺陷的步骤。
本发明的第二目的在于提供一种存储介质。
本发明的第三目的在于提供一种计算设备。
本发明的第一目的通过下述技术方案实现:一种基于规则的自动程序修复方法,步骤如下:
S1、针对于被测的缺陷程序,采用基于规则的缺陷定位方法对缺陷程序中的缺陷进行定位;
S2、根据缺陷的具体位置生成补丁候选者,不同的补丁候选者构成补丁候选者列表;
S3、针对于缺陷程序的缺陷,从补丁候选者列表选择出对应的补丁候选者并进行校验;
S4、校验完成之后,将补丁候选者与缺陷所在位置的上下文进行同步,以此完成自动程序修复。
优选的,在步骤S1中,采用基于规则的缺陷定位方法对缺陷程序中的缺陷进行定位,过程包括:
(1)根据项目集数据库挖掘出隐式编程规则,从而生成规则集;
(2)生成规则集之后,对规则集中的子项目集做进一步处理,得到对应关系集合M;
(3)根据对应关系集合M对缺陷程序中的缺陷进行定位,得到缺陷在缺陷程序中的具体位置。
更进一步的,采用频繁项集挖掘方法和规则推衍算法挖掘出隐式编程规则,从而生成规则集,过程如下:
(11)从项目集数据库中寻找出出现频率大于指定阈值的高频率项目集,并从高频率项目集中挖掘出频繁父项目集或者封闭的子项目集作为频繁项集,封闭是指子项目集出现频率大于父项目集的出现频率;
(12)对于出现频率不大于指定阈值的各个低频率项目集,在将其与频繁父项目集进行对比之前,将两者进行优化:
对频繁父项目集和低频率项目集中的无用函数参数或返回值进行裁剪,无用函数参数或返回值是指在后续项目中并无使用;
对裁剪后的频繁父项目集和低频率项目集中的函数参数和返回值类型进行替换,其中,函数类型统一替换为function,对象和结构体类型统一替换为object、基本数据类型统一替换为base、指针和引用类型统一替换为ptr;
(13)优化完成之后,将低频率项目集与频繁父项目集进行规则相似度对比:
r1∈S:M(r1,r2);
其中,r1为低频率项目集;r2为频繁父项目集;S为规则集;M(r1,r2)为对比结果,具体是true或false;规则相似度是指r1和r2之间的语法相近程度;
若r1和r2两者的长度不一致,则匹配失败,返回false;
若两者的结构层次和所有的结点类型相同,则匹配成功,说明低频率项目集属于隐式编程规则,返回true,然后基于频繁父项目集对该低频率项目集进行推衍并加入到规则集中;否则返回false。
更进一步的,对规则集中的子项目集做进一步处理,得到对应关系集合M,过程如下:
(21)从规则集S中取出一条规则项目集Yi,其中Yi∈S,计算得到该项目集的所有封闭子项目集{X1,X2,…,Xk};
(22)计算每个子项目集Xj与项目集Yi的置信度C(Xj,Yi),其中,Xj∈{X1,X2,…,Xk},置信度是指当子项目集Xj发生时父项目集Yi发生的概率,表达式如下:
在表达式中,F(Xj)为子项目集Xj的出现频率,F(Yi)为父项目集Yi的出现频率,出现概率通过如下公式计算:
p=F(ij),ij∈I;
在公式中,I={i1,i2,i3,…,ij,…,in},I为所有项目集的集合,p为项目集ij的频数;
当置信度C(Xj,Yi)大于指定阈值t时,说明子项目集Xj能够推衍得到父项目集Yi,此时记录子项目集Xj与父项目集Yi的对应关系mij,将mij加入到新建的对应关系集合M中,指定阈值t∈[0,1];
(23)循环如上步骤(1)和(2),直至遍历规则集S中的所有规则项目集Yi,最终得到包含有所有对应关系的对应关系集合M。
更进一步的,根据对应关系集合M对缺陷错误位置进行定位,过程如下:
(31)针对于被测的缺陷程序,以函数为单位解析代码并获取程序的所有代码路径,生成每个代码路径对应的被测项目集;
(32)针对于每个代码路径对应的被测项目集,根据对应关系集合M判断被测项目集是否符合规则集中的规范,若是,则认为该被测项目集对应的代码路径存在缺陷,记录缺陷位于代码中的具体位置。
更进一步的,判断被测项目集是否符合规则集中的规范,具体是判断被测项目集中是否包含对应关系集合M中所存储的对应关系mij。
更进一步的,在步骤S2中,采用就近规则匹配算法生成补丁候选者,过程如下:
对于程序中的违反隐式编程规则的缺陷项目集XD,从关系集合M中取出缺陷项目集XD对应的项目集YD,并计算得到YD与XD的差值集合ZD;
将差值集合ZD与缺陷所在位置处的上下文进行语法同步,并且根据上下文环境生成补丁候选者。
优选的,在步骤S3中,采用程序合成工具SKETCH对补丁候选者进行校验:
将错误程序、缺陷信息和修复选项生成SKETCH程序,并将正确的样例程序作为约束;
在规定时间范围内求解SKETCH程序,若求解成功,则认为补丁候选者正确;
若超出时间仍无法求解,则认为补丁候选者错误,需要从补丁候选者列表中重新选择补丁候选者。
本发明的第二目的通过下述技术方案实现:一种存储介质,存储有程序,所述程序被处理器执行时,实现本发明第一目的所述的基于规则的自动程序修复方法。
本发明的第三目的通过下述技术方案实现:一种计算设备,包括处理器以及用于存储处理器可执行程序的存储器,所述处理器执行存储器存储的程序时,实现本发明第一目的所述的基于规则的自动程序修复方法。
本发明相对于现有技术具有如下的优点及效果:
(1)本发明基于规则的自动程序修复方法,包括首先采用基于规则的缺陷定位方法对被测的缺陷程序中的缺陷进行定位;然后根据缺陷的具体位置生成补丁候选者,不同的补丁候选者构成补丁候选者列表;接着针对于缺陷程序的缺陷,从补丁候选者列表选择出对应的补丁候选者并进行校验;校验完成之后,将补丁候选者与缺陷所在位置的上下文进行同步,以此完成自动程序修复。本发明通过规则不仅可以精准定位到缺陷所在的位置,而且可以生成补丁自动修复软件中的缺陷,帮助开发人员减少修复缺陷的步骤。
(2)本发明方法采用频繁项集挖掘方法和规则推衍算法挖掘隐式编程规则,不仅挖掘出频繁项集,还能够挖掘出出现频率低的隐式编程规则,并且,挖掘出来的规则兼顾到了程序的结构信息和语义信息,隐式编程规则集更加完备准确,自动程序修复效果更佳。
(3)本发明方法通过程序合成工具SKETCH校验补丁,无需通过测试用例,校验过程简单且稳定。
附图说明
图1是本发明基于规则的自动程序修复方法的过程示意图。
具体实施方式
下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。
实施例1
本实施例公开了一种基于规则的自动程序修复方法,如图1所示,步骤如下:
S1、针对于被测的缺陷程序,采用基于规则的缺陷定位方法对缺陷程序中的缺陷进行定位,过程包括:
(1)根据项目集数据库挖掘出隐式编程规则,从而生成规则集。
本实施例采用频繁项集挖掘方法和规则推衍算法进行挖掘。频繁项集挖掘方法的目标是在包含大量程序项目集的数据库中高效地寻找出频繁项集,适用于挖掘出现频率大于阈值的隐式编程规则。对于某些出现频率不大于阈值的隐式编程规则,考虑到频繁项集挖掘方法无法挖掘这些隐式编程规则,因此本实施例结合了规则推衍算法来获取频率低的隐式编程规则,使隐式编程规则集更加完备。
挖掘过程具体如下:
(11)从项目集数据库中寻找出出现频率大于指定阈值的高频率项目集,并从高频率项目集中挖掘出频繁父项目集或者封闭的子项目集作为频繁项集,封闭是指子项目集出现频率大于父项目集的出现频率。
例如,假设在项目集数据库D中,D={{a,b,c,e},{a,b,d,e},{a,b,d,g},{a,c,d,e}},设置频率阈值为3,则高频率项目集有{a}:4、{b}:3、{e}:3、{d}:3、{a,b}:3、{a,e}:3和{a,d}:3,其中{a}:4表示高频率项目集{a}的出现频率为4,{b}:3、{e}:3、{d}:3、{a,b}:3、{a,e}:3和{a,d}:3表示对应的高频率项目集出现频率为3。由于子项目集{b}、{e}和{d}出现的频率与它们的父项目集{a,b}、{a,e}和{a,d}出现的频率相同,即{b}、{e}和{d}不是封闭的。最终挖掘出的频繁项集只有:{a}:4、{a,b}:3、{a,e}:3和{a,d}:3,可见,频繁项集的项目集数量有效减少,有利于提高频繁项集的时间和空间性能。
(12)对于出现频率不大于指定阈值的各个低频率项目集,在将其与频繁父项目集进行对比之前,将两者进行优化:
对频繁父项目集和低频率项目集中的无用函数参数或返回值进行裁剪,无用函数参数或返回值是指在后续项目中并无使用。例如,假设项目集{data=request(sock,&opt),close(sock)},其中函数参数opt和返回值data在后续项目中并无使用,此处可以忽略该函数参数和返回值对规则连续性的影响,因此,对项目集的函数参数opt和返回值data进行裁剪。
对裁剪后的频繁父项目集和低频率项目集中的函数参数和返回值类型进行替换,其中,函数类型统一替换为function,对象和结构体类型统一替换为object、基本数据类型统一替换为base、指针和引用类型统一替换为ptr。
(13)优化完成之后,将低频率项目集与频繁父项目集进行规则相似度对比:
r1∈S:M(r1,r2);
其中,r1为低频率项目集;r2为频繁父项目集;S为规则集;M(r1,r2)为对比结果,具体是true或false;规则相似度是指r1和r2之间的语法相近程度;
若r1和r2两者的长度不一致,则匹配失败,返回false;
若两者的结构层次和所有的结点类型相同,则匹配成功,说明低频率项目集属于隐式编程规则,返回true,然后基于频繁父项目集对该低频率项目集进行推衍并加入到规则集中;否则返回false。
例如,假设规则{a1}=>{a1,a2,a3},{a1,a2,a3}在与{b1,b2,b3}对比时,发现两者类似,则可以推衍出{b1}=>{b1,b2,b3}这条规则。由此可见,本实施例挖掘出来的规则兼顾到了程序的结构信息和语义信息。
(2)生成规则集之后,对规则集中的子项目集做进一步处理,得到对应关系集合M,过程如下:
(21)从规则集S中取出一条规则项目集Yi,其中Yi∈S,计算得到该项目集Yi的所有封闭子项目集{X1,X2,…,Xk};
(22)计算每个子项目集Xj与项目集Yi的置信度C(Xj,Yi),其中,Xj∈{X1,X2,…,Xk},置信度是指当子项目集Xj发生时父项目集Yi发生的概率,表达式如下:
在表达式中,F(Xj)为子项目集Xj的出现频率,F(Yi)为父项目集Yi的出现频率,出现概率通过如下公式计算:
p=F(ij),ij∈I;
在公式中,I={i1,i2,i3,…,ij,…,in},I为所有项目集的集合,p为项目集ij的频数;
当置信度C(Xj,Yi)大于指定阈值t时,说明子项目集Xj能够推衍得到父项目集Yi,此时记录子项目集Xj与父项目集Yi的对应关系mij,将mij加入到新建的对应关系集合M中,指定阈值t∈[0,1];
(23)循环如上步骤(1)和(2),直至遍历规则集S中的所有规则项目集Yi,最终得到包含有所有对应关系的对应关系集合M。
(3)根据对应关系集合M对缺陷程序中的缺陷进行定位,得到缺陷在缺陷程序中的具体位置,过程如下:
(31)针对于被测的缺陷程序,以函数为单位解析代码并获取程序的所有代码路径,生成每个代码路径对应的被测项目集;
(32)针对于每个代码路径对应的被测项目集,根据对应关系集合M判断被测项目集是否符合规则集中的规范,也即是判断被测项目集中是否包含对应关系集合M中所存储的对应关系mij,若是,则认为该被测项目集对应的代码路径存在缺陷,记录缺陷位于代码中的具体位置。
S2、根据缺陷的具体位置生成补丁候选者,不同的补丁候选者构成补丁候选者列表。
本实施例中,采用就近规则匹配算法生成补丁候选者,过程如下:
对于程序中的违反隐式编程规则的缺陷项目集XD,从关系集合M中取出缺陷项目集XD对应的项目集YD,并计算得到YD与XD的差值集合ZD。例如,假设规则{a,b}=>{a,b,d},当程序存在{a,b}时不存在{a,b,d},也就代表程序有缺陷,{a,b}为缺陷项目集,计算差值得到的差值集合ZD为{d}。
将差值集合ZD与缺陷所在位置处的上下文进行语法同步,为后续程序修复提供修复环境,并且根据上下文环境生成补丁候选者。
S3、针对于缺陷程序的缺陷,从补丁候选者列表选择出对应的补丁候选者并进行校验。
在本实施例中,具体是采用程序合成工具SKETCH对补丁候选者进行校验:
将错误程序、缺陷信息和修复选项生成SKETCH程序,并将正确的样例程序作为约束;
在规定时间范围内求解SKETCH程序,若求解成功,则认为补丁候选者正确;
若超出时间仍无法求解,则认为补丁候选者错误,需要从补丁候选者列表中重新选择补丁候选者。
S4、校验完成之后,将补丁候选者与缺陷所在位置的上下文进行同步,以此完成自动程序修复,缺陷程序最终修复成正确程序。
实施例2
本实施例公开了一种存储介质,存储有程序,所述程序被处理器执行时,实现实施例1所述的基于规则的自动程序修复方法,具体如下:
S1、针对于被测的缺陷程序,采用基于规则的缺陷定位方法对缺陷程序中的缺陷进行定位;
S2、根据缺陷的具体位置生成补丁候选者,不同的补丁候选者构成补丁候选者列表;
S3、针对于缺陷程序的缺陷,从补丁候选者列表选择出对应的补丁候选者并进行校验;
S4、校验完成之后,将补丁候选者与缺陷所在位置的上下文进行同步,以此完成自动程序修复。
本实施例中的存储介质可以是磁盘、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、U盘、移动硬盘等介质。
实施例3
本实施例公开了一种计算设备,包括处理器以及用于存储处理器可执行程序的存储器,所述处理器执行存储器存储的程序时,实现实施例1所述的基于规则的自动程序修复方法,具体如下:
S1、针对于被测的缺陷程序,采用基于规则的缺陷定位方法对缺陷程序中的缺陷进行定位;
S2、根据缺陷的具体位置生成补丁候选者,不同的补丁候选者构成补丁候选者列表;
S3、针对于缺陷程序的缺陷,从补丁候选者列表选择出对应的补丁候选者并进行校验;
S4、校验完成之后,将补丁候选者与缺陷所在位置的上下文进行同步,以此完成自动程序修复。
本实施例中所述的计算设备可以是台式电脑、笔记本电脑、智能手机、PDA手持终端、平板电脑或其他具有处理器功能的终端设备。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。
Claims (8)
1.一种基于规则的自动程序修复方法,其特征在于,步骤如下:
S1、针对于被测的缺陷程序,采用基于规则的缺陷定位方法对缺陷程序中的缺陷进行定位;
采用基于规则的缺陷定位方法对缺陷程序中的缺陷进行定位,过程包括:
(1)根据项目集数据库挖掘出隐式编程规则,从而生成规则集;
采用频繁项集挖掘方法和规则推衍算法挖掘出隐式编程规则,从而生成规则集,过程如下:
(11)从项目集数据库中寻找出出现频率大于指定阈值的高频率项目集,并从高频率项目集中挖掘出频繁父项目集或者封闭的子项目集作为频繁项集,封闭是指子项目集出现频率大于父项目集的出现频率;
(12)对于出现频率不大于指定阈值的各个低频率项目集,在将其与频繁父项目集进行对比之前,将两者进行优化:
对频繁父项目集和低频率项目集中的无用函数参数或返回值进行裁剪,无用函数参数或返回值是指在后续项目中并无使用;
对裁剪后的频繁父项目集和低频率项目集中的函数参数和返回值类型进行替换,其中,函数类型统一替换为function,对象和结构体类型统一替换为object、基本数据类型统一替换为base、指针和引用类型统一替换为ptr;
(13)优化完成之后,将低频率项目集与频繁父项目集进行规则相似度对比:
r1∈S:M(r1,r2);
其中,r1为低频率项目集;r2为频繁父项目集;S为规则集;M(r1,r2)为对比结果,具体是true或false;规则相似度是指r1和r2之间的语法相近程度;
若r1和r2两者的长度不一致,则匹配失败,返回false;
若两者的结构层次和所有的结点类型相同,则匹配成功,说明低频率项目集属于隐式编程规则,返回true,然后基于频繁父项目集对该低频率项目集进行推衍并加入到规则集中;否则返回false;
(2)生成规则集之后,对规则集中的子项目集做进一步处理,得到对应关系集合M;
(3)根据对应关系集合M对缺陷程序中的缺陷进行定位,得到缺陷在缺陷程序中的具体位置;
S2、根据缺陷的具体位置生成补丁候选者,不同的补丁候选者构成补丁候选者列表;
S3、针对于缺陷程序的缺陷,从补丁候选者列表选择出对应的补丁候选者并进行校验;
S4、校验完成之后,将补丁候选者与缺陷所在位置的上下文进行同步,以此完成自动程序修复。
2.根据权利要求1所述的基于规则的自动程序修复方法,其特征在于,对规则集中的子项目集做进一步处理,得到对应关系集合M,过程如下:
(21)从规则集S中取出一条规则项目集Yi,其中Yi∈S,计算得到该项目集的所有封闭子项目集{X1,X2,…,Xk};
(22)计算每个子项目集Xj与项目集Yi的置信度C(Xj,Yi),其中,Xj∈{X1,X2,…,Xk},置信度是指当子项目集Xj发生时父项目集Yi发生的概率,表达式如下:
在表达式中,F(Xj)为子项目集Xj的出现频率,F(Yi)为父项目集Yi的出现频率,出现概率通过如下公式计算:
p=F(ij),ij∈I;
在公式中,I={i1,i2,i3,…,ij,…,in},I为所有项目集的集合,p为项目集ij的频数;
当置信度C(Xj,Yi)大于指定阈值t时,说明子项目集Xj能够推衍得到父项目集Yi,此时记录子项目集Xj与父项目集Yi的对应关系mij,将mij加入到新建的对应关系集合M中,指定阈值t∈[0,1];
(23)循环如上步骤(1)和(2),直至遍历规则集S中的所有规则项目集Yi,最终得到包含有所有对应关系的对应关系集合M。
3.根据权利要求1所述的基于规则的自动程序修复方法,其特征在于,根据对应关系集合M对缺陷错误位置进行定位,过程如下:
(31)针对于被测的缺陷程序,以函数为单位解析代码并获取程序的所有代码路径,生成每个代码路径对应的被测项目集;
(32)针对于每个代码路径对应的被测项目集,根据对应关系集合M判断被测项目集是否符合规则集中的规范,若是,则认为该被测项目集对应的代码路径存在缺陷,记录缺陷位于代码中的具体位置。
4.根据权利要求3所述的基于规则的自动程序修复方法,其特征在于,判断被测项目集是否符合规则集中的规范,具体是判断被测项目集中是否包含对应关系集合M中所存储的对应关系mij。
5.根据权利要求3所述的基于规则的自动程序修复方法,其特征在于,在步骤S2中,采用就近规则匹配算法生成补丁候选者,过程如下:
对于程序中的违反隐式编程规则的缺陷项目集XD,从关系集合M中取出缺陷项目集XD对应的项目集YD,并计算得到YD与XD的差值集合ZD;
将差值集合ZD与缺陷所在位置处的上下文进行语法同步,并且根据上下文环境生成补丁候选者。
6.根据权利要求1所述的基于规则的自动程序修复方法,其特征在于,在步骤S3中,采用程序合成工具SKETCH对补丁候选者进行校验:
将错误程序、缺陷信息和修复选项生成SKETCH程序,并将正确的样例程序作为约束;
在规定时间范围内求解SKETCH程序,若求解成功,则认为补丁候选者正确;
若超出时间仍无法求解,则认为补丁候选者错误,需要从补丁候选者列表中重新选择补丁候选者。
7.一种存储介质,存储有程序,其特征在于,所述程序被处理器执行时,实现权利要求1至6中任一项所述的基于规则的自动程序修复方法。
8.一种计算设备,包括处理器以及用于存储处理器可执行程序的存储器,其特征在于,所述处理器执行存储器存储的程序时,实现权利要求1至6中任一项所述的基于规则的自动程序修复方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911354940.XA CN111124922B (zh) | 2019-12-25 | 2019-12-25 | 基于规则的自动程序修复方法、存储介质和计算设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911354940.XA CN111124922B (zh) | 2019-12-25 | 2019-12-25 | 基于规则的自动程序修复方法、存储介质和计算设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111124922A CN111124922A (zh) | 2020-05-08 |
CN111124922B true CN111124922B (zh) | 2023-05-30 |
Family
ID=70503271
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911354940.XA Active CN111124922B (zh) | 2019-12-25 | 2019-12-25 | 基于规则的自动程序修复方法、存储介质和计算设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111124922B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112685320B (zh) * | 2021-01-09 | 2023-04-25 | 北京信息科技大学 | 一种基于多候选程序的软件缺陷修复方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110442527A (zh) * | 2019-08-16 | 2019-11-12 | 扬州大学 | 面向bug报告的自动化修复方法 |
CN110442517A (zh) * | 2019-07-18 | 2019-11-12 | 暨南大学 | 一种自动程序修复中获取安全补丁的方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080127043A1 (en) * | 2006-08-30 | 2008-05-29 | Yuanyuan Zhou | Automatic Extraction of Programming Rules |
-
2019
- 2019-12-25 CN CN201911354940.XA patent/CN111124922B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110442517A (zh) * | 2019-07-18 | 2019-11-12 | 暨南大学 | 一种自动程序修复中获取安全补丁的方法 |
CN110442527A (zh) * | 2019-08-16 | 2019-11-12 | 扬州大学 | 面向bug报告的自动化修复方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111124922A (zh) | 2020-05-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11662997B2 (en) | Systems and methods for software and developer management and evaluation | |
Keller et al. | A critical evaluation of spectrum-based fault localization techniques on a large-scale software system | |
US8312440B2 (en) | Method, computer program product, and hardware product for providing program individuality analysis for source code programs | |
US20150370685A1 (en) | Defect localization in software integration tests | |
US10437702B2 (en) | Data-augmented software diagnosis method and a diagnoser therefor | |
CN107608732B (zh) | 一种基于bug知识图谱的bug搜索定位方法 | |
CN105787367B (zh) | 一种软件更新的补丁安全性检测方法及系统 | |
Ray et al. | The uniqueness of changes: Characteristics and applications | |
CN109144882A (zh) | 一种基于程序不变量的软件故障定位方法及装置 | |
CN108804326B (zh) | 一种软件代码自动检测方法 | |
US20160321586A1 (en) | Selecting tests for execution on a software product | |
Chen et al. | Extracting and studying the Logging-Code-Issue-Introducing changes in Java-based large-scale open source software systems | |
CN111258614A (zh) | 项目第三方库升级异常检测方法及系统、设备及存储介质 | |
CN111124922B (zh) | 基于规则的自动程序修复方法、存储介质和计算设备 | |
Vandehei et al. | Leveraging the defects life cycle to label affected versions and defective classes | |
Petrulio et al. | SZZ in the time of pull requests | |
CN111966578A (zh) | 一种安卓兼容性缺陷修复效果的自动化评估方法 | |
CN108763092B (zh) | 一种基于交叉验证的代码缺陷检测方法及装置 | |
Ufuktepe et al. | Tracking code bug fix ripple effects based on change patterns using markov chain models | |
CN108804308B (zh) | 新版本程序缺陷检测方法及装置 | |
CN115934548A (zh) | 一种基于信息检索的语句级软件缺陷定位方法及系统 | |
Agrawal et al. | Ruffle: Extracting co-change information from software project repositories | |
Sadiq et al. | On the Evolutionary Relationship between Change Coupling and Fix-Inducing Changes. | |
CN113037521B (zh) | 识别通讯设备状态的方法、通讯系统及存储介质 | |
CN114331165A (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 |