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 年之后,
                 基本上以基于深度学习的生成方法为主.
   198   199   200   201   202   203   204   205   206   207   208