[发明专利]一种基于程序合成的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++代码,得到修复后的程序。 | ||
搜索关键词: | 程序合成 重写规则 匹配 程序缺陷 语法树 选项 规约 缺陷模式 自动修复 修复 逻辑表达式 使用约束 求解器 求解 子树 替换 输出 转化 | ||
【主权项】:
1.一种基于程序合成的C/C++程序缺陷自动修复方法,其特征在于,该方法包括以下步骤:步骤1)输入带有缺陷的C/C++程序,该程序在测试集S1S2...Sn上发现缺陷,存在缺陷d1d2...dk;步骤2)根据常见的C/C++程序缺陷和缺陷程序的类型,设定若干重写规则,重写规则包括缺陷模式和修复选项,其语法结构为:expr‑>expr1|expr2…,箭头前的表示缺陷模式,箭头后的表示可能的修复选项,对于缺陷di,可能存在多种修复选项,分别记为ci1ci2...ciu;步骤3)将重写规则的缺陷模式与缺陷程序进行匹配,找出所有匹配的重写规则;步骤3.1)将带有缺陷的C/C++程序和重写规则解析为抽象语法树;步骤3.2)将缺陷程序的抽象语法树中的每颗子树与重写规则的缺陷模式进行匹配;步骤3.3)若存在部分重写规则与缺陷程序匹配,则表明该缺陷程序存在可能的修复选项;步骤3.4)若不存在任何重写规则与缺陷程序匹配,则表明本方法无法修复该程序的缺陷;步骤4)若存在匹配的重写规则,则将匹配的语法树子树替换为选择表达式;步骤5)将该程序需要满足的规约记为f,规约约定了程序在特定输入下需要满足的输出,使用程序合成方法,根据该程序的规约f,得到每个选择表达式的选项;步骤6)若步骤5)有解,则代入每个选择表达式的选项,得到修复后的程序。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201711394256.5/,转载请声明来源钻瓜专利网。