Page 72 - 《软件学报》2025年第4期
P. 72
1478 软件学报 2025 年第 36 卷第 4 期
2023 年, Improta 等人 [41] 提出通过在代码描述中添加单词级别扰动的方法提高代码生成模型的鲁棒性, 扰动
具体分为单词替换和单词省略方法. 首先, 通过余弦相似性证明扰动保留了原始语义. 在实验中, 他们评估了
Seq2Seq、CodeBERT 和 CodeT5+模型受到新扰动的影响大, 性能下降明显. 基于此, 他们对训练数据进行不同比
例的数据增强, 通过实验证明了该方法可以提高对于扰动样本的鲁棒性, 并且对于非扰动数据也能提高模型性能,
获得更高的语义正确性.
上述提到的对抗防御研究 [9,16,19,41] 主要是通过采用对抗性训练或数据增强技术来提升模型的鲁棒性. 这些研
究使用基于梯度的扰动, 在最坏的情况下对程序进行转换. 相较于随机扰动, 更有可能生成健壮的模型. 然而, 这些
方法在提升模型鲁棒性的同时却会降低模型的正常性能. 虽然, 一些研究通过基于梯度的对抗训练与编程语言的
数据特征相结合或设计特定的损失项来对模型鲁棒性和性能进行加强 [26,31] . 但是, 这些方法需要消耗更多的计算
资源. 因此, 如何有效地提升模型鲁棒性的同时保持模型的性能仍是未来对抗防御研究需要解决的问题.
3.3 小 结
本节重点关注目前针对深度代码模型的对抗攻击和对抗防御的相关研究. 对抗攻击旨在通过制作的对抗样本
对深度代码模型发起攻击, 从而误导模型做出错误的或者攻击者预定目标的预测. 根据攻击者对模型的信息掌握
726 768
程度, 对抗攻击可以分为黑盒对抗攻击和白盒对抗攻击. 在白盒攻击中, 攻击者能够获得目标模型的结构和参数等
信息, 并可以根据这些已知信息生成对抗样本. 而在黑盒攻击中, 攻击者无法得知目标模型的详细信息, 只能获取
模型的最终决策结果, 攻击者需要通过与系统互动过程来生成对抗样本. 针对上述不同的对抗攻击, 研究者提出了
有针对性的对抗防御方法. 相比于对抗攻击在深度代码模型安全领域的广泛研究, 目前针对该领域的对抗防御相
关研究集中在对抗训练方法中. 与修改模型和附加模型相关的对抗防御研究仍然缺失.
4 深度代码模型安全数据集与评估指标总结
本节总结深度代码模型安全研究领域常用的基准数据集 (benchmark) 以及常用的评估指标 (metrics).
4.1 数据集
在表 5 中, 详细列出了深度代码模型安全领域常用的数据集, 并给出了每个数据集的相关信息, 包括数据名
称、参考文献、发表时间、包含的编程语言、数据量、数据来源以及下载地址链接, 以方便后续研究人员下载并
使用.
表 5 深度代码模型安全性研究常用基准数据集
发表
数据名称 编程语言 数据来源 数据量 下载地址 应用场景
年份
[25]
SPEC2000 2000 C/C++ 开源项目 - https://www.spec.org/cpu2000 计算机系统性能评估
[47] https://github.com/clonebench/BigCloneBe 代码克隆检测、
BigCloneBench 2014 Java 开源项目 6 260 000
nch 代码克隆搜索
Open judge (OJ) 2016 C++ OJ平台 52 000 http://programming.grids.cn 代码分类
dataset [74]
Go
Java 1 569 889
[46] JavaScript 1 857 835 代码搜索、
CodeSearchNet 2019 开源项目 https://github.com/github/CodeSearchNet
PHP 977 821 代码摘要
Python 1 156 085
Ruby 164 048
[50] https://github.com/tech- 代码摘要、代码文档
Code2Seq 2019 Java 开源项目 1 600 000
srl/code2seq#datasets 生成、代码搜索
[48]
Devign 2019 Java 开源项目 26 400 https://github.com/rjust/defects4j 代码缺陷检测
Google code jam C++ 1 632 https://codingcompetitions.withgoogle.com/
2020 OJ平台 代码作者归属识别
(GCJ) Java 2 396 codejam