CN115016961A - 一种基于注意力网络的代码修复方法 - Google Patents

一种基于注意力网络的代码修复方法 Download PDF

Info

Publication number
CN115016961A
CN115016961A CN202210456344.8A CN202210456344A CN115016961A CN 115016961 A CN115016961 A CN 115016961A CN 202210456344 A CN202210456344 A CN 202210456344A CN 115016961 A CN115016961 A CN 115016961A
Authority
CN
China
Prior art keywords
attention
neural network
model
attention network
repair
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202210456344.8A
Other languages
English (en)
Other versions
CN115016961B (zh
Inventor
李辉
刘勇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Dalian Maritime University
Original Assignee
Dalian Maritime University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Dalian Maritime University filed Critical Dalian Maritime University
Priority to CN202210456344.8A priority Critical patent/CN115016961B/zh
Publication of CN115016961A publication Critical patent/CN115016961A/zh
Application granted granted Critical
Publication of CN115016961B publication Critical patent/CN115016961B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Biomedical Technology (AREA)
  • Computational Linguistics (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Quality & Reliability (AREA)
  • Biophysics (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Computer Hardware Design (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种基于注意力网络的代码修复方法,包括:S1:将源代码中的方法名、变量名进行统一替换并记录替换关系生成预处理数据;S2:生成基于注意力机制的神经网络模型;S3:训练基于注意力机制的神经网络模型,将预处理数据输入神经网络模型中,采用梯度下降方式训练该模型直至收敛,保存神经网络模型参数;S4:将实际应用场景中将有缺陷的源代码执行S1操作获得预处理后数据,将预处理后数据转换成向量输入至完成训练的模型中生成修复补丁,将生成的修复补丁执行一次S1中替换关系的逆过程获得真实修复补丁。该方法通过自注意力网络来学习代码中的缺陷模式从而自动修复软件中的缺陷,提高软件缺陷的修复效率。

Description

一种基于注意力网络的代码修复方法
技术领域
本发明涉及软件测试领域,尤其涉及一种基于注意力网络的代码修复方法。
背景技术
目前应对软件缺陷的解决方案之一是在部署之前对软件进行缺陷检测。软件缺陷检测基础的代码分析技术可以分为静态分析、动态分析和混合分析。静态分析技术主要是依赖源代码的分析,但是这种方法准确度不高,经常会有高误报的情况出现,例如,基于规则/模板的分析、代码相似性检测和符号执行。动态分析包括模糊测试和污点分析,这种方法通常存在代码覆盖率低的问题。而混合方法结合了静态分析技术和动态分析技术,旨在克服上述弱点。然而,混合技术也继承了这两种技术的缺点,并且在实践中运行效率低下。随着软件产品规模越来越大,软件产品发布后披露的漏洞数量迅速增加,当前的代码检查和软件质量检查技术需要在效率和有效性方面进一步提高,另外传统的检测方法需要人为的定义测试用例,而定义测试用例是一项复杂且庞大的工作,需要耗费大量的人力财力。大量的依赖人力投入,也是目前软件缺陷检测面临的窘境之一。
发明内容
根据现有技术存在的问题,本发明公开了一种基于注意力网络的代码修复方法,具体包括如下步骤:
S1:将源代码中的方法名、变量名进行统一替换并记录替换关系生成预处理数据;
S2:生成基于注意力机制的神经网络模型;
S3:训练基于注意力机制的神经网络模型,将预处理数据输入神经网络模型中,采用梯度下降方式训练该模型直至收敛,保存神经网络模型参数;
S4:将实际应用场景中将有缺陷的源代码执行S1操作获得预处理后数据,将预处理后数据转换成向量输入至完成训练的模型中生成修复补丁将生成的修复补丁执行一次S1中替换关系的逆过程获得真实修复补丁。
进一步的,所述神经网络模型包括编码器和解码器,所述编码器包括自注意力网络和注意力网络,其中自注意力网络初步提取软件缺陷特征,将生成的特征向量输入到注意力网络从而标注软件缺陷的重点特征,得到软件缺陷的上下文向量;所述解码器包括自注意力网络与复制注意力网络,所述自注意力网络解码软件缺陷的上下文向量、将上下文信息初步翻译为修复补丁信息,复制注意力网络允许源代码中不需要修改的词元直接复制到生成的修复补丁之中。
进一步的,将预处理数据进行向量化表示,采用128维的向量表示每个词元,将每次输入到神经网络中的数据量设置为64,并使用初始学习率为0.002的Adam优化器来训练神经网络模型。我们对编码器与解码器的词嵌入设置的为128,堆叠的层数为6层。我们为模型最大训练15000个epoch,并且在模型过拟合之前将表现最好的模型保存下来。为了得到最好的模型,我们在验证集上计算loss,在测试集上计算最终的结果。
进一步的,将预处理数据按8:1:1的比例分为训练集、测试集和验证集。
进一步的,在生成修复补丁的过程中采用波束搜索得到任意多条针对一条源代码序列的修复补丁。由于生成的修复补丁中的词元是在S1中经过替换的词元,所以我们要在生成的修复补丁之上执行一次S1中替换过程的逆过程,已得到真正的修复补丁。为了使生成修复补丁的过程更具有鲁棒性,我们在生成修复补丁的过程中采用了波束搜索。采用波束搜索之后,可以得到任意多条针对一条源代码序列的修复补丁。这使得开发人员可以根据需要在最终的多条修复结果中选择最符合自己需要的修复结果。
由于采用了上述技术方案,本发明提供的一种基于注意力网络的代码修复方法,通过自注意力网络来学习代码中的缺陷模式从而自动修复软件中的缺陷,提高软件缺陷的修复效率。通过训练好的软件模型来修复软件中的缺陷,可以在开发期间定位软件缺陷,防止软件在上线后出现错误造成重大财产损失。通过神经网络模型修复源代码中的软件缺陷,可以减少测试人员的工作量减少软件测试期间投入的人力物力等。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明中代码自动修复的流程图;
图2为本发明中模型整体框图。
具体实施方式
为使本发明的技术方案和优点更加清楚,下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚完整的描述:
如图1所示的一种基于注意力网络的代码修复方法,具体包括如下步骤:
S1:生成预处理数据:将数据进行向量化表示,以便将数据输入到模型中,由于编程语言与自然语言有很大的不同,比如编程语言中的命名是随意的,而自然语言常用的词汇是固定的。这将导致编程语言构建的词汇表会异常巨大并且不具有普适性。我们在这一阶段需要将数据中的变量名、方法名等进行统一的替换,并将替换前后的源码进行一一映射并记录下来,以便减少词汇表的大小方面模型进行学习。
S2:生成基于注意力的神经网络模型,如图2所示;
对比传统的代码生成模型,我们对深度神经网络的网络层进行有针对性的设计。具体来说,编程语言中常见的缺陷的类型不同,如常见的调用错误、变量未初始化、参数传递错误、未进行空值判断等。这些错误在源代码中分布不均衡,所以数据存在不平衡性。为了更好的解决这种数据不平衡性的问题我们尝试在编码器的设计阶段,设计一个对各种软件缺陷更具有普适性的编码器。这也间接决定了模型后续修复软件缺陷的效果。
具体的,在编码器部分,我们采用了自注意力网络与复制注意力网络。自注意力网络作为软件缺陷特征提取器,将生成的特征向量输入到注意力网络进一步标注软件缺陷的重点特征,得到软件缺陷的上下文向量。
自注意力网络:为了更好地捕捉源代码中软件缺陷的模式信息,我们采用了自注意力机制。我们用公式一用来计算自注意力权重。输入向量的embedding与三个不同的参数矩阵相乘得到Q,K,V。dk为矩阵K的维度。
Figure BDA0003618886610000031
多头注意力机制是将原始的输入序列进行多组自注意力处理过程,然后再将每一组自注意力的结果拼接起来进行一次线性变换得到最终输出结果:
headi=Attention(QWi Q,KWi K,VWi V) (2)
MultiHead(Q,K,V)=Concat(head1,…,headh)WO (3)
其中,Q,K,V是三个矩阵,Q为查询矩阵,K为键,也就是想关注的内容,V是值矩阵。W为权重矩阵,在
Figure BDA0003618886610000041
Figure BDA0003618886610000042
由于自注意力不会考虑输入序列的位置信息,所以我们需要将语句进行向量化之后,为每个节点添加了位置编码,以便补充每个词元的在缺陷代码中的位置信息。位置编码的计算方式如下:
Figure BDA0003618886610000046
Figure BDA0003618886610000047
这里pos指的是当前的词元在有缺的代码中的位置,即在偶数的位置,我们使用正弦编码,而在奇数的位置我们使用余弦编码。可以证明,在任意两个词元之间的位置编码计算出来的距离信息是不相同的。
在进行自注意力网络提取信息之后,我们采用注意力网络进一步提取代码缺陷信息。
注意力层的具体结构是:神经网络在处理当量的信息时利用注意力机制可以做到只选择一些关键的输入信息进行处理,这样可以提高神经网络的泛化能力。注意力机制层的输入为h={h1,h2,...,hm},其中
Figure BDA0003618886610000043
m为源代码中的词元长度,d为特征维度。输出为s={s1,s2,...,sm},
Figure BDA0003618886610000044
eij为计算解码器中任意两个输出向量的关联度,其计算方法为:
Figure BDA0003618886610000045
hi与hj为任意两个时刻的词元信息。Wa为训练参数。αij为每个输出向量分数的权重,其计算方法为:
Figure BDA0003618886610000051
最后我们计算解码器的每个输出向量的加权值si,此加权值表示在位置i的词元所受的关注度的大小,其计算方式为:
Figure BDA0003618886610000052
编码器通过自注意力机制与注意力机制标注了带有缺陷的软件源码的特征,并得到特征向量si
在编码器提取缺陷信息生成中间向量之后,我们将编码器得到的中间向量输入到解码器中,通过解码器就可以得到软件缺陷的补丁。
解码器:为了保证解码过程中生成的代码在语法上的正确性,我们采用注意力模型有针对性地生成候选词元。
具体来说,解码器的作用是从编码向量中提取软件缺陷的特征信息,并通过特征向量解码出相应的补丁信息。在解码器阶段,为了使输入到解码器的特征更平滑,我们将解码器的输出s={s1,s2,...,sm}进行归一化处理:
s=LayerNorm(s) (9)
在将输入进行归一化结束之后,我们将归一化后的输出再一次通过自注意力层(Eq1,Eq2)进行特征解码,为了使解码器的输出特征更平滑,再解码之后我们又进行了一次归一化,则解码器的输出o为:
o=LayerNorm(s+SubLayer(s)) (10)
考虑到有缺陷的代码与修复后的代码存在大量重复的词元,我们添加了注意力机制,以允许模型在生成补丁期间既可以通过模型生成词元,又允许模型从输入序列中复制词元:
p(yt|ot,yt-1,ht)=p(yt,g|ot,yt-1,ht)+p(yt,c|ot,yt-1,ht) (11)
其中yt为t时刻生成某一词元的概率,yt-1为t-1时刻生成某一词元的概率,ot为t时刻编码器的输出,ht为t时刻解码器的中间输出。其中p(yt,g|·)为模型生成词元的概率,p(yt,c|·)为模型需要复制输入的概率。其中:
Figure BDA0003618886610000061
Figure BDA0003618886610000062
这里为常规的根据源码与补丁中词元出现的频率构建的词表,而根据只在输入源码中出现一次的词元构建的词表。上面两个公式的核心在于当词元仅出现在源代码中时,将p(yt,g|·)置为0,当词元没有在源代码中出现时,将p(yt,c|·)置为0。为生成模式的打分函数:
Figure BDA0003618886610000063
其中vi为单词vi的one-hot向量。ψc(·)为复制模型的打分函数:
Figure BDA0003618886610000064
其中Z为两种模式共享的归一化项:
Figure BDA0003618886610000065
解码器通过自注意力机制与复制机制解码出最终软件补丁的信息,并通过反向传播算法不断提高模型性能,直至模型收敛。
S3:模型训练阶段:我们首先将预处理按8:1:1的比例分为训练集、测试集、验证集。其中,训练集用于训练神经网络模型,测试集用于查看我们模型在训练过程中的效果,验证集用于检测我们模型的最终效果。其次将预处理数据中的每个词元用128维的向量表示,将每次输入到神经网络中的数据大小设置为64,并使用初始学习率为0.002的Adam优化器来优化神经网络模型的训练过程。我们为模型最大训练15000个epoch,并且在模型过拟合之前将表现最好的模型参数保存下来,以便于我们进行最终模型的应用。
S4:补丁生成过程:补丁生成阶段应用于实际场景中,我们首先将有缺陷的源代码执行S1操作获得预处理数据,将预处理数据中的每个词元用128维的向量表示输入至完成训练的模型中。在补丁生成阶段采用Beam Search来扩展解码过程的搜索空间。最后我们将模型输出的向量转化为模型修复后的代码。
传统的贪婪搜索是在每次生成词元时取概率最大的目标,而Beam Search的解码策略是,解码过程不是在每个时间步取最佳概率的词元,而是跟踪k个概率最佳的词元(其中k是Beam Search的搜索宽度)。在数学形式上,令Ht为在时间步t之前解码的k个概率的集合:
Figure BDA0003618886610000071
在下一个时间步t+1时对于每个可能的词元都会有|V|个可能的yt+1个词元(V是词汇表),总共有k·|V|个候选。
Figure BDA0003618886610000072
在这些候选的词元中,解码过程保留具有最高概率的k个序列。该过程一直持续到每个假设代表序列结尾的特殊标记。我们将这k个最后的生成代码视为错误代码的候选修复代码。这里值得注意的是,当k=1时,Beam Search与贪婪搜索策略相同。在模型生成结束之后,将生成的修复补丁执行一次S1中替换关系的逆过程获得真实修复补丁。
在模型生成结束之后,我们根据在第一步中的替换关系将生成的补丁中的方法名、变量名替换成源码中的词元,就可以得到软件的真正的补丁了。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。

Claims (5)

1.一种基于注意力网络的代码修复方法,其特征在于包括:
S1:将源代码中的方法名、变量名进行统一替换并记录替换关系生成预处理数据;
S2:生成基于注意力机制的神经网络模型;
S3:训练基于注意力机制的神经网络模型,将预处理数据输入神经网络模型中,采用梯度下降方式训练该模型直至收敛,保存神经网络模型参数;
S4:将实际应用场景中将有缺陷的源代码执行S1操作获得预处理后数据,将预处理后数据转换成向量输入至完成训练的模型中生成修复补丁,将生成的修复补丁执行一次S1中替换关系的逆过程获得真实修复补丁。
2.根据权利要求1所述的基于注意力网络的代码修复方法,其特征在于:所述神经网络模型包括编码器和解码器,所述编码器包括自注意力网络和注意力网络,其中自注意力网络初步提取软件缺陷特征,将生成的特征向量输入到注意力网络从而标注软件缺陷的重点特征,得到软件缺陷的上下文向量;所述解码器包括自注意力网络与复制注意力网络,所述自注意力网络解码软件缺陷的上下文向量、将上下文信息初步翻译为修复补丁信息,复制注意力网络允许源代码中不需要修改的词元直接复制到生成的修复补丁中。
3.根据权利要求2所述的基于注意力网络的代码修复方法,其特征在于:将预处理数据进行向量化表示,采用128维的向量表示每个词元,将每次输入到神经网络中的数据量设置为64,并使用初始学习率为0.002的Adam优化器来训练神经网络模型。
4.根据权利要求3所述的基于注意力网络的代码修复方法,其特征在于:将预处理数据按8:1:1的比例分为训练集、测试集和验证集。
5.根据权利要求1所述的基于注意力网络的代码修复方法,其特征在于:在生成修复补丁的过程中采用波束搜索得到任意多条针对一条源代码序列的修复补丁。
CN202210456344.8A 2022-04-27 2022-04-27 一种基于注意力网络的代码修复方法 Active CN115016961B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210456344.8A CN115016961B (zh) 2022-04-27 2022-04-27 一种基于注意力网络的代码修复方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210456344.8A CN115016961B (zh) 2022-04-27 2022-04-27 一种基于注意力网络的代码修复方法

Publications (2)

Publication Number Publication Date
CN115016961A true CN115016961A (zh) 2022-09-06
CN115016961B CN115016961B (zh) 2024-04-26

Family

ID=83067446

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210456344.8A Active CN115016961B (zh) 2022-04-27 2022-04-27 一种基于注意力网络的代码修复方法

Country Status (1)

Country Link
CN (1) CN115016961B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20200034436A1 (en) * 2018-07-26 2020-01-30 Google Llc Machine translation using neural network models
CN113127339A (zh) * 2021-03-24 2021-07-16 西北大学 一种Github开源平台数据的获取方法及源代码缺陷修复系统
US20210357307A1 (en) * 2020-05-15 2021-11-18 Microsoft Technology Licensing, Llc. Automated program repair tool
CN113741886A (zh) * 2021-08-02 2021-12-03 扬州大学 一种基于图的语句级程序修复方法及系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20200034436A1 (en) * 2018-07-26 2020-01-30 Google Llc Machine translation using neural network models
US20210357307A1 (en) * 2020-05-15 2021-11-18 Microsoft Technology Licensing, Llc. Automated program repair tool
CN113127339A (zh) * 2021-03-24 2021-07-16 西北大学 一种Github开源平台数据的获取方法及源代码缺陷修复系统
CN113741886A (zh) * 2021-08-02 2021-12-03 扬州大学 一种基于图的语句级程序修复方法及系统

Also Published As

Publication number Publication date
CN115016961B (zh) 2024-04-26

Similar Documents

Publication Publication Date Title
US11972365B2 (en) Question responding apparatus, question responding method and program
CN110020438A (zh) 基于序列识别的企业或组织中文名称实体消歧方法和装置
CN111985239A (zh) 实体识别方法、装置、电子设备及存储介质
CN111427775B (zh) 一种基于Bert模型的方法层次缺陷定位方法
CN111309607B (zh) 一种代码方法级别的软件缺陷定位方法
CN113900923A (zh) 一种跨指令集架构的二进制函数相似性检查系统及方法
CN113672931B (zh) 一种基于预训练的软件漏洞自动检测方法及装置
CN113741886B (zh) 一种基于图的语句级程序修复方法及系统
CN114926150A (zh) 一种变压器技术符合性评估数字化智能审核方法与装置
CN113723070B (zh) 文本相似度模型训练方法、文本相似度检测方法及装置
CN112463924B (zh) 面向智能问答基于内部相关性编码的文本意图匹配方法
CN114064487A (zh) 一种代码缺陷检测方法
CN116305158A (zh) 一种基于切片代码依赖图语义学习的漏洞识别方法
CN114611492A (zh) 一种文本顺滑方法、系统和计算机设备
CN113591093A (zh) 基于自注意力机制的工业软件漏洞检测方法
CN117036778A (zh) 一种基于图文转换模型的安全隐患识别标注方法
CN114385491A (zh) 一种基于深度学习的js转译器缺陷检测方法
CN117591913A (zh) 基于改进的R-Transformer的语句级软件缺陷预测方法
CN116560890A (zh) 一种结合词法和语法信息的自动程序修复方法
CN117724974A (zh) 一种软件故障定位方法和装置
CN116595189A (zh) 基于两阶段的零样本关系三元组抽取方法及系统
CN117009223A (zh) 基于抽象语法的软件测试方法、系统、存储介质及终端
CN116680407A (zh) 一种知识图谱的构建方法及装置
CN115016961B (zh) 一种基于注意力网络的代码修复方法
CN112035347B (zh) 一种源代码的自动异常处理方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant