共查询到20条相似文献,搜索用时 171 毫秒
1.
代码注释作为软件中的重要组成部分,在软件维护、复用等领域中发挥着重要作用。代码注释自动生成技术旨在减轻人工编写注释的工作量,从而提高软件开发效率。现有的注释自动生成方法分为基于规则、文本摘要、数据驱动、主题模型、深度学习等层次。综述了代码注释自动生成的相关概念,对比总结各类代码注释自动生成方法,对近年来代码注释自动生成相关应用进行了梳理和总结,最后对注释自动生成所面临的挑战进行了分析,展望了该领域未来的研究。 相似文献
2.
基于卷积神经网络的代码注释自动生成方法 总被引:1,自引:0,他引:1
自动化代码注释生成技术通过分析源代码的语义信息生成对应的自然语言描述文本,可以帮助开发人员更好地理解程序,降低软件维护的时间成本.大部分已有技术是基于递归神经网络(Recurrent Neural Network,RNN)的编码器和解码器神经网络实现的,但这种方法存在长期依赖问题,即在分析距离较远的代码块时,生成的注释信息的准确性不高.为此,文中提出了一种基于卷积神经网络(Convolutional Neural Network,CNN)的自动化代码注释生成方法来缓解长期依赖问题,以生成更准确的注释信息.具体而言,通过构造基于源代码的CNN和基于AST的CNN来捕获源代码的语义信息.实验结果表明,与DeepCom和Hybrid-DeepCom这两种最新的方法相比,在常用的BLEU和METEOR两种评测指标下,所提方法能更好地生成代码注释,且执行时间更短. 相似文献
3.
代码注释有助于提高程序的可读性和可理解性,而不断地创建和更新注释非常费时费力,这将影响对软件的理解、重用和维护.自动代码注释试图解决此类问题,其中代码的表示和文本生成是研究的核心问题.该文提出一种基于编码器-解码器结构的自动生成Java代码注释模型.方法将代码的顺序序列和代码结构作为单独的输入进行处理,允许模型学习Java方法的结构和语义;以一定的概率从模型生成的预测序列和真实词序列中采样作为下一步的输入,以提高模型的纠错恢复能力.通过与3种典型自动代码注释方法在11个Java项目上的对比实验,结果表明,提出的模型在BLEU得分上提升了16.1%,有助于提高自动代码注释的性能. 相似文献
4.
5.
软件代码注释生成是软件工程领域近期研究的一个重要问题.目前很多研究工作已经在包含大量<代码片段,注释语句>对的开源数据集上取得了较好效果.但在企业应用中,待注释的代码往往是一个软件项目库,其必须首先决策在哪些代码行上生成注释更好,而且待注释的代码片段大小、粒度各不相同,需要研究提出一种注释决策和生成一体化的、抗噪音的代码注释生成方法.针对这个问题,提出一个面向软件项目的代码自动注释生成方法CoComment.所提方法能够自动抽取软件项目文档中的领域基本概念,并基于代码解析与文本匹配进行概念传播和扩展.在此基础上,通过定位概念相关的代码行/段进行自动注释决策,最终利用模板融合概念和上下文生成具有高可读性的自然语言代码注释.目前CoComment已经在3个企业软件项目、超过4.6万条人工代码注释数据上进行了对比试验.结果表明,所提方法不仅能够有效地进行代码注释决策,其注释内容与现有方法相比也能够提供更多有益于理解代码的信息,从而为软件项目代码的注释决策和注释生成问题提供了一种一体化的解决方案. 相似文献
6.
代码注释可以帮助开发人员理解代码的功能和实现方法。代码注释生成模型可以自动识别代码中的关键信息,并生成相关注释,提高代码的可读性和可维护性。现有的代码注释生成模型通常只使用抽象语法树结构信息来表示代码,导致模型生成注释质量不高。提出一种融合多结构信息的代码注释生成模型,该模型在代码抽象语法树的基础上,增加了数据流图结构信息来表示代码。模型使用Transformer的编码器对抽象语法树序列进行编码,捕获代码全局信息。使用图神经网络对数据流图进行特征提取,提供变量之间的计算依赖关系等信息。然后使用跨模态注意力机制融合抽象语法树和数据流2种特征,经过Transformer的解码器生成相应的注释。实验结果表明,与6种主流模型相比,所提出的模型在Java和Python数据集上的BLEU、METEOR和ROUGE-L指标得分均有提高,生成的注释也具有良好的可读性。 相似文献
7.
Bash是Linux默认的shell命令语言.它在Linux系统的开发和维护中起到重要作用.对不熟悉Bash语言的开发人员来说,理解Bash代码的目的和功能具有一定的挑战性.针对Bash代码注释自动生成问题提出了一种基于双重信息检索的方法 ExplainBash.该方法基于语义相似度和词法相似度进行双重检索,从而生成高质量代码注释.其中,语义相似度基于CodeBERT和BERT-whitening操作训练出代码语义表示,并基于欧式距离来实现;词法相似度基于代码词元构成的集合,并基于编辑距离来实现.以NL2Bash研究中共享的语料库为基础,进一步合并NLC2CMD竞赛共享的数据以构造高质量语料库.随后,选择了来自代码注释自动生成领域的9种基准方法,这些基准方法覆盖了基于信息检索的方法和基于深度学习的方法.实证研究和人本研究的结果验证了ExplainBash方法的有效性.然后设计了消融实验,对ExplainBash方法内设定(例如检索策略、BERT-whitening操作等)的合理性进行了分析.最后,基于所提方法开发出一个浏览器插件,以方便用户对Bash代码的理解. 相似文献
8.
针对大多数软件代码注释数量少、质量低的问题,提出了一种自动生成代码注释的方法。利用Nicad检测出克隆代码,提取出这些代码以及相应的注释,对代码和注释分别进行精简优化,将注释与代码匹配映射,为代码自动生成注释。对5款软件中的代码注释进行手动验证并评估注释结果,实验结果发现28%的代码注释是良好的,同时将注释报告给5位专家,专家评估结果为两款软件的代码注释为良好。实验结果及用户调研表明,该方法对于自动生成代码注释是可行、有效的。 相似文献
9.
赵钢 《自动化技术与应用》2022,41(1):57-60
本文基于计算机挖掘软件源代码注释数量与质量偏低的问题,设计了代码注释自动生成方法.同时,对本文设计方法与Clocom法进行了实验对比分析,结果表明,相比Clocom法,本文方法所检测出的克隆代码类型更多,产量明显较高;自动生成的代码注释质量都明显较高,代码注释质量较好,总之,本文设计方法下计算机挖掘软件自动生成的代码注... 相似文献
10.
代码注释可以帮助开发人员快速理解代码,降低代码维护成本。为了保留代码的结构信息,针对经典的Seq2Seq模型将代码的结构信息压缩为序列,导致结构信息丢失的问题,提出使用Tree-LSTM编码器直接将代码转化成抽象语法树进行编码,使注释生成模型能有效获取代码的结构信息,提升注释生成效果。采用基于注意力机制的Tree2Seq模型实现代码注释生成任务,避免了编码器端将所有输入信息压缩为固定向量,导致部分信息丢失的情况。通过在Java和Python 2种编程语言的数据集上进行实验,使用3种机器翻译常用的自动评测指标进行评估验证,并选取一部分测试数据进行了人工评估。实验结果表明,基于注意力机制的Tree2Seq模型能为解码器提供更全面且丰富的语义结构信息,为后续实验分析和改进提供指导。 相似文献
11.
针对中文自动摘要准确率不高的问题,在含有注意力机制的序列到序列(sequence-to-sequence,seq2seq)基础模型的解码器中融合了复制机制和input-feeding方法,提出了准确率更高的中文自动摘要模型。首先,该模型使用指针网络将出现在源序列中的OOV(out-of-vocabulary)词扩展到固定词典,以实现从源序列复制OOV词到生成序列中;其次,input-feeding方法用于跟踪已生成序列的注意力决定信息以提升模型输出准确率。在NLPCC2018数据集上的实验结果表明,与基础模型相比,所提出模型获得了更高的ROUGE得分,验证了该方法的可行性。 相似文献
12.
针对机器阅读理解任务中的答案问题获取提出一种序列生成模型SGN,首先,SGN在问题矩阵空间获取问题与文章的匹配表示,并参照潜在的问题信息生成当前节点的词向量;然后使用一个选择门结构从文章或者字典中选择当前词汇,并且自发学习和归纳OOV(out-of-vocabulary)单词,解决语义表述不准确的问题;最后使用改进的覆盖机制消除生成序列中的冗余问题,从而提高可读性。实验通过人工数据集SQuAD进行验证,其结果表明,在阅读理解任务上SGN生成的目标序列与基准模型seq2seq相比可读性更加优异,并且与原文语义更贴近。 相似文献
13.
模型可以生成符合用户偏好的摘要.之前的摘要模型侧重于单独控制某个属性,而不是多个属性的组合.传统的Seq2Seq多属性可控文本摘要模型在满足多个控制属性时,存在无法整合所有控制属性、无法准确再现文本中关键信息和无法处理单词表外单词等问题.为此,本文提出了一种基于扩展Transformer和指针生成网络(pointer generator network, PGN)的模型.模型中的扩展Transformer将Transformer单编码器-单解码器的模型形式扩展成具有双重文本语义信息提取的双编码器和单个可融合指导信号特征的解码器形式.然后利用指针生成网络模型选择从源文本中复制单词或利用词汇表生成新的摘要信息,以解决摘要任务中常出现的OOV (out of vocabulary)问题.此外,为高效完成位置信息编码,模型在注意力层中使用相对位置表示来引入文本的序列信息.模型可以用于控制摘要的许多重要属性,包括长度、主题和具体性等.通过在公开数据集MACSum上的实验表明,相较以往方法,本文提出的模型在确保摘要质量的同时,更加符合用户给定的属性要求. 相似文献
14.
基于注意力机制的序列到序列模型在生成式摘要方法中得到广泛应用,并取得较好的表现。但现有模型方法生成的摘要普遍存在语义无关、句内重复和未登录词等问题。为了解决这些问题,在典型基于注意力机制的序列到序列模型基础上,提出了结合双注意力和指针覆盖机制的生成式文本摘要方法DAPC(Dual Attention and Pointer-Coverage based model)模型。组合局部注意力和卷积神经网络,提取输入文本的更高层次的语言特征;引入指针-生成网络来解决未登录词问题;使用覆盖机制解决模型生成摘要句内重复的问题。实验结果表明,模型在CNN/Daily Mail数据集中有较好的表现。 相似文献
15.
针对传统Seq2Seq序列模型在文本摘要任务中无法准确地提取到文本中的关键信息、无法处理单词表之外的单词等问题,本文提出一种基于Fastformer的指针生成网络(pointer generator network, PGN)模型,且该模型结合了抽取式和生成式两种文本摘要方法.模型首先利用Fastformer模型高效的获取具有上下文信息的单词嵌入向量,然后利用指针生成网络模型选择从源文本中复制单词或利用词汇表来生成新的摘要信息,以解决文本摘要任务中常出现的OOV(out of vocabulary)问题,同时模型使用覆盖机制来追踪过去时间步的注意力分布,动态的调整单词的重要性,解决了重复词问题,最后,在解码阶段引入了Beam Search优化算法,使得解码器能够获得更加准确的摘要结果.实验在百度AI Studio中汽车大师所提供的汽车诊断对话数据集中进行,结果表明本文提出的FastformerPGN模型在中文文本摘要任务中达到的效果要优于基准模型,具有更好的效果. 相似文献
16.
针对生成式文本摘要应用场景,提出了以Transformer为基础的摘要模型,并在Transformer模型中加入了指针生成(Pointer Generator)网络和覆盖损失(Coverage Loss)进行优化。首先,提出了基于Transformer模型作为基础结构的方法,利用其注意力机制更好地捕捉上下文的语意信息。然后,在模型的损失函数中引入Coverage Loss来惩罚不断出现的重复的词的分布和覆盖范围,从而解决Transformer模型中的注意力机制在生成式任务中出现不断生成同一个词的问题。最后,在模型中加入了Pointer Generator网络,从而允许模型从源文本中复制词用作生成词来解决词表无法覆盖(OOV)的问题。探索了改进后的模型是否减少了不准确的表达以及重复出现相同词的现象是否得以解决。该模型相较于原始的Transformer模型在ROUGE-1评测函数上得分提升了1.98个百分点、ROUGE-2评测函数上得分提升0.95个百分点,在ROUGE-L评测函数上得分提升了2.27个百分点,并提升了摘要结果的可读性及准确性。实验结果表明,Transformer在加入Coverage Loss和Pointer Generator网络后可应用于生成式文本摘要领域。 相似文献
17.
代码注释是辅助编程人员理解源代码的有效手段之一.高质量的注释决策不仅能覆盖软件系统中的核心代码片段,还能避免产生多余的代码注释.然而,在实际开发中,编程人员往往缺乏统一的注释规范,大部分的注释决策都取决于个人经验以及领域知识.对于新手程序员来说,注释决策显然成为了一项重要而艰巨的任务.为了减少编程人员投入过多的精力在注释决策上,文章从大量的代码注释实例中学习出一种通用的注释决策规范,并提出了一种新颖的CommentAdviser方法用以辅助编程人员在代码开发过程中做出恰当的注释决策.由于注释决策与代码本身的上下文信息密切相关,因此,从当前代码行的上下文代码中提取代码结构特征以及代码语义特征作为支持注释决策的主要依据.然后,利用机器学习算法判定当前代码行是否为可能的注释点.在GitHub中的10个大型开源软件的数据集上评估了我们提出的方法,实验结果以及用户调研表明代码注释决策支持方法CommentAdviser的可行性和有效性. 相似文献
18.
代码摘要(code summary)是对一段源代码简短的自然语言描述,代码自动摘要(code summarization)技术通过自动化地生成代码摘要辅助开发者更好地理解程序代码,该技术在许多软件开发活动中都具有重要的应用价值.代码自动摘要同时结合了机器翻译和文本摘要2个任务,如何更好地对代码建模以及如何更好地筛选代码中的关键信息是代码摘要所面临的主要挑战.受人类写摘要时的习惯和相关研究的启发,提出了一种基于关键词的代码自动摘要方法(keyword-based source code summarization, KBCoS).该方法将函数签名和API(application programming interface)调用视为关键词,并利用关键词序列来优化解码器注意力机制中的权重分布,使模型在生成摘要时更集中地关注代码中的重要信息.此外,为克服代码符号词汇表过大的问题,提出了符号部分拆分算法,即当符号不在词表中时,依据常用命名规则将符号拆成子符号的序列.该算法简单有效,能很好地平衡代码符号序列长度和未登录词数目之间的矛盾.选用了带有注意力机制的序列到序列模型作为基准模型,并在公开的Java代码摘要数据集上进行了评估.实验表明,基于关键词的注意力机制和部分拆分算法在BLEU-4,METEOR,ROUGE-L这3个评测指标上均能提升基准模型的表现.同时,在另一个Python数据集上也取得了一致的实验结果.最后,将KBCoS与现有模型相结合,在Java数据集上取得了当前最好的结果,该结果表明KBCoS也能改进现有的其他模型.评测结果和注意力权重的热力图都表明了KBCoS的有效性. 相似文献
19.
在如今的软件开发中, 开源软件的使用越来越普遍, 但是对大型开源软件的理解和维护仍然是一项复杂的工作. 开源软件通常缺乏完善的文档和注释, 想要完整的理解开源系统难度较大, 研究界产生了一种通过分析大型开源软件的源代码, 进而深入理解系统, 发现和修复系统漏洞的软件分析型任务. 源代码分析注释是软件分析型任务的一项重要产出, 它是一种以注释形式存在的细粒度代码分析报告, 数量庞大, 难以快速做出质量评价. 在传统的软件质量评价中, 对注释的评价通常局限于覆盖度和文本长度, 不能满足源代码分析注释质量评价的要求. 为了更好的评价源代码分析注释的质量, 本文结合现有的对代码注释质量评价的研究以及信息质量领域的评价方法, 提出了一种综合考虑客观质量属性和主观质量属性的质量评价框架. 结合实际的项目数据分析, 本文的方法可以更有效的检测出注释中的冗余以及无关内容, 发现相关质量问题, 从而对源代码分析注释进行更全面的质量评价. 相似文献
20.
Source code comments are a valuable instrument to preserve design decisions and to communicate the intent of the code to programmers
and maintainers. Nevertheless, commenting source code and keeping comments up-to-date is often neglected for reasons of time
or programmers obliviousness. In this paper, we investigate the question whether developers comment their code and to what
extent they add comments or adapt them when they evolve the code. We present an approach to associate comments with source
code entities to track their co-evolution over multiple versions. A set of heuristics are used to decide whether a comment
is associated with its preceding or its succeeding source code entity. We analyzed the co-evolution of code and comments in
eight different open source and closed source software systems. We found with statistical significance that (1) the relative
amount of comments and source code grows at about the same rate; (2) the type of a source code entity, such as a method declaration
or an if-statement, has a significant influence on whether or not it gets commented; (3) in six out of the eight systems,
code and comments co-evolve in 90% of the cases; and (4) surprisingly, API changes and comments do not co-evolve but they
are re-documented in a later revision. As a result, our approach enables a quantitative assessment of the commenting process
in a software system. We can, therefore, leverage the results to provide feedback during development to increase the awareness
of when to add comments or when to adapt comments because of source code changes. 相似文献