本技术涉及软件工程技术领域,公开了一种基于对偶图神经网络的代码注释生成方法和系统,方法包括:获取源代码以及作为源代码的自然语言注释,并对源代码进行预处理,根据预处理之后的源代码和自然语言注释构建训练数据;构建代码处理模型,使用训练数据训练代码处理模型,获得训练好的代码处理模型,代码处理模型包括对偶图模块、编码器、聚合器和解码器,对偶图模块根据预处理之后的源代码解析获取抽象语法树,并根据抽象语法树构建语法依赖图和语义依赖图;编码器根据所述语法依赖图获得第一编码表示、根据语义依赖图获得第二编码表示;聚合器根据第一编码表示和第二编码表示获得聚合图表示;解码器根据第一编码表示、第二编码表示和聚合图表示生成自然语言注释;将待注释的代码输入训练好的代码处理模型,获得自然语言注释。本发明能够更有效编码代码结构,提高注释生成的准确性,并提高代码处理模型的泛化能力。
背景技术
软件开发和维护已经成为人类工作和生活中不可或缺的一部分,各种辅助技术应运而生,以促进项目的开发和维护。在软件开发和维护过程中,代码注释是确保代码可读性和可维护性的重要手段。然而,编写高质量的代码注释是一项耗时且容易被忽略的任务。因此,自动化代码注释生成技术受到了广泛关注。代码注释生成旨在将结构化的程序代码自动转换为易于人类理解的注释。代码注释对于确保代码的可读性和可维护性至关重要,良好的代码注释信息对于程序员参与软件开发和维护过程也至关重要。
现有的代码注释生成方法主要包括基于模板、信息检索(IR)、序列到序列(Seq2Seq)等方法。这些方法虽然能够生成注释,但存在局限性,基于模板的方法过于僵化,无法适应多样化的编程环境;基于IR的方法则仅进行关键词提取和匹配,无法充分捕捉代码和自然语言之间的深层语义关系;传统的 Seq2Seq 方法虽然广泛应用,但通常将源代码简单表示为线性序列,忽视了代码固有的层次和结构信息,难以有效建模复杂的语法结构关系。目前在该领域最主流的Struct2Seq 可以被视为一种改进的 Seq2Seq 模型,但是现有的方法都是基于单一代码表示(如AST或图)的编码方法,难以同时建模代码复杂的语法和语义依赖关系,此外,现有的结构编码器通常未针对不同编程语言的源代码进行设计,忽略了编码阶段的一些独特依赖特性,尤其忽略了节点的类型信息,导致生成的注释信息有限且不准确。
实现思路