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) 白盒攻击往往是特定于模型和任务设计的, 而不同的模
   212   213   214   215   216   217   218   219   220   221   222