CN112035347B - 一种源代码的自动异常处理方法 - Google Patents

一种源代码的自动异常处理方法 Download PDF

Info

Publication number
CN112035347B
CN112035347B CN202010867776.9A CN202010867776A CN112035347B CN 112035347 B CN112035347 B CN 112035347B CN 202010867776 A CN202010867776 A CN 202010867776A CN 112035347 B CN112035347 B CN 112035347B
Authority
CN
China
Prior art keywords
code
vector
exception
try
word
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.)
Active
Application number
CN202010867776.9A
Other languages
English (en)
Other versions
CN112035347A (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.)
Beihang University
Original Assignee
Beihang 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 Beihang University filed Critical Beihang University
Priority to CN202010867776.9A priority Critical patent/CN112035347B/zh
Publication of CN112035347A publication Critical patent/CN112035347A/zh
Application granted granted Critical
Publication of CN112035347B publication Critical patent/CN112035347B/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/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/366Software debugging using diagnostics
    • 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
    • G06N3/044Recurrent networks, e.g. Hopfield networks
    • 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
    • G06N3/049Temporal neural networks, e.g. delay elements, oscillating neurons or pulsed inputs

Landscapes

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

Abstract

本发明实现了一种源代码的自动异常处理方法,通过检测定位异常代码和生成处理对应异常的代码两个步骤,以LSTM神经网络方法作为基础方法,对未经过异常处理的代码进行代码异常的检测与定位,并生成相应的catch语句。本发明技术方案能够突破异常处理原则违反检测技术的应用范围限制,自动地检测待开发代码中存在的异常,同时解决异常处理代码推荐技术中存在的代码不完整性导致仍依赖开发者等现有自动化手段无法解决的问题。

Description

一种源代码的自动异常处理方法
技术领域
本发明涉及人工智能领域,尤其涉及一种源代码的自动异常处理方法。
背景技术
源代码异常处理(Exception Handling)是面向对象程序语言中提供的一种处理源代码中存在的异常以及从中恢复的有效机制。这种机制一般以“try”和“catch”关键字来实现,比如Java和C#语言。异常处理机制通过这种方式能够很好地分离处理错误的代码与正常代码,有助于程序理解和维护。缺少或者不正确地使用异常处理往往会导致严重的问题,例如系统崩溃或者信息泄露。因此对于开发者来说,异常处理是非常重要的。然而在实际的软件中,异常处理的代码质量低下且容易产生缺陷。这一方面在于开发者倾向于忽略异常处理,直到某个错误发生才去检查异常;另一方面编写异常处理的代码也是比较困难的,尤其是涉及到软件版本演化。综上,为了帮助开发者编写高质量的异常处理代码,自动化的异常处理技术是必要的。
现有的相关技术主要包括两个方面:异常处理原则违反检测以及异常处理代码推荐。在检测上,典型的技术包括对try和catch代码块内的方法调用序列进行关联规则挖掘(Association Rule Mining),从而检测源代码中是否有违反规则的调用。在推荐上,现有的技术大多面向开发中的代码进行代码样例或者异常类型以及API调用的推荐。比如,给定一段未经过异常处理的代码,通过从GitHub的软件仓库中检索相似的包含try-catch的代码来作为代码样例推荐给开发者,从而帮助其完成自己的代码开发。此外,也有技术利用模糊理论(Fuzzy Theory)和N-gram模型来推荐可能产生的异常类型以及能够处理这种异常的相应的API。
上述现有技术在应用中存在如下需要解决的问题:
1.检测异常代码规则违反行为的技术是建立在已有try-catch代码块的基础上的,然而这正是自动化异常处理的目标,即生成这些代码,因此该类技术无法适用到此文的场景。
2.异常处理代码推荐的技术存在两个问题:第一,假设开发者会主动寻求关于编写异常处理代码的帮助,并且知道try-catch代码块应该在哪些位置编写,但实际上与之相反;第二,即使推荐出的代码样例或者API能够帮助开发者设计try-block的逻辑,开发者仍然需要编写或修改这些代码以形成完整的异常处理代码。
发明内容
为了解决目前源代码自动异常处理方法的一些弊端,我们提出一种源代码的自动异常处理方法,其包括两个步骤:
步骤一:检测定位异常代码步骤:首先读取未经过异常处理的代码,对所述代码进行代码异常的检测与定位,对检测出存在潜在的异常的代码行添加相应的try关键字进行异常的捕获,具体地,根据代码的顺序性,将所述代码表示成语句序列,利用LSTM神经网络将各个语句转换为向量形式,并利用另一个LSTM对得到的向量序列建模,并且在两个LSTM的输出上使用注意力机制得到语句中的词的权重以及语句之间的权重分配,从而提升整体的检测性能;
步骤二:生成处理对应异常的代码步骤:具体地,使用两个独立的LSTM神经网络作为编码器,分别对try代码块以及其之前的代码进行编码,经过注意力模块得到两个上下文向量,对两者进行加权累加融合为一个向量后,利用程序切片技术以try内的语句作为切片准则,反向迭代查找其依赖的语句,在此基础上进行掩码处理输入到新的注意力模块得到额外的上下文向量,最后把两个上下文向量拼接到一起得到最终的向量并利用LSTM解码器生成相应的catch语句,即为用于处理异常的代码;
最终输出结果为所述用于处理异常的代码。
所述检测定位异常代码步骤中,所述检测定位异常代码步骤中的所述对得到的向量序列建模过程的具体方法为:首先将该代码切分成以行为单位的语句序列S={s1,s2,...,sK},K表示语句的数量,
Figure GDA0003474815000000021
其中i为语句的编号,s表示不包含空行和注释行的每一行语句,c表示每一行代码中的单个词,L为单个语句的最大词数,对于每个语句si,首先将其中的每个词以词嵌入的形式转换为向量表示,记为
Figure GDA0003474815000000022
其中We是词嵌入矩阵,t表示词的位置,使用LSTM对该语句中的词进一步编码,即在每个位置t上,通过下式得到其隐藏状态向量,h即为隐藏状态向量:
Figure GDA0003474815000000023
进一步地,使用双向的LSTM来学习词之间的依赖关系,即
Figure GDA0003474815000000031
Figure GDA0003474815000000032
从而构成所述向量序列建模。
所述检测定位异常代码步骤中,所述得到语句中的词的权重以及语句之间的权重分配的具体方法为:利用注意力机制学习出词的权重,并以加权累加的方式得到该语句的向量,定义sk是该语句的向量表示,在得到所述语句的向量序列之后使用另外的LSTM对语句之间的依赖关系建模,表示为:
hk=BiLSTM(sk)
并使用注意力机制对得到的隐藏状态在不进行累加操作前提下进行分配权重:
uk=tanh(Wshk+bs)
Figure GDA0003474815000000033
h′k=akhk
其中Ws和bs分别为转换矩阵和偏置项,tanh为激活函数,us是随机初始化的固定的向量,αk表示计算得到的权重,h′k是经过权重转换的隐藏状态向量,基于以上隐藏状态向量,利用分类器预测是否会出现异常的概率
Figure GDA0003474815000000037
Figure GDA0003474815000000034
其中Wp和bp分别为转换矩阵和偏置项,sigmoid为激活函数,在训练时,使用二分交叉熵作为损失函数:
Figure GDA0003474815000000035
其中y表示真实的标签,N表示训练集的样本数目,Θ表示需要学习的所有参数,训练完成后,根据预测的概率
Figure GDA0003474815000000036
设定阈值δ来决定预测的标签,着大于该阈值,则预测为Y,也就是该语句会抛出异常,需要添加到try语句内,否则为N,与之相反。
所述生成处理对应异常的代码步骤中,所述对try代码块以及其之前的代码进行编码过程为:命名try之前的代码为前置代码,try之内的代码为try代码块,用W={w1,w2,...,wn}表示,首先利用双向的LSTM对W进行编码,得到隐藏状态:
ht=BiLSTM(wt,ht-1).
这里t表示其位置,在解码器部分使用LSTM对给定的上下文向量进行解码,当生成第j个词的时候,解码器的隐藏状态向量qj的更新方式为:
qj=LSTM(qj-1,yj-1)
其中yj-1表示上一个生成的词,若j为第一个词,则其值为起始符。
所述生成处理对应异常的代码步骤中,所述对try代码块以及其之前的代码进行编码过程为:命名try之前的代码为前置代码,try之内的代码为try代码块,用W={w1,w2,...,wn}表示,首先利用双向的LSTM对W进行编码,得到隐藏状态:
ht=BiLSTM(wt,ht-1)
这里t表示其位置,在解码器部分使用LSTM对给定的上下文向量进行解码,当生成第j个词的时候,解码器的隐藏状态向量qj的更新方式为:
qj=LSTM(qj-1,yj-1)
其中yj-1表示上一个生成的词,若j为第一个词,则其值为起始符。
所述生成处理对应异常的代码步骤中,对上下文向量进行加权累加融合过程具体为:对于隐藏状态向量每个qj,使用注意力机制得到相应的上下文向量vj,此部分的Attention函数由以下公式得到:ft=tanh(Wcht+bc),
Figure GDA0003474815000000041
Figure GDA0003474815000000042
其中Wc和bc分别表示参数矩阵以及偏置项,记上述函数为vj=Attention(qj,H),类似地,利用另外的双向LSTM可以得到所述前置代码的隐藏状态H′={h1′,h2′,...,hn′},即h′t=BiLSTM(dt,h′t-1),其中D={d1,d2,...,dm},为try代码块的另一种编码,接下来使用注意力机制得到对应的上下文向量vj′,也就是vj′=Attention(qj,H′),那么将两个上下文向量加权累加,得到新的上下文向量
Figure GDA0003474815000000056
其中W1和W2分别为待学习的权重。
所述生成处理对应异常的代码步骤中,所述得到额外的上下文向量过程具体为:切片的结果为对所述前置代码进行标注,若其中的词与try代码块有依赖关系则标记为1,否则为0,假设得到的标注序列为LI={l1,l2,...,lm},则将其作为掩码融入到原始的注意力机制中,即得到额外的上下文向量
Figure GDA0003474815000000051
Figure GDA0003474815000000052
所述生成处理对应异常的代码步骤中,把上下文向量拼接并生成相应的catch语句过程具体为:将
Figure GDA0003474815000000053
Figure GDA0003474815000000054
拼接到一起并进行维度的降低转化得到最终的上下文向量Vj,生成第j个词的概率为:
p(yj|y1,......,yj-1,C)=softmax(WgVj+bg)
其中Wg和bg分别为转换矩阵和偏置项,C表示前置代码和try代码块,训练检测定位异常代码步骤和生成处理对应异常的代码步骤中神经网络共同构成的模型的损失函数为
Figure GDA0003474815000000055
其中N仍然表示训练集的样本数目,M表示待生成的catch语句的最大词数,Θ表示需要学习的所有参数,在生成词时,根据计算得到的概率,选取词表中最大概率的词。
与现有技术相比,本发明的方法具有以下优势:
本申请的源代码自动异常处理方法能够突破异常处理原则违反检测技术的应用范围限制,自动地检测待开发代码中存在的异常;同时解决异常处理代码推荐技术中存在的代码不完整性导致仍依赖开发者的问题,生成完整的代码以提升其实用性。
附图说明
图1检测定位异常代码以及生成处理对应异常的代码图示;
图2异常检测与定位机制整体架构;
图3异常处理代码生成机制整体架构
具体实施方式
以下是本发明的优选实施例并结合附图,对本发明的技术方案作进一步的描述,但本发明并不限于此实施例。
针对现有技术存在的缺点,本发明提出了一种基于深度学习的源代码异常处理的技术方案。该方法的整体流程分为两步:检测定位异常代码以及生成处理对应异常的代码。其样例如图1所示。
对于给定的未经过异常处理的代码,首先进行代码异常的检测与定位,如图1所示,检测出原始代码中第8行存在潜在的异常,因此添加相应的try关键字进行异常的捕获。具体地,考虑到代码的顺序性,将代码的异常定位问题转化为序列标注问题。在此之上,将代码进一步地表示成语句序列,以逐个判断语句是否存在潜在异常。对于这种表示,利用LSTM神经网络将各个语句转换为向量形式,然后再次利用另一个LSTM对得到的向量序列建模,并且在两个LSTM的输出上使用注意力机制(Attention Mechanism)得到语句中的词的权重以及语句之间的权重分配,从而提升整体的检测性能。
其次是异常处理代码的自动生成。本方法将try语句内的代码以及try之前的代码看做两种不同的上下文,并且利用程序切片技术(Program Slicing)增强try与其之前的代码之间的依赖关系。具体地,首先使用两个独立的LSTM神经网络作为编码器,分别对try代码块以及其之前的代码进行编码,经过注意力模块得到两个上下文向量;对两者进行加权累加融合为一个向量后,以try内的语句作为切片准则,反向迭代查找其依赖的语句,在此基础上进行掩码处理输入到新的注意力模块得到额外的上下文向量;最后把两个上下文向量拼接到一起得到最终的向量并利用LSTM解码器生成相应的catch语句,也就是用于处理异常的代码。
异常检测与定位
该部分的整体模型框架如图2。
对于给定的不包含try-catch语句的代码,本方法首先将该代码切分成以行为单位的语句序列S={s1,s2,...,sK},这里K表示语句的数量。而
Figure GDA0003474815000000061
Figure GDA0003474815000000062
其中i为语句的编号,s表示不包含空行和注释行的每一行语句,c表示每一行代码中的单个词,L为单个语句的最大词数。对于每个语句si,首先将其中的每个词以词嵌入的形式转换为向量表示,记为
Figure GDA0003474815000000063
其中We是词嵌入矩阵,t表示词的位置。接下来使用LSTM对该语句中的词进一步编码,即在每个位置t上,通过下式得到其隐藏状态向量:
Figure GDA0003474815000000071
进一步地,使用双向的LSTM来学习词之间的依赖关系,即
Figure GDA0003474815000000072
Figure GDA0003474815000000073
在此基础上,利用注意力机制学习出词的权重,并以加权累加的方式得到该语句的向量,此过程用公式表述如下:
Figure GDA0003474815000000074
Figure GDA0003474815000000075
Figure GDA0003474815000000076
其中,Wω和bω分别为转换矩阵和偏置项,tanh为激活函数。uω是随机初始化的固定的向量,
Figure GDA0003474815000000077
表示计算得到的权重,si是该语句的向量表示。
在得到上述的语句向量序列之后,本方法对语句之间的依赖关系建模,这里使用另外的LSTM实现,也就是:
hi=BiLSTM(si).
类似地,仍然使用注意力机制对得到的隐藏状态进行分配权重,不同的是不进行累加操作,该计算过程如下:
uk=tanh(Wshk+bs)
Figure GDA0003474815000000078
h′k=akhk
其中Ws和bs分别为转换矩阵和偏置项,tanh为激活函数,us是随机初始化的固定的向量,αk表示计算得到的权重,h′k是经过权重转换的隐藏状态向量,基于以上隐藏状态向量,利用分类器预测是否会出现异常的概率
Figure GDA00034748150000000710
Figure GDA0003474815000000079
这里Wp和bp分别为转换矩阵和偏置项,sigmoid为激活函数。在训练时,使用二分交叉熵作为损失函数,即:
Figure GDA0003474815000000081
其中y表示真实的标签,N表示训练集的样本数目,Θ表示需要学习的所有参数。训练完成后,根据预测的概率
Figure GDA0003474815000000082
设定阈值δ来决定预测的标签,若大于该阈值,则预测为Y,也就是该语句会抛出异常,需要添加到try语句内,否则为N,与之相反。
异常处理代码生成
该部分的整体模型框架如图3。
对于已经定位异常的代码,即添加了try语句的代码,此部分的目标为生成相应的catch语句以处理捕捉到的异常。为了便于描述,本文将try之前的代码命名为前置代码,而try之内的代码为try代码块。假定D={d1,d2,...,dm}和W={w1,w2,...,wn}分别表示两种代码,这里m和n表示代码中词的最大编号。首先利用双向的LSTM对W进行编码,得到隐藏状态:
ht=BiLSTM(wt,ht-1).
这里t表示其位置。简便起见,将所有的隐藏状态记为H={h1,h2,...,hn}。在解码器部分使用LSTM对给定的上下文向量进行解码,当生成第i个词的时候,解码器的隐藏状态向量qi的更新方式为:
qi=LSTM(qi-1,yi-1),
其中yi-1表示上一个生成的词,若i为第一个词,则其值为起始符<s>。于是对于隐藏状态向量每个qi,可以使用注意力机制得到相应的上下文向量vi。这里的计算方式与前文一致,此部分的Attention函数由以下公式得到:
ft=tanh(Wcht+bc),
Figure GDA0003474815000000083
Figure GDA0003474815000000084
其中Wc和bc分别表示参数矩阵以及偏置项,记上述函数为vi=Attention(qi,H)。
类似地,利用另外的双向LSTM可以得到所述前置代码的隐藏状态H′={h1′,h2′,...,hn′},即h′t=BiLSTM(dt,h′t-1),接下来使用注意力机制得到对应的上下文向量v′i,也就是vi′=Attention(qi,H′),以如下方式将两个上下文向量加权累加,得到新的上下文向量
Figure GDA0003474815000000091
其中W1和W2分别为待学习的权重。
为了刻画try代码块与前置代码之间的依赖关系,本方法提出了基于程序切片的注意力机制。如前文所述,切片的结果为对所述前置代码进行标注,若其中的词与try代码块有依赖关系则标记为1,否则为0。假设得到的标注序列为L={l1,l2,...,lm},则将其作为掩码融入到原始的注意力机制中,即得到额外的上下文向量
Figure GDA0003474815000000092
Figure GDA0003474815000000093
Figure GDA0003474815000000094
拼接到一起并进行维度的降低转化得到最终的上下文向量Vi。于是生成第i个词的概率可以用如下公式得到:
p(yi|y1,...,yi-1,C)=softmax(WgVi+bg),
这里Wg和bg分别为转换矩阵和偏置项,C表示前置代码和try代码块。训练该模型的损失函数为
Figure GDA0003474815000000095
其中N表示训练集的样本数目,M表示待生成的catch语句的最大词数,Θ表示需要学习的所有参数。在生成词时,根据计算得到的概率,选取词表中最大概率的词即可。

Claims (7)

1.一种源代码的自动异常处理方法,其特征在于:所述方法包括两个步骤:
步骤一:检测定位异常代码步骤:首先读取未经过异常处理的代码,对所述代码进行代码异常的检测与定位,对检测出存在潜在的异常的代码行添加相应的try关键字进行异常的捕获,具体地,根据代码的顺序性,将所述代码表示成语句序列,利用LSTM神经网络将各个语句转换为向量形式,并利用另一个LSTM对得到的向量序列建模,并且在两个LSTM的输出上使用注意力机制得到语句中的词的权重以及语句之间的权重分配,从而提升整体的检测性能;
步骤二:生成处理对应异常的代码步骤:具体地,使用两个独立的LSTM神经网络作为编码器,分别对try代码块以及其之前的代码进行编码,经过注意力模块得到两个上下文向量,对两者进行加权累加融合为一个向量后,利用程序切片技术以try内的语句作为切片准则,反向迭代查找其依赖的语句,在此基础上进行掩码处理输入到新的注意力模块得到额外的上下文向量,最后把两个上下文向量拼接到一起得到最终的向量并利用LSTM解码器生成相应的catch语句,即为用于处理异常的代码;
最终输出结果为所述用于处理异常的代码。
2.根据权利要求1所述一种源代码的自动异常处理方法,其特征在于:所述检测定位异常代码步骤中,所述对得到的向量序列建模过程的具体方法为:首先将该代码切分成以行为单位的语句序列S={s1,s2,…,sK},K表示语句的数量,
Figure FDA0003474814990000011
其中i为语句的编号,s表示不包含空行和注释行的每一行语句,c表示每一行代码中的单个词,L为单个语句的最大词数,对于每个语句si,首先将其中的每个词以词嵌入的形式转换为向量表示,记为
Figure FDA0003474814990000012
其中We是词嵌入矩阵,t表示词的位置,使用LSTM对该语句中的词进一步编码,即在每个位置t上,通过下式得到其隐藏状态向量,h即为隐藏状态向量,那么:
Figure FDA0003474814990000013
进一步地,使用双向的LSTM来学习词之间的依赖关系,即
Figure FDA0003474814990000014
Figure FDA0003474814990000015
从而构成所述向量序列建模。
3.根据权利要求2所述一种源代码的自动异常处理方法,其特征在于:所述检测定位异常代码步骤中,所述得到语句中的词的权重以及语句之间的权重分配的具体方法为:利用注意力机制学习出词的权重,并以加权累加的方式得到该语句的向量,定义sk是该语句的向量表示,在得到所述语句的向量序列之后使用另外的LSTM对语句之间的依赖关系建模,表示为:
hk=BiLSTM(sk)
并使用注意力机制对得到的隐藏状态在不进行累加操作前提下进行分配权重:
uk=tanh(Wshk+bs)
Figure FDA0003474814990000021
h′k=akhk
其中Ws和bs分别为转换矩阵和偏置项,tanh为激活函数,us是随机初始化的固定的向量,αk表示计算得到的权重,h′k是经过权重转换的隐藏状态向量,基于以上隐藏状态向量,利用分类器预测是否会出现异常的概率
Figure FDA0003474814990000022
Figure FDA0003474814990000023
其中Wp和bp分别为转换矩阵和偏置项,sigmoid为激活函数,在训练时,使用二分交叉熵作为损失函数:
Figure FDA0003474814990000024
其中y表示真实的标签,N表示训练集的样本数目,Θ表示需要学习的所有参数,训练完成后,根据预测的概率
Figure FDA0003474814990000025
设定阈值δ来决定预测的标签,若大于该阈值,则预测为Y,也就是该语句会抛出异常,需要添加到try语句内,否则为N,与之相反。
4.根据权利要求3所述一种源代码的自动异常处理方法,其特征在于:所述生成处理对应异常的代码步骤中,所述对try代码块以及其之前的代码进行编码过程为:命名try之前的代码为前置代码,try之内的代码为try代码块,用W={w1,w2,…,wn}表示,首先利用双向的LSTM对W进行编码,得到隐藏状态:
ht=BiLSTM(wt,ht-1)
这里t表示其位置,在解码器部分使用LSTM对给定的上下文向量进行解码,当生成第j个词的时候,解码器的隐藏状态向量qj的更新方式为:
qj=LSTM(qj-1,yj-1)
其中yj-1表示上一个生成的词,若j为第一个词,则其值为起始符。
5.根据权利要求4所述一种源代码的自动异常处理方法,其特征在于:所述生成处理对应异常的代码步骤中,对上下文向量进行加权累加融合过程具体为:对于隐藏状态向量每个qj,使用注意力机制得到相应的上下文向量vj,此部分的Attention函数由以下公式得到:ft=tanh(Wcht+bc),
Figure FDA0003474814990000031
Figure FDA0003474814990000032
其中Wc和bc分别表示参数矩阵以及偏置项,记上述函数为vj=Attention(qj,H),利用另外的双向LSTM可以得到所述前置代码的隐藏状态H′={h1′,h2′,…,hn′},即h′t=BiLSTM(dt,h′t-1),其中D={d1,d2,…,dm},为try代码块的另一种编码,接下来使用注意力机制得到对应的上下文向量vj′,也就是vj′=Attention(qj,H′),那么将两个上下文向量加权累加,得到新的上下文向量
Figure FDA0003474814990000033
其中W1和W2分别为待学习的权重。
6.根据权利要求5所述一种源代码的自动异常处理方法,其特征在于:所述生成处理对应异常的代码步骤中,所述得到额外的上下文向量过程具体为:切片的结果为对所述前置代码进行标注,若其中的词与try代码块有依赖关系则标记为1,否则为0,假设得到的标注序列为LI={l1,l2,…,lm},则将其作为掩码融入到原始的注意力机制中,即得到额外的上下文向量
Figure FDA0003474814990000034
7.根据权利要求6所述一种源代码的自动异常处理方法,其特征在于:所述生成处理对应异常的代码步骤中,把上下文向量拼接并生成相应的catch语句过程具体为:将
Figure FDA0003474814990000035
Figure FDA0003474814990000036
拼接到一起并进行维度的降低转化得到最终的上下文向量Vj,生成第j个词的概率为:
p(yj|y1,……,yj-1,C)=softmax(WgVj+bg)
其中Wg和bg分别为转换矩阵和偏置项,C表示前置代码和try代码块,训练检测定位异常代码步骤和生成处理对应异常的代码步骤中神经网络共同构成的模型的损失函数为
Figure FDA0003474814990000041
其中N仍然表示训练集的样本数目,M表示待生成的catch语句的最大词数,Θ表示需要学习的所有参数,在生成词时,根据计算得到的概率,选取词表中最大概率的词。
CN202010867776.9A 2020-08-26 2020-08-26 一种源代码的自动异常处理方法 Active CN112035347B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010867776.9A CN112035347B (zh) 2020-08-26 2020-08-26 一种源代码的自动异常处理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010867776.9A CN112035347B (zh) 2020-08-26 2020-08-26 一种源代码的自动异常处理方法

Publications (2)

Publication Number Publication Date
CN112035347A CN112035347A (zh) 2020-12-04
CN112035347B true CN112035347B (zh) 2022-03-01

Family

ID=73581409

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010867776.9A Active CN112035347B (zh) 2020-08-26 2020-08-26 一种源代码的自动异常处理方法

Country Status (1)

Country Link
CN (1) CN112035347B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116070106B (zh) * 2023-03-31 2023-06-02 国网智能电网研究院有限公司 基于行为序列的数据交互异常检测特征抽取方法及装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103246735A (zh) * 2013-05-13 2013-08-14 中国工商银行股份有限公司 一种异常数据处理方法及系统
JP2013161219A (ja) * 2012-02-03 2013-08-19 Denso Corp コード生成装置、及びコード生成プログラム

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110825642B (zh) * 2019-11-11 2021-01-01 浙江大学 一种基于深度学习的软件代码行级缺陷检测方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013161219A (ja) * 2012-02-03 2013-08-19 Denso Corp コード生成装置、及びコード生成プログラム
CN103246735A (zh) * 2013-05-13 2013-08-14 中国工商银行股份有限公司 一种异常数据处理方法及系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Value-at-Risk prediction for the Brazilian stock market: A comparative study between Parametric Method, Feedforward and LSTM Neural Network;Daniel Reghin 等;《2019 XLV Latin American Computing Conference (CLEI)》;20191231;第1-11页 *
基于异常分布导向的智能Fuzzing方法;欧阳永基 等;《电子与信息学报》;20150131;第37卷(第1期);第143-149页 *

Also Published As

Publication number Publication date
CN112035347A (zh) 2020-12-04

Similar Documents

Publication Publication Date Title
CN110018820B (zh) 一种基于深度强化学习的Graph2Seq自动生成Java代码注释的方法
US11157384B2 (en) Methods, systems, articles of manufacture and apparatus for code review assistance for dynamically typed languages
CN114416421B (zh) 一种代码缺陷的自动定位与修复方法
CN114818721B (zh) 一种结合序列标注的事件联合抽取模型与方法
CN112597063B (zh) 缺陷代码定位的方法、装置以及存储介质
CN112215013A (zh) 一种基于深度学习的克隆代码语义检测方法
CN114936158B (zh) 一种基于图卷积神经网络的软件缺陷定位方法
CN112668013B (zh) 一种面向Java源码的语句级模式探索的漏洞检测方法
CN114064487B (zh) 一种代码缺陷检测方法
CN114969763B (zh) 基于seq2seq代码表示学习的细粒度漏洞检测方法
CN114416159B (zh) 基于信息增强调用序列的api推荐方法及装置
CN117036778A (zh) 一种基于图文转换模型的安全隐患识别标注方法
CN116402352A (zh) 一种企业风险预测方法、装置、电子设备及介质
CN112035347B (zh) 一种源代码的自动异常处理方法
CN112183655A (zh) 文档多标签分类方法和装置
JP7466784B2 (ja) グラフベースの時間的分類を用いたニューラルネットワークの訓練
CN117591913A (zh) 基于改进的R-Transformer的语句级软件缺陷预测方法
CN113761845A (zh) 一种文本生成方法、装置、存储介质及电子设备
CN116610936A (zh) 二进制漏洞特征提取和匹配的处理方法、装置、处理器及其计算机可读存储介质
CN112131363A (zh) 自动问答方法、装置、设备及存储介质
CN116702765A (zh) 一种事件抽取方法、装置及电子设备
CN116595537A (zh) 一种基于多模态特征的生成式智能合约的漏洞检测方法
CN116069337A (zh) 一种结合修复模板与深度学习的代码缺陷自动修复方法
CN115221045A (zh) 一种基于多任务多视角学习的多目标软件缺陷预测方法
CN114238644B (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