Page 123 - 《软件学报》2026年第2期
P. 123
602 软件学报 2026 年第 37 卷第 2 期
maximizing their respective strengths in the comment generation process. We compared SRBCS with 11 code comment generation
approaches on two subject datasets. Experimental results demonstrate that SRBCS effectively integrates different approaches and
outperforms existing methods in code comment generation.
Key words: code comment generation; semantic reranking model; contrastive learning
代码注释在软件开发和维护过程中扮演着重要角色, 其提供了对源代码功能、逻辑和意图的清晰说明. 通过
高质量代码注释, 开发人员可以在不需要涉及代码具体细节的情况下快速地理解代码语义和功能, 从而实现高效
的软件开发和维护 [1,2] . 然而, 由于编写和维护代码注释所需的高昂人工成本, 真实软件系统中的代码注释往往容
易出现缺失、不匹配以及过时等问题 [3] , 严重影响软件系统的可理解性和可维护性, 进而限制软件开发和维护的
效率. 因此, 如何自动化地为源代码生成高质量的注释, 对于提高软件开发和维护的效率、提升软件系统的质量有
着重要意义.
现有代码注释自动生成方法可以被大致分为基于信息检索的方法和基于深度学习的方法. 其中, 基于信息检
索的方法 [1,4−6] 旨在利用代码间的相似性从代码数据库中检索相似代码片段, 从而使用检索到的相似代码的注释生
成目标代码的注释. 而基于深度学习的方法 [7−11] 则将代码注释生成任务建模为神经机器翻译问题 (即, 如何将源代
码翻译为自然语言描述的代码注释), 并利用深度神经网络模型对这一翻译问题加以解决. 伴随着深度学习技术的
日益成功, 基于深度学习的代码注释生成方法已然成为代码注释生成领域的主流. 然而, 近年的相关研究指出: 基
于信息检索的方法在一些情况下可以实现优于 (或接近) 基于深度学习的方法的性能 [12] . 这一发现启发了研究人
员对基于信息检索的方法和基于深度学习的方法进行集成, 以进一步提升代码注释生成的性能. 例如, Re2Com [13]
提出检索相似代码的摘要作为示例来辅助深度神经网络模型生成目标代码的注释; Rencos [14] 分别在语法和语义层
面检索相似代码, 并通过深度神经网络模型将检索到的相似代码与目标代码进行融合来生成代码注释; EditSum [15]
则首先将检索到的相似代码的注释编码为原型注释, 随后使用深度神经网络模型对原型注释进行编辑来生成目标
代码的注释.
尽管基于集成的方法在代码注释自动生成任务上取得了一定效果, 但现有方法仍存在一些问题有待改进. 首
先, 现有基于集成的方法大多从深度学习的视角出发, 通过检索相似代码对深度神经网络模型的输入进行增强来
提升代码注释生成的性能. 这种方式导致代码注释生成的有效性仍受制于深度神经网络模型, 无法充分发挥信息
检索技术在代码注释生成任务上的优势 [16] . 其次, 由于需要使用检索到的相似代码对深度神经网络模型的输入进
行增强, 现有基于集成的方法往往需要对深度神经网络模型的架构进行特殊设计 [13−15] , 以使其能够对检索到的相
似代码进行融合. 同时, 现有基于集成的方法大多需要从零开始对深度神经网络模型进行训练 [13−15] , 以保障模型可
以有效利用检索到的相似代码. 但随着深度神经网络模型规模的日益增大, 从零开始训练深度神经网络模型所需
的时间和算力成本也愈发高昂. 这些因素一定程度上限制了现有基于集成的方法的可扩展性.
针对上述问题, 本文从信息检索的视角而非传统深度学习的视角重新思考了如何集成信息检索技术和深度学
习技术来进行代码注释生成. 我们的核心思想是: 因为信息检索技术和深度学习技术在生成代码注释时有其各自
擅长的代码类型 [16] , 所以我们可以依据目标代码来选择使用信息检索技术生成的代码注释或深度学习技术生成
的代码注释, 从而更好地为目标代码生成注释. 据此, 本文提出了一种基于语义重排序的代码注释生成方法 SRBCS
(semantic reranking for better code summarization). SRBCS 首先分别利用信息检索技术和深度学习技术为目标源代
码生成候选注释. 随后, 它通过一个语义重排序模型来度量候选代码注释与目标源代码之间的语义相关度, 并对候
选代码注释按相关度进行排序. 最终, SRBCS 从排序后的候选代码注释中选择出最佳注释作为目标源代码注释.
为了构建可以有效对候选代码注释进行排序的语义重排序模型, 本文提出了一种基于多维度正负样本对构造方法
的对比学习来对语义重排序模型进行训练. 该方法利用源代码的多维度信息构造对比学习所需的正负样本对, 以
帮助语义重排序模型更好地学习源代码与注释之间的语义相关性, 从而更有效地进行候选代码注释的排序选择.
为了评估 SRBCS 的性能, 本文在两个被广泛使用的数据集 (即 JCSD 数据集 [8,17] 和 PCSD 数据集 [10] ) 上将
SRBCS 与 14 种代码注释生成方法进行了比较. 实验结果表明, SRBCS 能够有效地对不同代码注释生成方法进行
集成, 实现优于现有代码注释生成方法的性能. 具体而言, 在两个实验数据集上, SRBCS 的 BLEU 分数、ROUGE-L

