[发明专利]一种基于程序合成的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)将该重写规则的若干个修复选项作为选择表达式的后续子树。

下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/pat/books/201711394256.5/2.html,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top