Page 217 - 《软件学报》2026年第3期
P. 217
1180 软件学报 2026 年第 37 卷第 3 期
目内/项目间代码克隆片段. 为了更好地评估对抗性攻击和对抗性防御方法, 采用 Yang 等人 [19] 提供的过滤数据集.
他们的过滤策略包括删除未标记的数据样本、平衡两个标签 (克隆和非克隆) 的数据分布以及使数据处于计算友
好的规模. 具体来说, 该数据集包含 90 102 个训练样本、4 000 个验证样本和 4 000 个测试样本. 代码摘要生成
(code summarization) 任务旨在针对给定的代码片段, 自动生成其对应的自然语言描述性摘要. 为实现这一目标, 本
文选取了 CodeSearchNet [68] 作为实验数据集. 该数据集作为代码摘要生成领域的重要基准, 广泛涵盖了 6 种编程语
言的代码数据. 为保持与现有研究的可比性和一致性 [7,16,21] , 本文同样专注于 Java 编程语言的数据子集, 并实施了
数据过滤与采样策略. 具体而言, 本文从 CodeSearchNet 中筛选出专门针对 Java 的数据子集, 进一步构建了包含
164 923 个训练样本、5 183 个验证样本以及 4 000 个测试样本的数据集. 这一数据划分确保了本文实验设置与先
前两个分类任务中的测试集规模相当, 从而便于进行性能对比与结果分析.
表 3 预训练代码模型在对应数据集上的评估结果
ID 数据集名称 模型 训练集规模 验证集规模 测试集规模 测试指标 测试集性能
1 CodeBERT 13 041 4 000 4 000 98.70
Vulnerability
2 CodeGPT 13 041 4 000 4 000 Accuracy (%) 97.45
detection
3 PLBART 13 041 4 000 4 000 99.52
4 CodeBERT 90 102 4 000 4 000 96.33
Code clone
5 CodeGPT 90 102 4 000 4 000 Accuracy (%) 96.52
detection
6 PLBART 90 102 4 000 4 000 96.82
7 CodeBERT 164 923 5 183 4 000 18.69
Code
8 CodeGPT 164 923 5 183 4 000 BLEU-4 15.40
summarization
9 PLBART 164 923 5 183 4 000 17.54
● 预训练代码模型: 本文在第 2.1 节介绍了预训练代码模型的 3 个类别 (即 Encoder-only、Decoder-only 和
Encoder-Decoder). 现有研究 [21] 表明, 不同预训练代码模型的性能非常接近, 没有一个预训练代码模型可以在不同
的任务或数据集上全部实现最佳性能. 例如, 对于 Encoder-only 架构的预训练代码模型, CodeBERT 在漏洞检测
[1]
[2]
数据集上的表现要优于 GraphCodeBERT , 而在代码克隆检测数据集上则表现较差; 同样, 对于 Encoder-Decoder
架构的预训练代码模型, CodeT5 在漏洞检测数据集上的表现优于 PLBART , 而在代码克隆检测数据集上则表
[6]
[3]
现不佳. 因此, 与现有研究 [16] 保持一致, 对于每一类预训练代码模型, 我们选择一个代表性模型进行实验评估. 具
[7]
[1]
体来说, 选择 CodeBERT 作为 Encoder-only 模型的代表, CodeGPT 作为 Decoder-only 模型的代表, 以及 PLBART [6]
作为 Encoder-Decoder 模型的代表. 本文分别基于相应的数据集, 对这 3 个预训练代码模型进行了微调. 微调过程
中, 使用了现有研究 [16] 提供的相同超参数设置, 详细设置可参见本项目主页. 最终, 获得 9 个微调后的代码模型作
为研究对象. 表 3 的最后一列显示了这些代码模型在相应任务上的微调性能 (Accuracy 用于衡量漏洞检测和代码
克隆检测任务、BLEU-4 用于衡量代码摘要生成任务). 尽管目前存在一些更先进的预训练代码模型 (例如
CodeT5+ [69] 、CodeGen [25] 、StarCoder [67] 和 Code Llama [70] ), 但由于这些模型参数巨大, 受到计算资源和时间的限制,
难以在下游任务上进行微调和鲁棒性测试. 因此, 与最新的相关研究保持一致 [16] , 将本文的研究对象限定为这 3
个流行的预训练代码模型. 在未来的研究中, 我们会积极探索 CoDefense 在参数更多的预训练代码模型上的对抗
性防御效果.
总体而言, 本文研究的实验对象是多样的, 涉及不同的任务、不同的数据规模、不同的预训练代码模型和不
同的模型架构. 这有助于全面评估 CoDefense 的对抗性防御效果和效率.
4.3 对抗性攻击方法
表 4 总结了最近 5 年在主要会议和期刊上发表的最先进的针对以代码为输入的预训练模型的对抗性攻击方
法. 与现有研究 [16] 保持一致, 本研究选择的对抗性攻击方法都是黑盒方法, 主要是因为白盒攻击方法具有两个限
制: (1) 白盒攻击方法通常需要访问模型结构、参数信息、原始训练集等, 而这些信息在实际场景中往往很难获
得, 攻击者通常只能通过访问提供的 API 来调用模型; (2) 白盒攻击往往是特定于模型和任务设计的, 而不同的模

