关键词:
代码摘要
函数调用
预训练模型
自然语言处理
摘要:
是代码功能的自然语言描述,它能够帮助开发人员更好地理解和维护软件。然而,人工编写代码摘要对开发人员要求高,耗时又耗力。因此,研究如何自动生成代码摘要具有重大的应用价值和研究意义。近年来,研究人员纷纷探索如何生成高质量的代码摘要,然而,现有的许多工作都着眼于理解函数的语义信息和结构信息,少有考虑函数的调用关系,与真实开发场景有一定差距,忽略了大型程序都是通过对类和函数的组织实现的,函数及其调用关系是其中的重要组成部分。缺少函数及其调用关系的研究的一个主要的原因是缺少相关数据集。本文从根源上解决该问题,构建了一个包含函数调用关系的大规模多语言的数据集Call Code。考虑函数调用信息后,代码摘要研究面临着新的挑战,首先数据集中样本的平均长度超过了512,带来了长代码的问题;其次函数间包含了复杂的调用关系,如何学习浅层和深层的函数调用关系也是一个挑战。为了应对上述挑战,本文的主要贡献如下:1.针对数据集缺失的问题,本文构建了包含函数调用的新数据集CallCode。本文利用静态调用关系提取技术,构建了包含函数调用的数据集Call Code,分别构建了Python、Java、Go和Java Script四种语言的数据集,总样本量达到614,652。2.针对长代码的问题,本文提出了基于函数调用的Multi-Encoder-Decoder模型CDMT。本文构建的新数据集Call Code包含了调用函数的完整代码段信息,代码平均长度超过了Transformer模型的最大输入长度。因此,为了学习函数与调用函数之间的依赖关系,本文设计了Multi-Encoder-Decoder的模型,并设计了多种编码器融合方式,本文设计的模型也适用于预训练模型。3.针对复杂的调用关系,本文提出了基于函数调用子图的代码摘要模型CDGSum。在同一个项目中,函数会被多次调用,也会调用多个其他的函数。为了表示函数的深层调用关系以及调用顺序,本文使用了静态函数调用图。从运算效率的角度出发,本文将静态函数调用图划分为子图,通过图中节点信息的传递与更新学习函数的复杂调用关系,进而生成质量更高的代码摘要。实验证明,与领先的模型相比,本文提出的CDMT模型在代码摘要任务上表现更好,验证了函数调用信息和多编码器的有效性;本文提出的CDGSum模型能生成质量更高的摘要,证实了引入函数调用子图的有效性。