Page 201 - 《软件学报》2021年第7期
P. 201
陈翔 等:代码注释自动生成方法综述 2119
4 (School of Computer, Beijing Information Science and Technology University, Beijing 100101, China)
5 (College of Intelligence and Computing, Tianjin University, Tianjin 300350, China)
Abstract: During software development and maintenance, code comments often have some problems, such as missing, insufficient, or
mismatching with code content. Writing high-quality code comments takes time and effort for developers, and the quality can not be
guaranteed, therefore, it is urgent for researchers to design effective automatic code comment generation methods. The automatic code
comment generation issue is an active research topic in the program comprehension domain. This study conducts a systematic review of
this research topic. The existing methods are divided into three categories: Template-based generation methods, information retrieval-
based methods, and deep learning-based methods. Related studies are analyzed and summarizedfor each category. Then, the corpora and
comment quality evaluation methods that are often used in previous studiesare analyzed, which can facilitate the experimental study for
future studies. Finally, the potential research directions in the future aresummarized and discussed.
Key words: program comprehension; code comment generation; template; information retrieval; deep learning; machine translation
随着软件项目的复杂度和软件产品迭代频率的不断提升,程序理解在整个软件开发环节的重要性也日益
[1]
提高.最近的一项研究工作 表明:开发人员平均需要花费 59%的时间在程序理解上.无疑,高质量的代码注释是
[2]
提高开发人员程序理解效率的关键 .但开发人员由于项目开发预算有限、编程经验不足或者对代码注释的重
视程度不够,经常会出现代码注释的缺失、不足或者与代码实际内容不匹配等问题.虽然借助一些工具(例如
[3]
JavaDoc 和 Doxygen(http://www.doxygen.org))可以辅助生成代码注释模板,但仍然不能自动生成与代码实现
功能和目的相关的描述.如果由开发人员手工输入代码注释则费时费力,并且注释的质量很难得到保障.除此之
[4]
外,已有的代码注释也需要随着相关代码的持续演化而保持同步更新 .因此亟需研究人员设计出有效的代码
注释自动生成(code comment generation)方法(由于生成的注释通常较短(通常使用一句话来概括代码的目的和
主要功能),因此该问题在有的文献中又被称为代码摘要自动生成(automatic code summarization)问题).
[5]
代码注释自动生成是当前程序理解领域的一个研究热点 .代码注释可以描述相关代码的实现功能和实
现目的.高质量的代码注释有助于提高代码的可读性和可理解性,因此在软件开发和维护过程中具有重要的作
用.代码注释自动生成问题可以认为是将基于编程语言实现的代码自动翻译成基于自然语言描述的文本,同时
希望自动生成的注释不仅可以描述代码实现的功能,而且还可以给出代码的实现目的或开发人员的设计意图
等.例如:开发人员通过阅读如下两段注释“uploads log files to the backup server”和“formats decimal values as
scientific notation”,就可以直接对相关代码的目的产生清晰的认识,而不需要再深入地去理解代码的具体实现
细节.
代码注释的自动生成在很多软件工程相关任务中都能起到重要的作用.例如:当开发人员新加入某个项目
的开发团队,或者需要评估项目内的某个模块是否需要使用新的类库时,都需要通过阅读和理解代码尽快地熟
悉大规模软件项目内的某个程序模块.开发人员在审查某个程序模块时,需要尽快了解该模块的核心代码变更
情况.在软件开发和维护过程中,开发人员需要尽快定位到自己感兴趣的代码段上.不难看出,高质量的代码注
释有助于协助开发人员提高上述任务的完成效率.
但代码注释自动生成问题在研究时也面临诸多严峻挑战:首先,高质量的代码注释离不开对代码结构和语
义的高质量分析,尤其是代码语义分析在当前软件工程领域仍然是一个开放问题.其次,有时候如果仅分析代码
本身,并不足以生成高质量的代码注释.因此还需要研究如何有效地利用项目缺陷跟踪系统和版本控制系统内
的领域知识以及来自 Stack Overflow 和 Github 的众包知识.最后,当前对生成的代码注释进行质量评估时,主要
采用手工评估方法和自动评估方法.但使用手工评估方法打分,受限于专家对编程语言和领域知识的熟悉程度,
容易存在主观性较强的问题.而自动评估方法一般使用来自机器翻译研究领域的评测指标,虽然可以自动给出
[6]
生成注释的质量评分,但代码注释自动生成问题与机器翻译问题相比,仍存在一定的差异性 .
代码注释自动生成的研究工作最早可以追溯到 Haiduc 等人 [7,8] 的研究工作,他们首次借助信息检索技术,
尝试为代码自动生成文本摘要.在该问题的早期研究阶段,研究人员更多集中于基于模板的生成方法和基于信
息检索的生成方法,借助启发式规则从代码内提取关键信息,并合成基于自然语言描述的注释.随着深度学习技
术的迅猛发展和更多代码注释语料库的逐步共享,基于深度学习的方法有效提升了自动生成的代码注释的质