首页 | 本学科首页   官方微博 | 高级检索  
相似文献
 共查询到20条相似文献,搜索用时 15 毫秒
1.
代码注释能够增强源代码的可读性、辅助软件开发过程,因此代码注释自动生成任务成为研究热点。然而现有工作大多只利用了源代码的序列信息或抽象语法树信息,未能充分捕捉代码语言特有的多种特征。为进一步利用源代码的多维度特征,提升注释生成的效果,构建基于多维度异质图结构的代码注释自动生成模型。利用异质图结构和图神经网络,将源代码的抽象语法树、控制流图、数据流图等进行融合并构建为具有多种节点和连边的异质表示图,以此表现代码的语义特征、序列特征、语法特征、结构特征等多维度特征。在真实数据集上的实验结果表明,该模型相较于Hybrid-DRL、NeuralCodeSum、SeqGNN等模型具有更好的效果,在BLEU-4、METEOR、ROUGE-L指标上分别最高提升1.6%、3.2%、3.1%,可获得更流畅、可读性更好的代码注释。  相似文献   

2.
代码注释能够提高程序代码的可读性,从而提升软件开发效率并降低成本。现有的代码注释生成方法将程序代码的序列表示或者抽象语法树表示输入到不同结构的编码器网络,无法融合程序代码不同抽象形式的结构特性,导致生成的注释可读性较差。构建一种结构感知的混合编码模型,同时考虑程序代码的序列表示和结构表示,通过序列编码层和图编码层分别捕获程序代码的序列信息和语法结构信息,并利用聚合编码过程将两类信息融合至解码器。设计一种结构感知的图注意力网络,通过将程序代码的语法结构的层次和类型信息嵌入图注意力网络的学习参数,有效提升了混合编码模型对程序代码的复杂语法结构的学习能力。实验结果表明,与SiT基准模型相比,混合编码模型在Python和Java数据集上的BLEU、ROUGE-L、METEOR得分分别提高了2.68%、1.47%、3.82%和2.51%、2.24%、3.55%,能生成更准确的代码注释。  相似文献   

3.
代码注释可以帮助开发人员快速理解代码,降低代码维护成本。为了保留代码的结构信息,针对经典的Seq2Seq模型将代码的结构信息压缩为序列,导致结构信息丢失的问题,提出使用Tree-LSTM编码器直接将代码转化成抽象语法树进行编码,使注释生成模型能有效获取代码的结构信息,提升注释生成效果。采用基于注意力机制的Tree2Seq模型实现代码注释生成任务,避免了编码器端将所有输入信息压缩为固定向量,导致部分信息丢失的情况。通过在Java和Python 2种编程语言的数据集上进行实验,使用3种机器翻译常用的自动评测指标进行评估验证,并选取一部分测试数据进行了人工评估。实验结果表明,基于注意力机制的Tree2Seq模型能为解码器提供更全面且丰富的语义结构信息,为后续实验分析和改进提供指导。  相似文献   

4.
徐少峰  潘文韬  熊赟  朱扬勇 《计算机工程》2020,46(2):304-308,314
在软件开发过程中,性能良好的代码注释工具能够提高开发效率并降低维护成本。部分研究者将代码注释自动生成看作将源代码翻译成自然语言注释的翻译任务,但仅考虑源代码的序列信息而忽略了代码内部的结构特性。为此,在常见端到端翻译模型的基础上,利用代码抽象语法树将源代码的结构信息嵌入到编码器解码器翻译模型中,提出一种基于结构感知的双编码器解码器模型,该模型综合考虑源代码的序列信息与代码内部的结构特性。在真实数据集上的实验结果表明,相比PBMT、Seq2seq模型,该模型的BLEU得分较高,且生成的注释更准确和易读。  相似文献   

5.
针对基于PHP语言开发的Web应用系统,提出了一种基于图遍历算法的服务端请求伪造漏洞检测和利用方法。通过构建抽象语法树,获取每个文件的数据流信息,进而利用数据流中的传递依赖关系构造全局的代码属性图,使用图遍历算法对生成的代码属性图进行污点分析,得到污点变量的代码传递依赖路径图,最后使用约束求解的方法对路径图中的经过函数信息进行漏洞检测并生成可利用的攻击向量。实验结果表明,这种检测方式相较于传统的静态审计方法能够很好地发现服务端请求伪造漏洞,并能够自动化生成可绕过的攻击向量。  相似文献   

6.
代码注释有助于提高程序的可读性和可理解性,而不断地创建和更新注释非常费时费力,这将影响对软件的理解、重用和维护.自动代码注释试图解决此类问题,其中代码的表示和文本生成是研究的核心问题.该文提出一种基于编码器-解码器结构的自动生成Java代码注释模型.方法将代码的顺序序列和代码结构作为单独的输入进行处理,允许模型学习Java方法的结构和语义;以一定的概率从模型生成的预测序列和真实词序列中采样作为下一步的输入,以提高模型的纠错恢复能力.通过与3种典型自动代码注释方法在11个Java项目上的对比实验,结果表明,提出的模型在BLEU得分上提升了16.1%,有助于提高自动代码注释的性能.  相似文献   

7.
良好的代码注释对于程序维护有着重要价值.但在实际开发过程中,开发人员经常会在更改代码后忽略更新相应的代码注释,导致更新后的代码和注释不一致,对软件可维护性造成影响.现有注释更新方法在进行注释更新时,通常仅将代码视为普通文本进行处理,忽视了代码结构信息.为此,本文提出了一种融合多模态信息的代码注释更新方法MMCUP(Multi-Modal Comment UPdating).MMCUP使用了旧代码注释、代码编辑序列和AST差异序列三种模态的信息来训练基于Transformer架构的模型,以对注释进行更新.实验结果表明,MMCUP在Accuracy、Recall@5等指标上相较于CUP和HatCUP等方法至少提高了5.8%和4.4%.  相似文献   

8.
针对以太坊中智能合约遭受重入漏洞攻击的问题,文章提出一种基于局部图匹配的智能合约重入漏洞检测方法。该方法首先将智能合约源代码转化为包含基本结构信息的抽象语法树,并根据重入漏洞的特点裁剪抽象语法树;然后从抽象语法树中提取更加丰富的控制流和数据流,进而生成包含语法和语义信息的局部抽象语义图数据。文章利用图匹配神经网络对局部抽象语义图进行模型训练和测试,使用开源智能合约漏洞样本数据集生成测试数据并对方案进行评估。实验结果表明,该方法能够有效检测智能合约中的重入漏洞。  相似文献   

9.
李阵  钮俊  王奎  辛园园 《计算机应用》2018,38(3):812-817
对开源代码进行准确搜索是实现代码复用的前提。在基于关键字搜索的研究中,目前只关注匹配方法签名。结合源代码注释对方法功能的语义描述,提出结合代码注释的关键字搜索方法。通过生成源代码抽象语法树,从中识别方法签名与各类型注释等组合代码特征;将代码特征与查询语句分别用向量表示,并计算向量间的余弦相似度,然后制定针对搜索结果多特征权重分配的评分机制。根据评分对搜索结果进行排序,得到与查询语句相关的结果序列。实验结果表明,多个代码特征在不同权重影响下可以提升源代码搜索准确度。  相似文献   

10.
函数自动命名技术旨在为输入的源代码自动生成目标函数名,增强程序代码的可读性以及加速软件开发进程,是软件工程领域中一项重要的研究任务.现有基于机器学习的技术主要是通过序列模型对源代码进行编码,进而自动生成函数名,但存在长程依赖问题和代码结构编码问题.为了更好的提取程序中的结构信息和语义信息,本文提出了一个基于图卷积(Graph Convolutional Network,GCN)的神经网络模型—TrGCN(a Transformer and GCN based automatic method naming).TrGCN利用了Transformer中的自注意力机制来缓解长程依赖问题,同时采用Character-word注意力机制提取代码的语义信息.TrGCN引入了一种基于图卷积的AST Encoder结构,丰富了AST节点特征向量的信息,可以很好地对源代码结构信息进行建模.在实证研究中,使用了3个不同规模的数据集来评估TrGCN的有效性,实验结果表明TrGCN比当前广泛使用的模型code2seq和Sequence-GNNs能更好的自动生成函数名,其中F1分数分别提高了平均5.2%、2.1%.  相似文献   

11.
近年来,随着不同编程语言代码自动转换工具的出现,跨语言的代码抄袭检测问题受到了越来越多的关注.现有跨语言代码抄袭检测主要包括传统的基于中间特征的检测方法和近年来出现的基于机器学习的检测方法,后者在检测模型训练完成之后具有更好的检测速度,是当前跨语言代码抄袭检测的研究热点.然而,现有的基于机器学习的跨语言抄袭检测方法大多将代码作为文本来处理,未考虑代码的结构特征.结合代码基于抽象语法树的结构特征,本文提出了一个基于伪孪生神经网络框架的跨语言抄袭检测工具CLPDetector.该工具将训练数据中的源代码对转换成对应的抽象语法树,基于抽象语法树生成代码的向量表示,然后将结合BiLSTM、CNN和Attention的深度神经网络嵌入到伪孪生网络架构中训练抄袭检测模型,从而实现了跨语言代码抄袭的检测.为了提高检测精度,首先,在训练检测模型前,利用基于抽象语法树的skip-gram算法对词向量进行了预训练,并基于程序依赖图删除了训练数据集代码中的冗余代码.其次,在代码抄袭检测阶段,提出了一个基于属性计数的过滤器,用以排除不可能抄袭的代码对,提高检测效率.实验中基于一个开源的数据集,以Java代码和...  相似文献   

12.
针对代码注释较少导致软件项目可维护性降低、理解代码语义困难等问题,提出一种基于NMT模型的双编码器框架自动生成代码注释的方法.在该框架中,首先提取不同的代码特征信息;然后分别采用序列编码器和图编码器对不同的代码特征编码,引入注意力机制调整编码器输出向量,再对双编码器的输出向量综合处理;最终利用解码器对综合向量解码获得注释序列.为了验证带有注意力机制的双编码器模型效果,本文构建自动生成代码注释算法框架.实验表明,双编码器模型与文中的序列编码器和树编码器模型算法相比,在生成代码注释方面的结果评估得分上表现较好.通过BLEU-1、ROUGE-L和F1测评指标得分对比,验证了本文算法的有效性.  相似文献   

13.
现在软件规模越来越庞大和复杂,脆弱性形式也更趋向多样化,传统的脆弱性检测方法存在人工参与度高、对未知脆弱性检测能力弱的缺点,已无法满足对多样化脆弱性的检测要求.为了提高对未知脆弱性的检测效果,大量机器学习方法被应用到软件脆弱性检测领域.由于现有方法在代码表征过程中存在着较高的语法和语义信息的损失,导致误报率和漏报率较高.针对这一问题,提出了一种基于代码属性图和Bi-GRU的软件脆弱性检测方法.该方法通过从函数的代码属性图中提取出抽象语法树序列、控制流图序列作为函数表征的表征方式,减少代码表征过程中的信息的损失,并通过选取Bi-GRU来构建特征提取模型,提高对脆弱性代码的特征提取能力.实验结果表明,与以抽象语法树为表征方式的方法相比,该方法最大可提高35%的精确率和22%的召回率,可改善面向多个软件源代码混合的真实数据集的脆弱性检测效果,有效降低误报率和漏报率.  相似文献   

14.
随着C++语言标准的不断演进,词法语法解析工具如JavaCC等对于很多扩充的新特性以及复杂的语法结构不能做到完全支持,这可能会导致抽象语法树生成错误且不完整;针对这一问题,提出一个针对抽象语法树生成错误的处理框架;首先,通过对JavaCC的扩充,实现一套可以解析C++语言的词法语法分析器,生成抽象语法树并记录报错行;其次,根据报错行寻找所在函数区间即不支持或不匹配的语法片段;最后,通过注释函数区间的方式来跳过不支持或不匹配的语法片段进行错误处理并迭代生成抽象语法树;实验结果表明,对抽象语法树生成进行错误处理后可以更全面的分析代码,抽象语法树完成率上升37.8%,分析行数提高3.9倍。  相似文献   

15.
二进制小片段代码指令序列较短,基本块逻辑调用图结构简单,有限语义信息影响代码相似性比较结果,为此提出一种融合知识表示学习的二进制代码小片段相似性比较模型(BSM)。分别提取小片段代码的函数知识和函数代码,利用注意力机制和双向长短记忆得到知识嵌入,使用序列学习模型或图神经网络得到函数嵌入,融合知识嵌入和函数嵌入作为小片段代码向量表示。实验结果表明,BSM模型在跨平台比较上优于其它对比模型,说明模型能提升小片段代码比较的准确度。  相似文献   

16.
传统的基于Token的克隆检测方法利用代码字符串的序列化特性,可以在大型代码仓中快速检测克隆.但是与基于抽象语法树(AST)、程序依赖图(PDG)的方法相比,由于缺少语法及语义信息,针对文本有较大差异的克隆代码检测困难.为此,提出一种赋予语义信息的Token克隆检测方法.首先,分析抽象语法树,使用AST路径抽象位于叶子节点的Token的语义信息;然后,在函数名和类型名角色的Token上建立低成本索引,达到快速并有效地筛选候选克隆片段的目的.最后,使用赋予语义信息的Token判定代码块之间的相似性.在公开的大规模数据集BigCloneBench实验结果表明,该方法在文本相似度较低的Moderately Type-3和Weakly Type-3/Type-4类型克隆上显著优于主流方法,包括NiCad、Deckard、CCAligner等,同时在大型代码仓上需要更少的检测时间.  相似文献   

17.
对代码进行分析研究具有很多的应用场景,例如代码抄袭检测、软件漏洞搜索等。随着人工智能的发展,神经网络技术被广泛应用于代码分析和研究。然而,现有的方法要么简单地将代码视为普通的自然语言处理,要么使用太过复杂的规则对代码进行采样,前者的处理方式容易造成代码关键信息的丢失,而后者会造成算法过于复杂,模型的训练需要花费较长的时间。Alon等提出了一种名为Code2vec的算法,该算法采用了一种简单且有效的代码表示方法,相比之前的代码分析方法有着显著的优势,但Code2vec算法仍存在一些局限性。因此,在其基础上提出了一种基于神经网络的代码嵌入方法,该方法的主要思想是将代码函数表示为代码的嵌入向量。首先将一个代码函数分解为一系列抽象语法树路径,然后通过神经网络去学习如何表示每一条路径,最后将所有路径聚合成一个嵌入向量来表示当前的代码函数。文中实现了一个基于该方法的原型系统,实验结果表明,相比Code2vec,所提算法的结构更加简单、训练速度更快。  相似文献   

18.
源代码注释生成旨在为源代码生成精确的自然语言注释,帮助开发者更好地理解和维护源代码.传统的研究方法利用信息检索技术来生成源代码摘要,从初始源代码选择相应的词或者改写相似代码段的摘要;最近的研究采用机器翻译的方法,选择编码器-解码器的神经网络模型生成代码段的摘要.现有的注释生成方法主要存在两个问题:一方面,基于神经网络的方法对于代码段中出现的高频词更加友好,但是往往会弱化低频词的处理;另一方面,编程语言是高度结构化的,所以不能简单地将源代码作为序列化文本处理,容易造成上下文结构信息丢失.因此,本文为了解决低频词问题提出了基于检索的神经机器翻译方法,使用训练集中检索到的相似代码段来增强神经网络模型;为了学习代码段的结构化语义信息,本文提出结构化引导的Transformer,该模型通过注意力机制将代码结构信息进行编码.经过实验,结果证明该模型在低频词和结构化语义的处理上对比当下前沿的代码注释生成的深度学习模型具有显著的优势.  相似文献   

19.
提出一个基于抽象语法树(Abstract Syntax Tree, AST)生成代码向量解决代码分类以及聚类任务的深度学习模型,该模型结合了卷积以及循环神经网络能够同时对AST的结构和语义信息进行提取,在代码分类任务上,分类的准确率与该领域最优的模型效果十分接近,速度却是其1.55倍。聚类任务上Jaccard系数(Jaccard Coefficient)、FMI(Fowlkes and Mallows Index)指数、ACC准确率分别达到74.4%、75.2%和83.6%,对比当下前沿的深度学习模型占有优势。  相似文献   

20.
针对基于语言模型的代码补全方法忽略源代码中结构信息和命名信息而导致补全准确率偏低的问题,提出一种基于多任务学习的代码补全方法(multi-task learning code completion, MTLCC)。MTLCC对源代码数据集进行数据清洗和预处理,通过抽象语法树(abstract syntax tree, AST)提取源代码中的结构信息和命名信息;构建基于Transformer的多任务学习网络,采用软参数共享学习方式分别对源代码的节点类型预测、节点值预测和语句预测进行训练;利用集束搜索对模型推理结果进行后期处理生成代码补全建议列表。实验结果表明,与Pointer network、LSTM+TransformerXL和CodeGPT中最好的模型相比,MTLCC在节点类型预测和节点值预测任务中的准确率分别提升了2.5%和1.7%、MRR分别提升了3.7%和2.4%,在语句预测任务中的ROUGE-L分数(L@4)提升了0.055。  相似文献   

设为首页 | 免责声明 | 关于勤云 | 加入收藏

Copyright©北京勤云科技发展有限公司  京ICP备09084417号