CN117349186B - 一种基于语义流图的程序语言缺陷定位方法、系统及介质 - Google Patents
一种基于语义流图的程序语言缺陷定位方法、系统及介质 Download PDFInfo
- Publication number
- CN117349186B CN117349186B CN202311639788.6A CN202311639788A CN117349186B CN 117349186 B CN117349186 B CN 117349186B CN 202311639788 A CN202311639788 A CN 202311639788A CN 117349186 B CN117349186 B CN 117349186B
- Authority
- CN
- China
- Prior art keywords
- program
- semantic
- text
- flowsheet
- program language
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 66
- 230000007547 defect Effects 0.000 title claims abstract description 33
- 238000012549 training Methods 0.000 claims abstract description 62
- 239000013598 vector Substances 0.000 claims abstract description 30
- 238000013507 mapping Methods 0.000 claims abstract description 22
- 239000011159 matrix material Substances 0.000 claims description 27
- 238000004364 calculation method Methods 0.000 claims description 19
- 238000007781 pre-processing Methods 0.000 claims description 13
- 238000000605 extraction Methods 0.000 claims description 11
- 230000004807 localization Effects 0.000 claims description 11
- 230000000873 masking effect Effects 0.000 claims description 9
- 230000006870 function Effects 0.000 claims description 8
- 230000007246 mechanism Effects 0.000 claims description 8
- 238000010276 construction Methods 0.000 claims description 7
- 238000010606 normalization Methods 0.000 claims description 4
- 238000004458 analytical method Methods 0.000 claims description 3
- 238000013528 artificial neural network Methods 0.000 claims description 3
- 230000008859 change Effects 0.000 claims description 3
- 230000004913 activation Effects 0.000 claims description 2
- 230000007704 transition Effects 0.000 claims description 2
- 238000013135 deep learning Methods 0.000 abstract description 3
- 238000013136 deep learning model Methods 0.000 abstract description 3
- 238000010586 diagram Methods 0.000 description 11
- 230000008569 process Effects 0.000 description 9
- 238000012545 processing Methods 0.000 description 6
- 238000004590 computer program Methods 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 230000018109 developmental process Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000011218 segmentation Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3628—Software debugging of optimised code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02P—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
- Y02P90/00—Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
- Y02P90/30—Computing systems specially adapted for manufacturing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Biomedical Technology (AREA)
- Computational Linguistics (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Computer Hardware Design (AREA)
- Biophysics (AREA)
- Quality & Reliability (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Machine Translation (AREA)
Abstract
本发明公开了一种基于语义流图的程序语言缺陷定位方法、系统及介质,涉及程序语言和深度学习领域。本发明获取包含带有自然语言描述的程序语言文本数据集和带有错误信息标记的程序语言文本数据集,构建语义流图;将语义流图和对应的程序语言文本输入到预训练模型获取文本特征向量;通过多层感知机将错误信息特征向量和程序语言文本特征向量映射到同一向量空间;计算错误信息和程序语言文本之间的相似度;利用分类器对相似度结果进行分类并判断程序语言文本与错误信息的相关度进而输出判定为错误的程序语言文本。本发明通过语义流图的方式使程序语言缺陷定位模型显式的学习程序语言知识,缓解了深度学习模型学习程序知识能力不足的问题。
Description
技术领域
本申请涉及程序语言和深度学习技术领域,具体涉及一种基于语义流图的程序语言缺陷定位方法、系统及介质。
背景技术
虽然现代软件工程认识到有广泛的方法(例如,模型检查、符号执行、类型检查)来帮助确保软件符合其期望行为的规范,但由于开发人员的编程错误和开发过程不成熟等原因,软件(甚至是已部署的软件)仍然存在异构错误。解决由此产生的错误的过程称为调试,是一项不可或缺但令人沮丧的活动,很容易占软件开发和维护成本的很大一部分。为了解决调试过程中不断增长的高成本问题,在过去的几十年里,已经提出了各种自动技术作为开发人员的调试辅助工具。特别是缺陷定位工作,其目的是识别程序错误的确切位置。但是由于工具的不成熟使缺陷定位工作成为调试中成本最高、最乏味、最耗时的工作之一。
鉴于深度学习架构能够利用上下文信息,并在自然语言处理方面取得了令人印象深刻的进展,近年来提出了许多基于神经网络的缺陷定位技术。尽管取得了进展,但深度学习模型不能充分捕捉程序代码的深层语义。与自然语言不同,编程语言有一个形式化的结构,它提供了重要的代码语义,通常是明确的。然而,现有的深度学习模型要么通过将代码片段视为与自然语言相同的令牌序列来完全忽略代码结构,要么通过使用图代码表示只考虑代码的浅层结构。因此,形式化的代码结构没有得到充分利用,导致了模型在程序语言缺陷定位领域的学习过程一直欠优化。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本申请的背景的理解,因此可以包括但不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
为了对披露的实施例的一些方面有基本的理解,下面给出了简单的概括。所述概括不是泛泛评述,也不是要确定关键/重要组成元素或描绘这些实施例的保护范围,而是作为后面的详细说明的序言。
本公开实施例提供了一种基于语义流图的程序语言缺陷定位方法、系统及介质,以解决形式化的代码结构没有得到充分利用,导致了模型在程序语言缺陷定位领域的学习过程一直欠优化技术问题。
一种基于语义流图的程序语言缺陷定位方法,包括:
获取带有自然语言描述的程序语言数据集和带有错误信息标记的程序语言数据集,所述带有自然语言描述的程序语言数据集包含程序语言文本和其对应的自然语言注释,带有错误信息标记的程序语言数据集包含错误报告、错误的程序语言文本以及程序语言文本中错误的具体位置信息。
将带有自然语言描述的程序语言文本数据集进行预处理,保留自然语言描述并对程序语言文本构建本发明所提出的语义流图(SemanticFlowGraph,SFG)。语义流图的主要内容包括程序变量节点、变量节点之间的边、变量的类型以及变量的角色。
根据步骤B得到的语义流图构建邻接矩阵,并进行掩码操作;所述邻接矩阵包括语义流图中的变量依赖关系邻接矩阵、语义流图中的节点与变量类型的对应关系邻接矩阵、语义流图中的节点与变量角色的对应关系邻接矩阵以及语义流图与程序语言文本的对应关系邻接矩阵。
将语义流图的变量节点、变量类型、变量角色、邻接矩阵、程序语言文本以及对应的自然语言描述输入到本发明所提出的基于程序语义流图的预训练模型(CodeSemanticFlowBERT,CSFBERT)中并以自监督的方式进行训练。
在基于程序语义流图的预训练模型的基础上构建程序语言缺陷定位模型并使用带有错误信息标记的程序语言文本数据对模型进行有监督训练。
将带有真实错误的程序语言本文输入到训练得到的程序语言缺陷定位模型中,通过计算程序语言文本与错误信息的相似度来判别此程序语言文本是否与错误有关。当错误信息和程序语言的特征向量的相似度高于指定阈值则分类器判断为此程序文本为错误程序,并将错误程序文本的所在位置作为模型的最终结果。
优选的,所述语义流图构建方法包括:
对程序语言文本数据进行语法分析,获得其对应的抽象语法树。
构建语义流图集合<N,E,T,R>,集合中N表示语义流图中的变量节点,E表示节点之间的边,T表示变量节点类型,R表示变量节点角色。
将程序文本中的变量和变量类型分别映射到语义流图中的N和T中;
获取语义流图的边集合,边集合包括数据流连线、控制流连线、运算顺序流连线三种,其中,数据流连线表示两个变量之间的数据流连接,控制流连线表示两个直线基本块之间的控制流,运算顺序流连线表示基本块内部或基本块之间的自然顺序计算流。
获取变量节点角色集合,对于每个语义流图中的变量节点,该变量节点角色检查抽象语法树中相应变量的直接父级,以及它与直接父级之间的位置关系,建立角色。
优选的,所述邻接矩阵进行掩码操作具体方式如下:
对程序语言文本中的15%的单词进行遮盖,在15%的遮盖单词中有80%使用[Mask]代替,有10%随机使用其他单词代替,有10%保持原样不变,对于四种邻接矩阵中20%的边进行遮盖。
优选的,所述程序语言缺陷定位模型包括基于程序语义流图的预训练模型、多层感知机映射、相似度计算。
优选的,所述基于程序语义流图的预训练模型具体如下:
将语义流图的变量节点、变量类型、变量角色、邻接矩阵、程序语言文本以及对应的自然语言描述输入到以Transformers模型的编码器堆叠的模型中,通过掩码进行自监督学习,获取基于程序语义流图的预训练模型。
所述基于程序语义流图的预训练模型具体如下:
,
,
,
其中,表示分割位置,表示文本输入与图结构输入之间的分割位置并将其放在输入的最后表示输入的结束,/>表示多头注意力机制用于优化输入文本的特征向量,/>表示归一化处理,/>表示特征向量拼接,/>用于获得输入的自然语言文本整体特征,/>表示代买描述文本,/>用于获得输入的程序语言文本整体特征,/>表示程序语言文本,/>用于获得输入的语义流图整体特征;/>放在变量类型输入的开头用于获得输入的变量类型整体特征;/>放在变量角色输入的开头用于获得输入的变量角色整体特征;FFN为前馈神经网络用于转换特征维度;/>表示语义流图变量节点,/>表示变量类型,/>表好似变量角色,/>表示模型输入,/>表示当前时刻,/>表示前一时刻。
优选的,所述多层感知机映射方法具体如下:
通过基于程序语义流图的预训练模型生成程序文本特征,使用BERT预训练模型获取错误信息文本特征:
,
其中,表示错误信息文本,/>表示与错误信息有关程序语言文本,/>表示与错误信息无关程序语言文本,/>表示错误信息文本特征,/>表示与错误信息有关程序语言文本特征,/>表示与错误信息无关程序语言文本特征。
将错误信息文本特征、与错误信息有关程序语言文本特征、与错误信息无关程序语言文本特征通过多层感知机映射到同一个空间:
,
其中,、/>、/>表示将/>、/>、/>转变到同一特征向量空间的结果,/>、/>、/>、表示可学习的权重矩阵,用于突出特征向量中重要的特征以优化模型的性能,权重矩阵的下标b和c分别用于区分自然语言权重和程序语言权重,权重矩阵上标用于表明矩阵使用顺序,/>表示leaky_relu激活函数,norm表示对特征向量进行归一化操作。
优选的,所述相似度计算具体公式如下:,其中,Simil表示对特征向量进行相似度计算操作并得到相似度计算结果,sim用于判断程序语言文本与错误信息是否相关。
优选的,所述指定阈值为0.6。
一种基于语义流图的程序语言缺陷定位系统,包括数据预处理模块、基于程序语义流图的预训练模型模块、程序文本特征提取模块、映射网络模块、记忆库的动量更新机制模块、相似度计算模块。
所述数据预处理模块:获取带有自然语言描述的程序语言文本数据集和带有错误信息标记的程序语言文本数据集,对于带有自然语言描述的程序语言文本数据集,本模块分析其程序语言文本的语义流图并获取语义流图中的变量节点的类型和角色,在获取变量类型和变量角色的基础上构建语义流图中的变量依赖关系、语义流图中的节点与变量类型的对应关系、语义流图中的节点与变量角色的对应关系以及语义流图与程序语言文本的对应关系四个邻接矩阵,对于带有错误信息标记的程序语言文本数据集,本模块构建正负样本,其中正样本为错误信息和错误句子对应正确,负样本为错误信息和错误句子对应不正确。
基于程序语义流图的预训练模型模块:以自监督的方式获取程序语言知识,在此模块中分别将自然语言描述、程序语言文本、语义流图中变量节点、变量节点类型和变量节点角色输入到由Transformers的编码器堆叠的预训练模型中以训练得到基于程序语义流图的预训练模型。基于程序语义流图的预训练模型通过掩码操作程序文本、语义流图与程序文本连接、语义流图节点连接、语义流图与节点类型连接、语义流图与节点角色连接使预训练模型通过自监督学习有效的过去程序语言中的知识。
程序文本特征提取模块:用于获取带有错误位置标记的程序文本特征,对数据预处理模型中获得的带有错误信息标记的程序语言文本数据集通过预训练模型对其特征进行提取,其中错误信息使用已有的BERT预训练模型进行处理,程序文本使用基于程序语义流图的预训练模型进行处理。最终得到向量表示的文本特征。
映射网络模块:将错误报告与程序文本映射到同一空间中,本模块通过多层感知机将带有标记数据中的错误报告和程序文本映射到同一向量空间中,使后续操作可以同时处理错误报告和程序文本特征。
记忆库的动量更新机制模块:动态化的存储预处理模块所得到的正负样本,模块使用内存库来存储从不同批次中获得的丰富的变化集,以便稍后进行对比。
相似度计算模块:用于区分正样本和负样本,通过计算错误报告与正负样本的相似度数值用于判断次程序文本是否与该错误报告相关,如果相似度数值超过一定阈值则认为此程序文本中有相关错误。
本公开实施例可以实现以下技术效果:
本发明提出了一种新的有向多标记代码图表示,称为语义流图。通过对程序语言文本和其抽象语法树进行分析后获取程序变量类型和角色,其可以紧凑而充分地捕捉代码语义。
本发明提出了将语义流图与程序语言预训练模型相结合的基于程序语义流图的预训练模型。将SFG中节点和边信息输入到预训练模型中并以自训练的方式来训练CSFBERT,使其可以显示的学习大量的程序语言知识并有效的用于获得各种与代码相关的下游任务的代码表示。
本发明还提供了一种动量更新层次动量对比化程序语言缺陷定位技术。该技术使用内存库来存储从不同批次中获得的丰富的变更集使模型在反向传播动态的对比不同数据并使用层次对比损失来描述错误信息和程序语言不同层次的相似性。
以上的总体描述和下文中的描述仅是示例性和解释性的,不用于限制本申请。
附图说明
一个或多个实施例通过与之对应的附图进行示例性说明,这些示例性说明和附图并不构成对实施例的限定,附图中具有相同参考数字标号的元件示为类似的元件,附图不构成比例限制,并且其中:
图1为本发明提供的一种基于语义流图的程序语言缺陷定位方法流程图。
图2为本发明提供的一种程序语义流图构建流程图。
图3为本发明提供的一种程序语义流图结构示意图。
图4为本发明提供的一种基于程序语义流图的预训练模型构建流程图。
图5为本发明提供的一种基于程序语义流图的预训练模型结构示意图。
图6为本发明提供的一种提取文本特征提取方法流程图。
图7为程序语言缺陷定位流程图。
图8为程序语言缺陷定位结构示意图。
图9为本发明提供的一种基于语义流图的程序语言缺陷定位装置的结构示意图。
具体实施方式
为了能够更加详尽地了解本公开实施例的特点与技术内容,下面结合附图对本公开实施例的实现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本公开实施例。在以下的技术描述中,为方便解释起见,通过多个细节以提供对所披露实施例的充分理解。然而,在没有这些细节的情况下,一个或多个实施例仍然可以实施。在其它情况下,为简化附图,熟知的结构和装置可以简化展示。
本公开实施例的说明书和权利要求书及上述附图中的术语“第一”“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开实施例的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含。
图1是本发明检测方法的流程图。本发明所述方法适用于已有大量带有自然语言描述的程序语言文本数据集和带有错误信息标记的程序语言文本数据集的情况下,自动构建数据集。该方法由一种基于语义流图的程序语言缺陷定位装置来执行,该装置由软件和/或硬件的方式实现。
参见图1,本发明是一种基于语义流图的程序语言缺陷定位方法,具体步骤包括:
S1:首先收集并构建带有自然语言描述的程序语言文本数据集和带有错误信息标记的程序语言文本数据集。
S2:然后对带有自然语言描述的程序语言文本数据集进行语义流图分析处理,并得到语义流图中的变量节点类型和角色。
S3:使用已获得的语义流图和带有自然语言描述的程序语言文本数据集以自监督的方式进行训练并获得基于程序语义流图的预训练模型。
S4:在基于程序语义流图的预训练模型的基础上构建利用相似度检索的程序语言缺陷定位模型,并使用带有标记的程序语言数据训练模型。
S5:最后分类器计算程序文本与错误报告的相似度吗,并判断是否为错位程序文本。
示例性地,方法可以判断程序文本privatestaticfinalintCOMMA_COST=1;privatestaticfinalshortPAREN_COST=2;中的第二句privatestaticfinalshortPAREN_COST=2;出现错误,并输出这一错误位置的具体范围。
在实施例中,所述对获取的程序语义流图构建的具体方法,参见图2,具体步骤包括:
S201:首先对程序语言文本数据进行语法分析,获得其对应的抽象语法树。
S202:构建语义流图集合<N,E,T,R>,集合中的四个变量分别表示语义流图中的变量节点、节点之间的边、变量节点类型、变量节点角色。
S203:将程序文本中的变量和变量类型分别映射到语义流图中的N和T中。
S204:获取语义流图的边集合。边集合分为三种,第一种是数据流连线表示两个变量之间的数据流连接,第二种是控制流连线表示两个直线基本块之间的控制流,第三种是运算顺序流连线表示基本块内部或基本块之间的自然顺序计算流。
S205:获取变量节点角色集合。对于N中的每个节点V,R检查抽象语法树中相应变量的直接父级,以及它与直接父级之间的位置关系,以建立角色。
示例性地,以下列程序语言文本为例,最终可以获取变量节点包含节点类型和节点角色以及变量节点之间的连接并构建语义流图参见图3。doublefunc(inta1){
doublex2=aqrt(a3);
doubley4=log(a5);
if(x6>y7)
x8=x9*y10;
else
x11=y12;
returnx13;
}
在实施例中,所述对获取的基于程序语义流图的预训练模型构建的具体方法,参见图4,具体步骤包括:
S301:将带有自然语言描述的程序语言文本和语义流图进行数据预处理,分别获得变量依赖关系、语义流图中的节点与变量类型的对应关系、语义流图图中的节点与变量角色的对应关系以及语义流图与程序语言文本的对应关系四个邻接矩阵。
S302:对程序语言文本和S301中得到的四种邻接矩阵进行掩码操作。对程序语言文本中的15%的单词进行遮盖,在15%的遮盖单词中有80%使用[Mask]代替,有10%随机使用其他单词代替,有10%保持原样不变。对于四种邻接矩阵中20%的边进行遮盖。
S303:将S302中处理好的数据输入到由Transformers模型的编码器堆叠的预训练模型中。
S304:利用掩码进行自监督学习,使基于程序语义流图的预训练模型获取程序语言文本知识。
示例性地,参见图5中的输入,输入分为自然语言描述、程序语言文本、语义流图中的变量节点、变量节点类型和变量节点角色五个部分,并有四种邻接矩阵以进行自监督训练。
在实施例中,所述对获取的提取文本特征构建的具体方法,参见图6,具体步骤包括:
对于带错误信息的程序文本数据集中的每一个文本通过预训练模型转化为特征向量,其中错误信息为自然语言使用已有的BERT模型,程序语言文本使用基于程序语义流图的预训练模型进行特征提取。
为了自然语言和程序语言特征映射到同一个空间中,对BERT模型和基于程序语义流图的预训练模型所输出的特征向量使用多层感知机进行映射。
在实施例中,所述对获取的程序语言缺陷定位构建的具体方法,参见图7,具体步骤包括:
S501:考虑到大规模负样本的重要性,使用内存库来存储从不同批次中获得的丰富的变化集,以便模型更好的进行正负样本的对比。
S502:对错误信息和程序语言的特征向量的相似度计算。
S503:分类器判别程序语言文本是否与错误有关,当错误信息和程序语言的特征向量的相似度高于一定阈值则分类器判断为错误程序。
S504:根据分类器判断输出错误程序具体位置。
示例性地,参见图8,模型在训练过程中输入分为错误信息、正样本和负样本三种并通过特征提取,特征空间映射和动态缓存三个过程,最终分类器识别正样本为错误相关程序并给出错误程序的具体位置。
图9为本发明一种基于语义流图的程序语言缺陷定位装置的结构示意图,包括:数据预处理模块、基于程序语义流图的预训练模型模块、程序文本特征提取模块、映射网络模块、记忆库的动量更新机制模块、相似度计算模块,其中:
数据预处理模块:处理程序语言文本,获取程序文本对应的语义流图和邻接矩阵。
基于程序语义流图的预训练模型模块:利用处理好的程序文本信息以自监督的方式训练基于程序语义流图的预训练模型。
程序文本特征提取模块:用于提取错误信息特征和程序语言文本特征。
映射网络模块:用于将错误信息的自然语言特征向量和程序语言特征向量映射到同一向量空间中。
记忆库的动量更新机制模块:为使模型更好的学习数据,使用内存库存储不同批次的变化集,以便模型进行对比。
相似度计算模块:用于计算程序语言文本与错误信息文本之间的相似度,若相似度高于一定阈值则判断为错误程序。
进一步地,数据预处理模块,包括:
抽象语法树构建单元:通过已有的抽象语法树工具对程序语言文本进行分析,获取其对应的抽象语法树。
语义流图构建单元:从程序语言文本中获得变量节点和其类型,并将抽象语义树种的节点角色和节点之间的边映射到语义流图中。
邻接矩阵构建单元:根据程序文本和其语义流图构建语义流图中的变量依赖关系、语义流图中的节点与变量类型的对应关系、语义流图中的节点与变量角色的对应关系以及语义流图与程序语言文本的对应关系四个邻接矩阵。
进一步地,基于程序语义流图的预训练模型模块,包括:
文本处理单元:将程序语言数据表示为[CLS]自然语言描述[C]程序语言文本[SEP][N]语义流图变量节点[T]变量节点类型[R]变量节点角色[SEP]。
掩码单元:对程序语言文本和四种邻接矩阵进行随机遮盖的掩码处理。
自训练单元:通过上下文对掩码所遮盖的信息进行预测,从而学习程序语言中的知识。
进一步地,程序文本特征提取模块,包括:
文本处理单元:将程序语言文本的开始位置用<s>标记,结束位置用</s>标记,句子对中间位置使用</s></s>进行标记。将错误信息文本的开始位置用[cls]标记,结束位置用[sep]标记,句子对中间位置使用[sep]进行标记。
句子对特征提取单元:使用BERT预训练模型对错误信息文本进行特征提取,使用基于程序语义流图的预训练模型对程序语言文本进行特征提取。
进一步地,映射网络模块,包括:
特征数据存储单元:用于存储错误信息文本特征和程序语言文本特征。
向量映射单元:使用多层感知机将错误信息文本特征和程序语言文本特征映射到同一向量空间中。
进一步地,记忆库的动量更新机制模块,包括:
变化集存储单元:使用内存库来存储从不同批次中获得的丰富的变化集。
数据更新单元:最新的错误样本进入内存组,并将最旧的负样本出列。
进一步地,相似度计算模块,包括:
相似度计算单元:计算程序语言和错误信息特征向量的相似度。
层次对比单元:使用层次对比损失来利用较低的特征级相似性、较高的模型级相似性和更广泛的内存存储级相似性来将错误报告与程序语言进行匹配。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本公开实施例提供了一种计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令设置为执行上述基于语义流图的程序语言缺陷定位方法。
上述的计算机可读存储介质可以是暂态计算机可读存储介质,也可以是非暂态计算机可读存储介质。
本公开实施例的技术方案可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括一个或多个指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开实施例所述方法的全部或部分步骤。而前述的存储介质可以是非暂态存储介质,包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,RandomAccessMemory)、磁碟或者光盘等多种可以存储程序代码的介质,也可以是暂态存储介质。
以上描述和附图充分地示出了本公开的实施例,以使本领域的技术人员能够实践它们。其他实施例可以包括结构的、逻辑的、电气的、过程的以及其他的改变。实施例仅代表可能的变化。除非明确要求,否则单独的部件和功能是可选的,并且操作的顺序可以变化。一些实施例的部分和特征可以被包括在或替换其他实施例的部分和特征。而且,本申请中使用的用词仅用于描述实施例并且不用于限制权利要求。如在实施例以及权利要求的描述中使用的,除非上下文清楚地表明,否则单数形式的“一个”(a)、“一个”(an)和“所述”(the)旨在同样包括复数形式。类似地,如在本申请中所使用的术语“和/或”是指包含一个或一个以上相关联的列出的任何以及所有可能的组合。另外,当用于本申请中时,术语“包括”(comprise)及其变型“包括”(comprises)和/或包括(comprising)等指陈述的特征、整体、步骤、操作、元素,和/或组件的存在,但不排除一个或一个以上其它特征、整体、步骤、操作、元素、组件和/或这些的分组的存在或添加。在没有更多限制的情况下,由语句“包括一个…”限定的要素,并不排除在包括所述要素的过程、方法或者设备中还存在另外的相同要素。本文中,每个实施例重点说明的可以是与其他实施例的不同之处,各个实施例之间相同相似部分可以互相参见。对于实施例公开的方法、产品等而言,如果其与实施例公开的方法部分相对应,那么相关之处可以参见方法部分的描述。
本领域技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件,或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,可以取决于技术方案的特定应用和设计约束条件。所述技术人员可以对每个特定的应用来使用不同方法以实现所描述的功能,但是这种实现不应认为超出本公开实施例的范围。所述技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本文所披露的实施例中,所揭露的方法、产品(包括但不限于装置、设备等),可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,可以仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其他的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例。另外,在本公开实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
附图中的流程图和框图显示了根据本公开实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这可以依所涉及的功能而定。在附图中的流程图和框图所对应的描述中,不同的方框所对应的操作或步骤也可以以不同于描述中所披露的顺序发生,有时不同的操作或步骤之间不存在特定的顺序。例如,两个连续的操作或步骤实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这可以依所涉及的功能而定。框图和/或流程图中的每个方框,以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
Claims (5)
1.一种基于语义流图的程序语言缺陷定位方法,其特征在于,包括:
获取带有自然语言描述的程序语言数据集和带有错误信息标记的程序语言数据集,所述带有自然语言描述的程序语言数据集包含程序语言文本和其对应的自然语言注释,带有错误信息标记的程序语言数据集包含错误报告、错误的程序语言文本以及程序语言文本中错误的具体位置信息;
将带有自然语言描述的程序语言数据集进行预处理,保留自然语言描述并对程序语言文本构建语义流图,语义流图包括程序变量节点、变量节点之间的边、变量的类型以及变量的角色;
根据得到的语义流图构建邻接矩阵,并进行掩码操作;所述邻接矩阵包括语义流图中的变量依赖关系邻接矩阵、语义流图中的节点与变量类型的对应关系邻接矩阵、语义流图中的节点与变量角色的对应关系邻接矩阵以及语义流图与程序语言文本的对应关系邻接矩阵;
将语义流图的变量节点、变量类型、变量角色、邻接矩阵、程序语言文本以及对应的自然语言描述输入到基于程序语义流图的预训练模型中并以自监督的方式进行训练;
在基于程序语义流图的预训练模型的基础上构建程序语言缺陷定位模型并使用带有错误信息标记的程序语言文本数据对模型进行有监督训练;
将带有真实错误的程序语言本文输入到训练得到的程序语言缺陷定位模型中,通过计算程序语言文本与错误信息的相似度来判别此程序语言文本是否与错误有关,当错误信息和程序语言的特征向量的相似度高于指定阈值则分类器判断为此程序文本为错误程序,并将错误程序文本的所在位置作为模型的最终结果;
所述语义流图构建方法包括:
对程序语言文本数据进行语法分析,获得其对应的抽象语法树;
构建语义流图集合<N,E,T,R>,集合中N表示语义流图中的变量节点,E表示节点之间的边,T表示变量节点类型,R表示变量节点角色;
将程序文本中的变量和变量类型分别映射到语义流图中的N和T中;
获取语义流图的边集合,边集合包括数据流连线、控制流连线、运算顺序流连线三种,其中,数据流连线表示两个变量之间的数据流连接,控制流连线表示两个直线基本块之间的控制流,运算顺序流连线表示基本块内部或基本块之间的自然顺序计算流;
获取变量节点角色集合,对于每个语义流图中的变量节点,该变量节点通过检索抽象语法树中相应变量的直接父级,以及它与直接父级之间的位置关系,建立角色;
所述邻接矩阵进行掩码操作具体方式如下:
对程序语言文本中的15%的单词进行遮盖,在15%的遮盖单词中有80%使用[Mask]代替,有10%随机使用其他单词代替,有10%保持原样不变,对于四种邻接矩阵中20%的边进行遮盖;
所述基于语义流图的程序语言缺陷定位模型包括基于程序语义流图的预训练模型、多层感知机映射、相似度计算;
所述基于程序语义流图的预训练模型具体如下:
将语义流图的变量节点、变量类型、变量角色、邻接矩阵、程序语言文本以及对应的自然语言描述输入到以Transformers模型的编码器堆叠的模型中,通过掩码进行自监督学习,以获取基于程序语义流图的预训练模型;
所述基于程序语义流图的预训练模型具体如下:
,
,
,
其中,表示文本输入与图结构输入之间的分割位置并将其放在输入的最后表示输入的结束,/>表示多头注意力机制用于优化输入文本的特征向量,/>表示归一化处理,/>表示特征向量拼接,/>用于获得输入的自然语言文本整体特征,/>表示代买描述文本,/>用于获得输入的程序语言文本整体特征,/>表示程序语言文本,/>用于获得输入的语义流图整体特征;/>放在变量类型输入的开头用于获得输入的变量类型整体特征;/>放在变量角色输入的开头用于获得输入的变量角色整体特征;FFN为前馈神经网络用于转换特征维度;/>表示语义流图变量节点,/>表示变量类型,/>表好似变量角色,/>表示模型输入,/>表示当前时刻,/>表示前一时刻;
所述多层感知机映射方法具体如下:
通过基于程序语义流图的预训练模型生成程序文本特征,使用BERT预训练模型获取错误信息文本特征:
,
其中,表示错误信息文本,/>表示与错误信息有关程序语言文本,/>表示与错误信息无关程序语言文本,/>表示错误信息文本特征,/>表示与错误信息有关程序语言文本特征,/>表示与错误信息无关程序语言文本特征;
将错误信息文本特征、与错误信息有关程序语言文本特征、与错误信息无关程序语言文本特征通过多层感知机映射到同一个空间:
,
其中,、/>、/>表示将/>、/>、/>转变到同一特征向量空间的结果,/>、/>、/>、/>表示可学习的权重矩阵,用于突出特征向量中重要的特征以优化模型的性能,权重矩阵的下标b和c分别用于区分自然语言权重和程序语言权重,权重矩阵上标用于表明矩阵使用顺序,/>表示leaky_relu激活函数,norm表示对特征向量进行归一化操作。
2.根据权利要求1所述的方法,其特征在于,所述相似度计算具体公式如下:,其中,Simil表示对特征向量进行相似度计算操作并得到相似度计算结果,sim用于判断程序语言文本与错误信息是否相关。
3.根据权利要求1所述的方法,其特征在于,指定阈值为0.6。
4.一种基于语义流图的程序语言缺陷定位系统,其特征在于,执行如权利要求1-3任一所述的方法,包括:
数据预处理模块:获取带有自然语言描述的程序语言文本数据集和带有错误信息标记的程序语言文本数据集,对于带有自然语言描述的程序语言文本数据集,本模块分析其程序语言文本的语义流图并获取语义流图中的变量节点的类型和角色,在获取变量类型和变量角色的基础上构建语义流图中的变量依赖关系、语义流图中的节点与变量类型的对应关系、语义流图中的节点与变量角色的对应关系以及语义流图与程序语言文本的对应关系四个邻接矩阵,对于带有错误信息标记的程序语言文本数据集,本模块构建正负样本,其中正样本为错误信息和错误句子对应正确,负样本为错误信息和错误句子对应不正确;
基于程序语义流图的预训练模型模块:以自监督的方式获取程序语言知识,在此模块中分别将自然语言描述、程序语言文本、语义流图中变量节点、变量节点类型和变量节点角色输入到由Transformers的编码器堆叠的预训练模型中以训练得到基于程序语义流图的预训练模型,基于程序语义流图的预训练模型通过掩码操作程序文本、语义流图与程序文本连接、语义流图节点连接、语义流图与节点类型连接、语义流图与节点角色连接使预训练模型通过自监督学习有效的过去程序语言中的知识;
程序文本特征提取模块:用于获取带有错误位置标记的程序文本特征,对数据预处理模型中获得的带有错误信息标记的程序语言文本数据集通过预训练模型对其特征进行提取,其中错误信息使用已有的BERT预训练模型进行处理,程序文本使用基于程序语义流图的预训练模型进行处理,最终得到向量表示的文本特征;
映射网络模块:将错误报告与程序文本映射到同一空间中,本模块通过多层感知机将带有标记数据中的错误报告和程序文本映射到同一向量空间中,使后续操作可以同时处理错误报告和程序文本特征;
记忆库的动量更新机制模块:动态化的存储预处理模块所得到的正负样本,模块使用内存库来存储从不同批次中获得的丰富的变化集,以便稍后进行对比;
相似度计算模块:用于区分正样本和负样本,通过计算错误报告与正负样本的相似度数值用于判断次程序文本是否与该错误报告相关,如果相似度数值超过一定阈值则认为此程序文本中有相关错误。
5.一种存储介质,存储有程序指令,其特征在于,所述程序指令在运行时,执行如权利要求1至3任一项所述的基于语义流图的程序语言缺陷定位方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311639788.6A CN117349186B (zh) | 2023-12-04 | 2023-12-04 | 一种基于语义流图的程序语言缺陷定位方法、系统及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311639788.6A CN117349186B (zh) | 2023-12-04 | 2023-12-04 | 一种基于语义流图的程序语言缺陷定位方法、系统及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117349186A CN117349186A (zh) | 2024-01-05 |
CN117349186B true CN117349186B (zh) | 2024-03-05 |
Family
ID=89363527
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311639788.6A Active CN117349186B (zh) | 2023-12-04 | 2023-12-04 | 一种基于语义流图的程序语言缺陷定位方法、系统及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117349186B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20200101521A (ko) * | 2019-01-31 | 2020-08-28 | 연세대학교 산학협력단 | 시멘틱 매칭 장치 및 방법 |
KR102379660B1 (ko) * | 2020-11-30 | 2022-03-29 | 주식회사 티맥스에이아이 | 딥러닝 기반 의미역 분석을 활용하는 방법 |
CN114547329A (zh) * | 2022-01-25 | 2022-05-27 | 阿里巴巴(中国)有限公司 | 建立预训练语言模型的方法、语义解析方法和装置 |
CN116150335A (zh) * | 2022-12-19 | 2023-05-23 | 中国电子科技集团公司第二十八研究所 | 一种军事场景下文本语义检索方法 |
CN116302953A (zh) * | 2023-01-10 | 2023-06-23 | 南通大学 | 一种基于增强嵌入向量语义表示的软件缺陷定位方法 |
CN116910013A (zh) * | 2023-07-17 | 2023-10-20 | 西安电子科技大学 | 基于语义流图挖掘的系统日志异常检测方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10891326B2 (en) * | 2017-01-05 | 2021-01-12 | International Business Machines Corporation | Representation of a data analysis using a flow graph |
-
2023
- 2023-12-04 CN CN202311639788.6A patent/CN117349186B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20200101521A (ko) * | 2019-01-31 | 2020-08-28 | 연세대학교 산학협력단 | 시멘틱 매칭 장치 및 방법 |
KR102379660B1 (ko) * | 2020-11-30 | 2022-03-29 | 주식회사 티맥스에이아이 | 딥러닝 기반 의미역 분석을 활용하는 방법 |
CN114547329A (zh) * | 2022-01-25 | 2022-05-27 | 阿里巴巴(中国)有限公司 | 建立预训练语言模型的方法、语义解析方法和装置 |
CN116150335A (zh) * | 2022-12-19 | 2023-05-23 | 中国电子科技集团公司第二十八研究所 | 一种军事场景下文本语义检索方法 |
CN116302953A (zh) * | 2023-01-10 | 2023-06-23 | 南通大学 | 一种基于增强嵌入向量语义表示的软件缺陷定位方法 |
CN116910013A (zh) * | 2023-07-17 | 2023-10-20 | 西安电子科技大学 | 基于语义流图挖掘的系统日志异常检测方法 |
Non-Patent Citations (2)
Title |
---|
Pre-training Code Representation with Semantic Flow Graph for Effective Bug Localization;Zhongxing Yu et al.;《arxiv》;20230825;全文 * |
基于预训练机制的自修正复杂语义分析方法;李青;钟将;李立力;李琪;;通信学报;20191225(第12期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN117349186A (zh) | 2024-01-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111259394B (zh) | 一种基于图神经网络的细粒度源代码漏洞检测方法 | |
KR102189688B1 (ko) | 동의어 추출 방법 | |
CN111046679B (zh) | 翻译模型的质量信息获取方法、装置及计算机设备 | |
CN112306494A (zh) | 一种基于卷积和循环神经网络的代码分类及聚类方法 | |
CN113742205B (zh) | 一种基于人机协同的代码漏洞智能检测方法 | |
CN111124487A (zh) | 代码克隆检测方法、装置以及电子设备 | |
CN113609488B (zh) | 基于自监督学习及多通道超图神经网络的漏洞检测方法与系统 | |
CN117215935A (zh) | 一种基于多维度代码联合图表示的软件缺陷预测方法 | |
CN115146279A (zh) | 程序漏洞检测方法、终端设备及存储介质 | |
CN114969334B (zh) | 异常日志检测方法、装置、电子设备及可读存储介质 | |
CN118155006B (zh) | 一种应用于电网的操作票安全校核方法及系统 | |
CN114785606A (zh) | 一种基于预训练LogXLNet模型的日志异常检测方法、电子设备及存储介质 | |
CN115130538A (zh) | 文本分类模型的训练方法、文本处理的方法、设备及介质 | |
CN116340952A (zh) | 一种基于操作码程序依赖图的智能合约漏洞检测方法 | |
CN113553847A (zh) | 用于对地址文本进行解析的方法、装置、系统和存储介质 | |
CN113065352B (zh) | 一种电网调度工作文本的操作内容识别方法 | |
KR20200141419A (ko) | 동의어 추출 방법 | |
CN117349186B (zh) | 一种基于语义流图的程序语言缺陷定位方法、系统及介质 | |
CN116841869A (zh) | 基于代码结构化信息及审查知识的Java代码审查评论生成方法及装置 | |
CN115952076A (zh) | 一种基于代码语义和度量的代码异味识别方法 | |
CN116628695A (zh) | 基于多任务学习的漏洞挖掘方法及装置 | |
CN113591475A (zh) | 无监督可解释分词的方法、装置和电子设备 | |
CN112698977A (zh) | 服务器故障定位方法方法、装置、设备及介质 | |
CN117435246B (zh) | 一种基于马尔可夫链模型的代码克隆检测方法 | |
Ouyang et al. | Binary vulnerability mining based on long short-term memory network |
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 |