Page 203 - 《软件学报》2021年第7期
P. 203
陈翔 等:代码注释自动生成方法综述 2121
篇与综述主题相关的论文获得软件工程领域权威会议的最佳论文奖,包括:Rodeghero 等人 [11] 在 ICSE 2014 上的
研究工作、McBurney 等人 [12] 在 ICPC 2014 上的研究工作、Hu 等人 [13] 在 ICPC 2018 上的研究工作、Liu 等
人 [14] 在 ASE 2018 上的研究工作和 Liu 等人 [15] 在 ASE 2019 上的研究工作.
Table 1 The statistics of paper according to publishing venues, notice only
listing the publishing venues with more than one paper
表 1 按照论文发表源进行统计,仅列出发表数量超过 1 次的发表源
发表源(简称) 发表源(全称) 类型 CCF 级别 累计发表数量
ASE International Conference on Automated Software Engineering 会议 A 10
ICSE International Conference on Software Engineering 会议 A 7
TSE IEEE Transactions on Software Engineering 期刊 A 4
ACL Annual Meeting of the Association for Computational Linguistics 会议 A 2
IJCAI International Joint Conference on Artificial Intelligence 会议 A 2
WWW the Web Conference 会议 A 2
ICPC International Conference on Program Comprehension 会议 B 12
SANER International Conference on Software Analysis, Evolution, and Reengineering 会议 B 4
SCAM International Working Conference on Source Code Analysis & Manipulation 会议 C 2
目前针对代码注释自动生成问题的综述并不多,Nazar 等人 [16] 在 2016 年对软件制品摘要生成方法进行了
综述,他们考虑的软件制品包括缺陷报告、代码、邮件清单和开发人员间的讨论等.而本文仅关注代码摘要的
自动生成方法.除此之外,由于 Nazar 等人的综述论文发表时间较早,因此他们的综述并未对基于深度学习的生
成方法进行总结.Song 等人 [17] 在 2019 年对代码注释生成问题进行了系统综述,但他们的综述仅关注到 2018 年
之前发表的论文.而在 2018 年~2020 年之间,该领域又新发表了 24 篇论文,尤其是在基于深度学习的生成方法
上取得了很多研究成果.除此之外,我们的综述论文在方法的分类、语料库和评测指标上进行了更为深入的分
析和点评.
本文第 1 节给出综述的整体研究框架.第 2 节~第 4 节分别介绍基于模板的生成方法、基于信息检索的生
成方法和基于深度学习的生成方法的相关研究工作,并进行点评.第 5 节总结常用的代码注释语料库.第 6 节将
常用的代码注释质量评估方法分为两类,并分别加以分析.最后对该领域未来值得关注的研究方向进行展望.
1 研究框架
本文的整体研究框架如图 2 所示.首先将已有的注释自动生成方法分为 3 类:基于模板的生成方法(见第 2
节)、基于信息检索的生成方法(见第 3 节)和基于深度学习的生成方法(见第 4 节).同时深入分析已有的代码注
释语料库(见第 5 节)和常见的代码注释质量评估方法(见第 6 节).
从图 2 可以看出,该问题的主要输入是需要生成注释的代码,为了进一步提高代码注释的质量,研究人员会
额外分析项目所在的版本控制系统、开发人员间的电子邮件往来、Stack Overflow 和 Github 的众包协作平台
[7]
等.该问题的输出是代码注释.Haiduc 等人 根据方法的不同,将生成的代码注释分为两类:抽取式代码注释和生
成式代码注释(或理解型代码注释).不难看出,前两种方法(即基于模板的方法和基于信息检索的方法)生成的注
释可以归为抽取式代码注释,而后一种方法(即基于深度学习的方法)生成的注释则可以归为生成式代码注释.
其中抽取式注释主要从代码中提取关键词来尝试生成注释,在通顺度上要好于生成式注释.而生成式注释则主
要基于深度学习的序列到序列模型.
我们进一步对 3 种不同类型方法的相关论文的所占比例进行了统计,具体如图 3 所示.其中,26%的研究工
作集中于基于模板的方法,24%的研究工作集中于基于信息检索的方法,以及 50%的研究工作集中于基于深度
学习的方法.从时间维度上看,在 2016 年之前,主要以基于模板和信息检索的生成方法为主.而在 2016 年之后,
基本上以基于深度学习的生成方法为主.