在软件的开发和维护过程中,与代码对应的注释经常存在缺失、不足或者与代码实际内容不匹配等问题,但手工编写代码注释对开发人员来说费时费力,且注释质量难以保证,因此亟需研究人员提出有效的代码注释自动生成方法.代码注释自动生成问题是当前程序理解研究领域的一个研究热点,论文对该问题进行了系统综述.主要将已有的自动生成方法细分为三类:基于模板的方法、基于信息检索的方法和基于深度学习的方法.论文依次对每一类方法的已有研究成果进行了系统的梳理、总结和点评.随后分析了已有的实证研究中经常使用的语料库和主要的注释质量评估方法,以利于针对该问题的后续研究可以进行合理的实验设计.最后总结全文,并对未来值得关注的研究方向进行了展望.
http://www.jos.org.cn/jos/ch/reader/view_abstract.aspx?file_no=6258&flag=1
随着软件项目的复杂度和软件产品迭代频率的不断提升,程序理解在整个软件开发环节的重要性也日益 提高.最近的一项研究工作[1]表明:开发人员平均需要花费 59%的时间在程序理解上.无疑高质量的代码注释是 提高开发人员程序理解效率的关键[2].但开发人员由于项目开发预算有限、编程经验不足或者对代码注释的重 视程度不够,经常会造成代码注释的缺失、不足或者与代码实际内容不匹配等问题.虽然借助一些工具(例如 JavaDoc[3]和 Doxygen)可以辅助生成代码注释模板,但仍然不能自动生成与代码实现功能和目的相关的描述. 如果由开发人员手工输入代码注释则费时费力,并且注释的质量很难得到保障.除此之外,已有的代码注释也需 要随着相关代码的持续演化而保持同步更新[4].因此亟需研究人员设计出有效的代码注释自动生成(code comment generation)方法.
代码注释自动生成是当前程序理解领域的一个研究热点[5].代码注释可以描述相关代码的实现功能和实 现目的.高质量的代码注释有助于提高代码的可读性和可理解性,因此在软件开发和维护过程中具有重要的作 用.代码注释自动生成问题可以认为是将基于编程语言实现的代码自动翻译成基于自然语言描述的文本,同时 希望自动生成的注释不仅可以描述代码实现的功能,而且还可以给出代码的实现目的或开发人员的设计意图 等.例如:开发人员通过阅读如下两段注释“uploads log files to the backup server”和“formats decimal values as scientific notation”,就可以直接对相关代码的目的产生清晰的认识,而不需要再深入的去理解代码的具体实现 细节.
代码注释的自动生成在很多软件工程相关任务中都能起到重要的作用.例如:当开发人员新加入某个项目 的开发团队,或者需要评估项目内的某个模块是否需要使用新的类库时,需要通过阅读和理解代码,来尽快熟悉 大规模软件项目内的某个程序模块.开发人员在审查某个程序模块的时候,需要尽快了解该模块的核心代码变 更.在软件的开发和维护过程中,开发人员需要尽快定位到自己感兴趣的代码段上.不难看出,高质量的代码注 释有助于协助开发人员提高上述任务的完成效率.
但代码注释自动生成问题在研究时也面临诸多严峻挑战:首先高质量的代码注释离不开对代码结构和语 义的高质量分析,尤其是代码语义分析在当前软件工程领域仍然是一个开放问题.其次有时候如果仅分析代码 本身,并不足以生成高质量的代码注释.因此还需要研究如何有效利用项目缺陷跟踪系统和版本控制系统内的 领域知识和来在 Stack Overflow 和 Github 的众包知识.最后当前对生成的代码注释进行质量评估时,主要采用 手工评估方法和自动评估方法.但使用手工评估方法打分时,受限于专家对编程语言和领域知识的熟悉程度,容 易存在主观性较强的问题.而自动评估方法一般使用来自机器翻译研究领域的评测指标,虽然可以自动给出生 成注释的质量评分,但代码注释自动生成问题与机器翻译问题相比,仍存在一定的差异性[6].
论文剩余内容的结构安排如下:第 1 节给出了综述的整体研究框架,随后第 2 节到第 4 节分别介绍基于模 板的生成方法、基于信息检索的生成方法和基于深度学习的生成方法的相关研究工作,并进行了点评.第 5 节 总结了常用的代码注释语料库.第 6 节将常用的代码注释质量评估方法分为两类,并分别进行了分析.最后对该 领域未来值的关注的研究方向进行了展望。
专知便捷查看
便捷下载,请关注专知公众号(点击上方蓝色专知关注)
后台回复“注释生成” 可以获取《代码注释自动生成方法综述》专知下载链接索引