
1 引 言
在软件工程领域软件人员面对数目众多的大规模软件和复杂系统需要快速、准确地读懂代码,高效地完成软
件变更和维护等任务.源代码摘要(sourcecodesummary)可以帮助开发和维护人员更快地读懂源代码,更好地理
解代码背后的设计思想和代码的行为.因此,代码摘要可以大大地节省开发人员和维护人员的宝贵时间,提高工作
效率
[1]
.鉴于此,源代码的摘要可以提高程序的可读性和可理解性,在整个软件生命周期中起着非常重要的作用.
但是,由于手工编写摘要既费时又费力,所以有许多研究
[2−8]
试图利用计算机自动地为源代码生成摘要.为了便于
简化描述,以下把自动生成源代码摘要的技术简称为“自动代码摘要”.从2010年至今,自动代码摘要研究逐渐兴
起,并成为软件工程和人工智能交叉领域的研究热点,研究人员对代码摘要技术和工具进行了许多探索
[9−12]
,大量
研究成果发表在软件工程领域和人工智能领域的权威会议或期刊上,例如PLDI、ICSE、FSE、ASE、SANER、
ICPC、MSR、AAAI、ICLR等会议和TSE、JSS和IST等期刊.
代码摘要研究是在自然语言处理技术(如机器翻译和自动文本摘要技术)的基础上发展起来的
[13]
.因为源代
码与自然语言文本有相似之处,它们都具有语言的自然性
[14]
;同时又有本质的区别.源代码是结构化的文本,自然
语言是非结构化文本,所以人们在机器翻译和文本摘要技术的基础上进行了改进,设计了自动代码摘要技术.在软
件工程领域有4类
[13]
摘要应用:1)文档到文档(texttotext)的摘要,如对软件缺陷报告、用户评论等的摘要;2)源
代码到文档(codetotext)的摘要,如利用源代码或软件变更等生成自然语言摘要;3)代码到代码(codetocode)的
摘要,是指从源代码中找出重要的代码语句,由这些语句构成代码摘要.4)混合软件制品(mixedartifact)摘要
[13]
.
本文主要讨论的是第二类摘要,即源代码到文档的摘要技术.
自动代码摘要研究开始于2010年,在最初的研究中主要采用信息检索技术
[15]
,如:vectorspacemodel(VSM)
[16]
、
latentsemanticindexing(LSI)
[17]
和latentDirichletallocation(LDA)
[18]
等.2016年后,由于机器学习领域深度神经网
络技术的快速发展,基于深度学习的代码摘要技术逐渐成为自动代码摘要研究中的主流技术.例如,2019年发表
的代码摘要研究文献共12篇,其中11篇采用的是深度神经网络技术;2020年发表了21篇使用深度神经网络进
行代码摘要研究的文献.本文主要对使用深度神经网络方法进行自动代码摘要研究的工作进行总结和分析.
目前已有学者对自动代码摘要的研究成果进行了总结
[1,13,19,20]
.Nazar等人
[1]
对软件制品自动摘要工作进行了
全面的分析,这里的软件制品包括缺陷报告、源代码、邮件列表和开发者讨论信息等,他们主要对利用软件制品
生成摘要的工作进行了综述.但自动源代码摘要研究只是他们总结工作的一部分,没有被充分、全面地分析.Zhu
等人
[19]
对自动源代码摘要研究进行了综述,他们从代码摘要的技术、文本生成方式、摘要的类型和摘要评估4
个方面对已有文献进行了回顾,但是,他们对源代码摘要的核心问题阐述不完整,在展望未来发展方向时也没有给
出该领域的发展全景.Moreno等人
[13]
对自动软件摘要工作进行了总结,他们主要从软件自动摘要方法和摘要评估
方法两个方面简要概括了软件摘要技术的类型、影响因素以及摘要评估的策略,但对每类问题和相关文献都没有
深入的分析.Song等人
[20]
总结了2010–2018年期间代码注释的研究工作,他们从代码注释算法的分类、原理和技
术细节方面进行了归纳和总结,同时概括总结了注释质量评价的研究.从广义上,尽管代码摘要可看作一种特定的
程序注释,但文献[20]没有对当前主流的基于神经网络的代码摘要研究进行全面、详细的总结和分析,而且从
2019年至今,采用神经网络方法进行代码摘要研究又有了很大进展,并呈现出新的技术特征.总体上,目前还缺乏
专门针对神经代码摘要研究及其新的发展趋势的系统全面的综述.鉴于此,本文试图从处理过程、算法的分类、
现有工作成果和摘要评估技术四个方面对2016年1月–2020年12月间基于深度神经网络的源代码摘要研究进
行系统全面的分析和总结,以便达到下面目标:(1)全面总结基于神经网络的代码摘要技术,帮助国内专业人员全
面、系统地了解神经代码摘要研究中的基本问题,快速全面地了解自动摘要的方法、技术和最新动向.(2)探讨代
码摘要技术未来的发展方向和现有技术的限制,为学术界开展相关研究提供参考.
本文第2节对基于神经网络的自动源代码摘要研究进行概述.先介绍代码摘要和自动代码摘要的定义,然后
对自动代码摘要研究的起源、发展和现状进行描述,并对生成式摘要的质量评估方法和评估指标进行总结.第3
节对基于神经网络的代码摘要架构和工作流程进行描述,引出该领域的主要挑战.第4节介绍神经代码摘要算法
56 软件学报2022年第33卷第1期
评论