The invention discloses an automatic C/C++ program defect repair method based on program synthesis, input a defective C/C++ program, set rewriting rules according to common program defects and type of defective programs, and rewrite rules including defect mode and repair options. After that, the defect pattern is matched with the syntax tree of the defective program. If there is no matching rewrite rule, it indicates that the defect of the program can not be repaired. If there is a matching rewrite rule, the matching syntax tree subtree is replaced by a selection expression. After that, we use the program synthesis method to get the options of each selection expression according to the specification that the program needs to satisfy. The program synthesis method transforms the program with the choice expression and the protocol that the program needs to transform into logical expression, then uses the constraint solver to solve in the set time, substituting the option of each choice expression, output the syntax tree to C/C++ code, and get the restored program. One
【技术实现步骤摘要】
一种基于程序合成的C/C++程序缺陷自动修复方法
本专利技术涉及一种程序缺陷自动修复方法,使用程序合成方法,实现程序缺陷的自动修复,属于软件工程领域。
技术介绍
在计算机科学领域,程序合成是指在给定规约的情况下,自动地构造程序。由于可以自动生成代码,程序合成通常被使用在代码补全、软件开发、算法设计中。程序合成方法包括合成与验证两个步骤,使用反例制导的方法,将问题转化为SAT/SMT问题,最后使用SAT/SMT求解器进行求解。目前的程序缺陷自动修复方法,通常采用基于测试用例的方法。通常修复后的代码可以通过测试用例,无法保证修复后代码的正确性。程序合成方法包括合成与验证两个步骤,使用程序的规约作为约束,可以保证合成后的代码是正确的。
技术实现思路
目前的程序缺陷自动修复方法,通常采用基于测试用例的方法,无法保证修复后代码的正确性。本专利技术为解决上述技术问题采用以下技术方案:一种基于程序合成的C/C++程序缺陷自动修复方法,包括以下步骤:步骤1)输入带有缺陷的C/C++程序,该程序在测试集S1S2...S0上发现缺陷,存在缺陷d0d0...dk。步骤2)根据常见的C/C++程序缺陷和缺陷程序的类型,设定若干重写规则,重写规则包括缺陷模式和修复选项,其语法结构为:expr->expr1|expr2…,箭头前的表示缺陷模式,箭头后的表示可能的修复选项,对于缺陷di,可能存在多种修复选项,分别记为ci1ci2...ciu.步骤3)将重写规则的缺陷模式与缺陷程序进行匹配,找出所有匹配的重写规则,具体步骤如下:步骤3.1)将带有缺陷的C/C++程序和重写规则解 ...
【技术保护点】
1.一种基于程序合成的C/C++程序缺陷自动修复方法,其特征在于,该方法包括以下步
【技术特征摘要】
1.一种基于程序合成的C/C++程序缺陷自动修复方法,其特征在于,该方法包括以下步骤:步骤1)输入带有缺陷的C/C++程序,该程序在测试集S1S2…Sn上发现缺陷,存在缺陷d1d2...dk;步骤2)根据常见的C/C++程序缺陷和缺陷程序的类型,设定若干重写规则,重写规则包括缺陷模式和修复选项,其语法结构为:expr->expr1|expr2…,箭头前的表示缺陷模式,箭头后的表示可能的修复选项,对于缺陷di,可能存在多种修复选项,分别记为ci1ci2...ciu;步骤3)将重写规则的缺陷模式与缺陷程序进行匹配,找出所有匹配的重写规则;步骤4)若存在匹配的重写规则,则将匹配的语法树子树替换为选择表达式;步骤5)将该程序需要满足的规约记为f,规约约定了程序在特定输入下需要满足的输出,使用程序合成方法,根据该程序的规约f,得到每个选择表达式的选项;步骤6)若步骤5)有解,则代入每个选择表达式的选项,得到修复后的程序。2.根据权利要求1所述的基于程序合成的C/C++程序缺陷自动修复方法,其特征在于:所述步骤3)将重写规则的缺陷模式与缺陷程序进行匹配,找出所有匹配的重写规则,具体步骤如下:步骤3.1)将带有缺陷的C/C++程序和重写规则解析为抽象语法树;步骤3.2)将缺陷程序的抽象语法树中的每颗子树与重写规则的缺陷模式进行匹配;步骤3.3)若存在部分重写规则与缺陷程序匹配,则表明该缺陷程序存在可能的修复选项;步骤3.4)若不存在任何重写规则与缺陷程序匹配,则表明本方法无法修复该程序的缺陷。3.根据权利要求1所述的基于程序合成的C/C++程序缺陷自动修复方法,其特征在于:所述步骤4)若存在匹配的重写规则,则将匹配的语法树子树替换为选择表达式,具体步骤如下:步骤4.1)对于每一个重写规则,将每个匹配的语法树子树替换为选择表达式,原始语法树子树作为该选择表达式的第一颗子树;步骤4.2)将该重写规则的若干个修复选项作为选择表达式的后续子树...
【专利技术属性】
技术研发人员:王林章,陈天骄,李宣东,
申请(专利权)人:南京大学,
类型:发明
国别省市:江苏,32
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。