[发明专利]一种基于程序合成的C/C++程序缺陷自动修复方法有效
申请号: | 201711394256.5 | 申请日: | 2017-12-21 |
公开(公告)号: | CN108170466B | 公开(公告)日: | 2019-09-20 |
发明(设计)人: | 王林章;陈天骄;李宣东 | 申请(专利权)人: | 南京大学 |
主分类号: | G06F8/72 | 分类号: | G06F8/72;G06F8/30 |
代理公司: | 南京知识律师事务所 32207 | 代理人: | 张苏沛 |
地址: | 210093 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 程序合成 重写规则 匹配 程序缺陷 语法树 选项 规约 缺陷模式 自动修复 修复 逻辑表达式 使用约束 求解器 求解 子树 替换 输出 转化 | ||
本发明公开一种基于程序合成的C/C++程序缺陷自动修复方法,输入带有缺陷的C/C++程序,根据常见的程序缺陷和缺陷程序的类型,设置重写规则,重写规则包括缺陷模式和修复选项。之后将缺陷模式与缺陷程序的语法树进行匹配。若不存在任何匹配的重写规则,则表明无法修复该程序的缺陷。若存在匹配的重写规则,则将匹配的语法树子树替换为选择表达式。之后使用程序合成方法,根据该程序需要满足的规约,得到每个选择表达式的选项。程序合成方法将带有选择表达式的程序和该程序需要满足的规约转化为逻辑表达式,之后使用约束求解器,在设定的时间内进行求解,代入每个选择表达式的选项,将语法树输出为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++程序和重写规则解析为抽象语法树。
步骤3.2)将缺陷程序的抽象语法树中的每颗子树与重写规则的缺陷模式进行匹配。
步骤3.3)若存在部分重写规则与缺陷程序匹配,则表明该缺陷程序存在可能的修复选项。
步骤3.4)若不存在任何重写规则与缺陷程序匹配,则表明本方法无法修复该程序的缺陷。
步骤4)若存在匹配的重写规则,则将匹配的语法树子树替换为选择表达式,具体步骤如下:
步骤4.1)对于每一个重写规则,将每个匹配的语法树子树替换为选择表达式,原始语法树子树作为该选择表达式的第一颗子树。
步骤4.2)将该重写规则的若干个修复选项作为选择表达式的后续子树。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201711394256.5/2.html,转载请声明来源钻瓜专利网。