【技术实现步骤摘要】
一种基于深度学习与程序合成的C/C++程序缺陷自动修复方法
本专利技术涉及一种程序缺陷自动修复方法,使用程序合成及深度学习方法,实现程序缺陷的自动修复,属于软件工程领域。
技术介绍
在计算机科学领域,程序合成是指从程序语言自动构造程序,使其满足特定的规约。通常的做法是在程序空间内进行搜索以生成满足约束的程序。程序合成通常被使用在代码补全、软件开发、算法设计中。在计算机科学领域,深度学习的概念源于人工神经网络的研究。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。深度学习广泛应用于自然语言处理、代码提示中。程序缺陷自动修复方法通常包含两个步骤:产生修复候选项和验证修复候选项。通常采用变异的方法产生修复候选项,并基于测试用例验证候选项。通过变异的方法产生修复候选项,修复候选项相对固定,不一定能产生正确的修复。通过深度学习的方法产生修复候选项,扩展了修复候选项,增加了修复的可能性。通过测试用例的验证方法,无法保证修复后代码的正确性。程序合成的方法包括合成与验证两个步骤,使用程序的规约作为约束,可以保证合成后的代码是正确的。专利技 ...
【技术保护点】
1.一种基于深度学习与程序合成的C/C++程序缺陷自动修复方法,其特征在于:输入带有缺陷的C/C++程序、错误定位信息、程序需要满足的规约以及满足相同规约正确程序集,通过学习正确程序中的书写结构,建立一个正确书写结构模型;根据错误定位信息,将错误点之前的代码结构作为模型的输入,预测错误点的书写结构,扩展成修复候选项集,并组织成选择表达式的形式;使用程序合成方法,将带有选择表达式的程序和该程序需要满足的规约转化为逻辑表达式,使用约束求解器,在设定的时间内进行求解;根据每个选择表达式的选项,输出最终的C/C++代码,即得到修复后的程序。
【技术特征摘要】
1.一种基于深度学习与程序合成的C/C++程序缺陷自动修复方法,其特征在于:输入带有缺陷的C/C++程序、错误定位信息、程序需要满足的规约以及满足相同规约正确程序集,通过学习正确程序中的书写结构,建立一个正确书写结构模型;根据错误定位信息,将错误点之前的代码结构作为模型的输入,预测错误点的书写结构,扩展成修复候选项集,并组织成选择表达式的形式;使用程序合成方法,将带有选择表达式的程序和该程序需要满足的规约转化为逻辑表达式,使用约束求解器,在设定的时间内进行求解;根据每个选择表达式的选项,输出最终的C/C++代码,即得到修复后的程序。2.根据权利要求1所述的基于深度学习与程序合成的C/C++程序缺陷自动修复方法,其特征在于,该方法包括以下具体步骤:步骤1)输入带有缺陷的C/C++程序及其需要满足的规约,并输入该程序的缺陷定位信息,表示为{d1d2...dk}。步骤2)输入满足相同规约的正确程序集{p1p2...pn},将其转化成线性序列集{l1l2...ln},学习其中的书写结构,构建书写结构模型,具体步骤如下:步骤2.1)将正确的C/C++程序解析为抽象语法树。步骤2.2)先序遍历抽象语法树,将抽象语法树转化为抽象线性序列,并添加“{”、“}”将抽象语法树中每个中间节点包裹起来。步骤2.3)将正确程序集{p1p2...pn}转化成线性序列集{l1l2...ln},并截取固定长度序列作为训练数据。采用长短期记忆网络,利用梯度下降优化算法训练全部数据,得到书写结构模型。步骤3)根据书写结构模型,将缺陷位置之前的代码转化所得的抽象线性序列作为模型的输...
【专利技术属性】
技术研发人员:王林章,周风顺,李宣东,
申请(专利权)人:南京大学,
类型:发明
国别省市:江苏,32
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。