一种基于代码语言模型的程序缺陷自动修复方法及系统技术方案

技术编号:38844765 阅读:11 留言:0更新日期:2023-09-17 09:56
本发明专利技术涉及一种基于代码语言模型的程序缺陷自动修复方法,包括如下步骤:步骤一、利用开源程序项目源代码语料库,构建代码语言模型;步骤二、利用程序缺陷代码样本和正确代码样本,构建缺陷

【技术实现步骤摘要】
一种基于代码语言模型的程序缺陷自动修复方法及系统


[0001]本专利技术属于计算机软件与人工智能
,具体涉及一种基于代码语言模型的程序缺陷自动修复方法及系统。

技术介绍

[0002]程序缺陷是计算机软件开发中不可避免的问题,随着计算机技术的快速发展,软件的功能和规模不断增加,软件中程序缺陷的数量也越来越多。程序缺陷将导致软件的运行失败,使其无法正常完成既定功能。由于软件在现代社会的广泛应用,程序缺陷会对人们的财产安全和人身安全形成极大的威胁。因此,如何高效修复程序缺陷对计算机软件有着重大意义。
[0003]传统的程序缺陷主要是通过软件开发人员使用手动方式进行人工修复的,开发人员通过断点测试的方式对程序进行反复编译调试,这种方式修复的效果严重依赖开发人员的专业水平,修复时间长,修复成本高。
[0004]现有的程序缺陷自动修复方法主要分为以下两种:一种是启发式规则方法,基于研究人员预先定义的策略模板对程序缺陷部分进行匹配。这种方法适用于修复软件中特定种类的程序缺陷,然而对于其他类型的程序缺陷则无法有效修复,缺乏普适性。另一种是基于神经网络的程序自动修复方法,利用长短期记忆网络(Long Short

Term Memory Network,LSTM)或Transformer架构训练程序自动修复模型,以生成程序缺陷部分对应的补丁。相比启发式规则方法,该方法能够同时修复多种类型的程序缺陷,然而生成的补丁质量差,修复的成功率低。

技术实现思路

[0005]本专利技术为解决现有程序缺陷修复时间长、成本高、缺乏普适性的问题,进而提出一种基于代码语言模型的程序缺陷自动修复方法。
[0006]本专利技术一种基于代码语言模型的程序缺陷自动修复方法,其包括如下步骤:
[0007]步骤一、利用开源程序项目源代码语料库,构建代码语言模型;
[0008]步骤二、利用程序缺陷代码样本和正确代码样本,构建缺陷

修复代码数据集;
[0009]步骤三、构建基于缺陷修复难度判别策略的缺陷

修复代码样本分类器,对数据集样本进行评估并划分缺陷修复难度等级;
[0010]步骤四、建立基于样本调度函数的代码语言模型微调调度器,构建基于缺陷

修复代码数据集的多批次缺陷

修复代码数据样本;
[0011]步骤五、建立基于课程学习机制的代码语言模型微调训练器,通过多批次缺陷

修复代码数据样本对代码语言模型进行多轮迭代微调训练;
[0012]步骤六、将目标程序中的缺陷代码输入至微调训练后的代码语言模型中,输出程序缺陷代码对应的候选补丁序列;
[0013]步骤七、基于测试用例对生成的候选补丁序列进行验证,输出通过测试的正确代
码补丁。
[0014]进一步地,步骤一具体操作为:
[0015]从开源程序项目源代码语料库中获取包含自然语言注释和编程语言代码的双模态语料数据;
[0016]对于给定双模态语料数据对x={w,c},其中w为自然语言序列,c为编程语言序列,分别对这两部分随机选择掩码位置,记为m
w
和m
c
,其中选择的掩码位置在对应序列中需服从均匀分布;
[0017]使用预定义标识符对选定掩码位置中的字符进行掩码处理,将处理后的自然语言序列样本记为w
masked
,将处理后的编程语言序列样本记为c
masked

[0018]对于输入样本序列x=[x1,

,x
n
],分别进行生成式向量编码和判别式向量编码
[0019]构建标准遮蔽语言建模函数:
[0020][0021]构建替换序列检测函数:
[0022][0023]其中,
[0024]使用标准遮蔽语言建模函数和替换序列检测函数构建代码语言模型,其目标损失函数满足约束
[0025]进一步地,生成式向量编码使用softmax函数对其进行处理,则在样本序列位置t上输出字符x的概率为p
G
(x|x)=softmax(e(x)h
tG
),其中e(
·
)表示字符的向量表征;
[0026]判别式向量编码使用sigmoid函数对其进行处理,则在样本序列位置t上的字符被替换的概率为将替换后的序列样本记为x
corrupt

[0027]进一步地,步骤二具体操作为:
[0028]从开源项目仓库中收集包含错误提交版本和修正提交版本的程序文件,根据提交记录提取存在程序缺陷的代码样本和其对应的正确代码样本,组成缺陷

修复代码数据对;
[0029]对程序代码样本数据进行预处理,将提取的缺陷

修复代码数据进行代码长度分析,按程序缺陷代码样本的长度统计收集的代码数据对的概率密度分布,剔除超过预定长度标准的代码样本数据。
[0030]进一步地,步骤三具体操作为:
[0031]构建基于交叉评估的缺陷修复难度判别策略;
[0032]获取所有数据子集的缺陷修复相对难度分数,并对各数据子集中的每一组缺陷

修复代码数据对样本进行难度分数标记,进而对缺陷

修复代码数据集中的所有样本进行缺陷修复难度标注;
[0033]建立基于缺陷修复难度判别策略的缺陷

修复代码样本分类器,对缺陷

修复代码数据集中的所有样本按标注的难度分数进行缺陷修复难度分类,得到各样本缺陷修复难度等级。
[0034]进一步地,步骤三中,基于交叉评估的缺陷修复难度判别流程如下:
[0035]初始状态,输入缺陷

修复代码数据集S和代码语言模型M;
[0036]将数据集S平均分为N份,N为大于2的整数;
[0037]对N份数据子集中的每一个数据子集分别执行以下操作:首先,从N份数据子集中选取该数据子集作为训练数据集对代码语言模型M进行训练,得到训练后的代码语言模型M

;其次,将除去该数据子集的其余N

1个子集分别作为测试集,依次对代码语言模型M

进行测试,得到N

1个测试分数。最后,对得到N

1个测试分数取平均值,记为该数据子集对应的测试结果;
[0038]直至遍历所有N份数据子集,得到对应的N份测试结果;
[0039]对N份测试结果从高到低进行排序,根据测试结果排名得到数据子集的缺陷修复相对难度分数,排名越高的测试结果对应的数据子集缺陷修复相对难度分数越低。
[0040]进一步地,步骤四具体操作如下:
[0041]构建基于等比级数序列的样本调度函数:
[0042][0043]其中,t为代码语言模型本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于代码语言模型的程序缺陷自动修复方法,其特征在于,包括如下步骤:步骤一、利用开源程序项目源代码语料库,构建代码语言模型;步骤二、利用程序缺陷代码样本和正确代码样本,构建缺陷

修复代码数据集;步骤三、构建基于缺陷修复难度判别策略的缺陷

修复代码样本分类器,对数据集样本进行评估并划分缺陷修复难度等级;步骤四、建立基于样本调度函数的代码语言模型微调调度器,构建基于缺陷

修复代码数据集的多批次缺陷

修复代码数据样本;步骤五、建立基于课程学习机制的代码语言模型微调训练器,通过多批次缺陷

修复代码数据样本对代码语言模型进行多轮迭代微调训练;步骤六、将目标程序中的缺陷代码输入至微调训练后的代码语言模型中,输出程序缺陷代码对应的候选补丁序列;步骤七、基于测试用例对生成的候选补丁序列进行验证,输出通过测试的正确代码补丁。2.根据权利要求1所述的基于代码语言模型的程序缺陷自动修复方法,其特征在于,步骤一具体操作为:从开源程序项目源代码语料库中获取包含自然语言注释和编程语言代码的双模态语料数据;对于给定双模态语料数据对x={w,c},其中w为自然语言序列,c为编程语言序列,分别对这两部分随机选择掩码位置,记为m
w
和m
c
,其中选择的掩码位置在对应序列中需服从均匀分布;使用预定义标识符对选定掩码位置中的字符进行掩码处理,将处理后的自然语言序列样本记为w
masked
,将处理后的编程语言序列样本记为c
masked
;对于输入样本序列x=[x1,

,x
n
],分别进行生成式向量编码和判别式向量编码构建标准遮蔽语言建模函数:构建替换序列检测函数:其中,使用标准遮蔽语言建模函数和替换序列检测函数构建代码语言模型,其目标损失函数满足约束3.根据权利要求2所述的基于代码语言模型的程序缺陷自动修复方法,其特征在于,生成式向量编码使用softmax函数对其进行处理,则在样本序列位置t
上输出字符x的概率为其中e(
·
)表示字符的向量表征;判别式向量编码使用sigmoid函数对其进行处理,则在样本序列位置t上的字符被替换的概率为将替换后的序列样本记为x
corrupt
。4.根据权利要求1所述的基于代码语言模型的程序缺陷自动修复方法,其特征在于,步骤二具体操作为:从开源项目仓库中收集包含错误提交版本和修正提交版本的程序文件,根据提交记录提取存在程序缺陷的代码样本和其对应的正确代码样本,组成缺陷

修复代码数据对;对程序代码样本数据进行预处理,将提取的缺陷

修复代码数据进行代码长度分析,按程序缺陷代码样本的长度统计收集的代码数据对的概率密度分布,剔除超过预定长度标准的代码样本数据。5.根据权利要求1所述的基于代码语言模型的程序缺陷自动修复方法,其特征在于,步骤三具体操作为:构建基于交叉评估的缺陷修复难度判别策略;获取所有数据子集的缺陷修复相对难度分数,并对各数据子集中的每一组缺陷

修复代码数据对样本进行难度分数标记,进而对缺陷

修复代码数据集中的所有样本进行缺陷修复难度标注;建立基于缺陷修复难度判别策略的缺陷<...

【专利技术属性】
技术研发人员:郝思冲刘宏伟史先俊舒燕君
申请(专利权)人:哈尔滨工业大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1