Page 213 - 《软件学报》2021年第7期
P. 213
陈翔 等:代码注释自动生成方法综述 2131
Table 4 Comparison of deep learning-based generation methods (Continued)
表 4 基于深度学习的生成方法的对比(续)
相关文献 模块粒度 编程语言 方法类型 主要特征
Loyola 等人 [62] 代码变更 Python、C++、Java、 经典编码器-解码器 基于 LSTM
JavaScript
Jiang 等人 [46,63] 代码变更 Java 经典编码器-解码器 基于 RNN
Xu 等人 [64] 代码变更 Java 经典编码器-解码器 抽取代码结构和代码语义信息,使用复制
机制缓解 OOV 问题
Liu 等人 [66] 代码变更 Java 经典编码器-解码器 基于 AST 对代码变更进行编码,并提出
一个混合排序模块
Liu 等人 [15] Pull Request Java 经典编码器-解码器 借助指针生成网络缓解 OOV 问题
Shido 等人 [67] 方法 Java 其他类型学习方法 使用扩展的 Tree-LSTM
LeClair 等人 [68] 方法 Java 其他类型学习方法 利用了图神经网络
Liu 等人 [69] 函数 C/C++ 其他类型学习方法 基于联合代码属性图和基于检索增强
机制的图神经网络
Wan 等人 [70,71] 代码段 Python 其他类型学习方法 利用了强化学习
Chen 等人 [72] 代码段 C#、SQL 查询 其他类型学习方法 通过构建两个 VAEs,同时考虑了注释
生成和代码检索
Ye 等人 [73] 代码段 Python、SQL 查询 其他类型学习方法 基于对偶学习,同时考虑了注释生成和
代码检索
Wang 等人 [74] 代码段 Python 其他类型学习方法 借助演员-评论者网络,同时考虑了注释
生成和代码检索
Wei 等人 [75] 代码段、方法 Python、Java 其他类型学习方法 基于对偶学习,同时考虑了注释生成和
代码生成问题
Hu 等人 [76] 方法 Java 其他信息来源 额外考虑了 API 序列信息
Zhang 等人 [77] 代码段、方法 Python、Java 其他信息来源 利用与目标代码语法和语义相似的代码段
Liu 等人 [78] 方法 Java 其他信息来源 考虑了代码的调用信息
Zhou 等人 [79] 方法 Java 其他信息来源 考虑了方法的上下文信息,综合使用了
程序分析和预定义的模板
Haque 等人 [80] 方法 Java 其他信息来源 考虑了文件的上下文信息
5 代码注释语料库分析
早期的研究基本上都是从 Github 里选择流行的开源项目,并借助用户研究(human study)方式对所提方法
的有效性进行评估,因此实验规模较小,并以案例分析为主.随后,研究人员逐渐共享出他们整理的语料库,并吸
引了更多研究人员针对该研究问题展开深入的研究.不难看出,这些语料库是当前基于深度学习的方法能够生
成高质量代码注释的一个重要前提.本文对目前代码注释自动生成研究已共享的主流语料库进行了总结,具体
见表 5,包括相关文献、编程语言、模块粒度、共享网址和累计使用次数.接着,我们将简要介绍表 4 中的部分
经典语料库.
Table 5 Statistics for shared code comment corpus
表 5 目前已经共享的代码注释语料库
共享语料库的文献 编程语言 模块粒度 共享网址 累计次数
Hu 等人 [13] Java 方法 https://github.com/huxingfree/DeepCom 8
Barone 等人 [81] Python 代码段 https://github.com/rsennrich/nematus 6
Jiang 等人 [46] Java 代码变更 https://sjiang1.github.io/commitgen/ 3
Iyer 等人 [10] C#、SQL 查询 代码段 https://github.com/sriniiyer/codenn 2
LeClair 等人 [82] Java 方法 http://leclair.tech/data/funcom 2
Allamanis 等人 [54] Java 方法 https://groups.inf.ed.ac.uk/cup/codeattention 1
Hu 等人 [76] Java 方法 https://github.com/xinghu/TL-CodeSum 1
LeClair 等人 [60] Java 方法 https://s3.us-east-2.amazonaws.com/icse2018/index.html 1
Yao 等人 [83] SQL、Python 代码段 https://github.com/LittleYUYU/StackOverflow-Question-Code-Dataset 1
Iyer 等人 [10] 首次基于 Stack Overflow 搜集了语料库并进行了共享.他们使用 C#标签来过滤与 C#相关的帖
子,使用 sql、database 和 oracle 标签来过滤与 SQL 相关的帖子.在 Stack Overflow 中,每个帖子均包含标题、具
体的问题和相关的回答(有时会将其中一个回答标记为已接受的回答).他们只提取了在已接受回答中仅含有一