Page 74 - 《软件学报》2025年第4期
P. 74

1480                                                       软件学报  2025  年第  36  卷第  4  期


                 首先从   Linux Kernel、QEMU、Wireshark  和  FFmpeg 这  4  个大型  C  语言开源项目中收集函数, 进行提交过滤
                 (commits filtering), 排除了与安全无关的提交. 然后请    4  位专业安全研究人员组成的团队进行了两轮数据标注和交
                 叉验证. 为了确保数据标记的质量, 团队收集了与安全相关的提交, 将其标记为漏洞修复提交                          (vulnerability-fix commit,
                 VFC) 或非漏洞修复提交      (non-vulnerability-fix commit, non-VFC), 然后直接从标记的提交中提取易受攻击或非易
                 受攻击的函数     (function). 其中, 漏洞修复提交是指修复潜在漏洞的提交, 可以从提交中所做的修订之前的版本的
                 源代码中提取易受攻击的函数. 非漏洞修复提交是不修复任何漏洞的提交, 可以从修改前的源代码中提取非漏洞
                 函数. 最终数据集包含      21 000  个训练样本、2 700  个验证样本和     2 700  个测试样本.
                    Google code jam (GCJ) 是一年一度的多轮国际编程竞赛, 每一轮都要求参与者解决一些编程挑战. 该数据主
                 要可用于训练源代码作者归属模型. GCJ 数据集来自                Google Code Jam  编程竞赛网站. 具体而言, 该数据集分为
                 GCJ-C++和  GCJ-Java 两类. 其中  GCJ-C++由  204  位选手编写的  1 632  个  C++程序文件组成, 每位选手有     8  个程序
                 文件, 对应  8  个编程挑战, 平均每个程序文件有          74  行代码. GCJ-Java 数据集包含   74  位选手的  2 396  个  Java 文件,
                 每个文件平均有      139  行代码.
                    CodeXGLUE  是由  Lu  等人  [83] 在  2021  年提出的用于程序理解的基准数据集. 该基准数据集适用于             3  类模型,
                         (JSONL) 格式发布, 其中每一行都包含一个
                 包括  BERT  类模型、GPT   类模型和    encoder-decoder 类模型. 该基准数据集收集自       BigCloneBench、POJ-104  和
                 Devign  等  14  个常见数据集, 并将数据集划分为      Code-Code、Text-Code、Code-Text 和  Text-Text 这  4  种类别, 覆
                 盖了代码克隆检测、代码漏洞检测和代码补全等                 10  项代码下游任务.
                    CodeQA  是由  Liu  等人  [84] 在  2021  年提出的用于代码问答任务的数据集. 代码问答指给定代码片段和问题, 生
                 成文本答案. 该数据集可用于训练代码生成模型. 在数据集的构建过程中, 作者为了确保                           QA  问答对自然且干净,
                 从  GitHub  上挑选了  Java 和  Python  两个经过充分研究的大规模数据集. 然后从这些数据集选择合适的生成                 QA  对
                 的评论. 针对生成各种类型的问答对作者使用句法规则和语义分析, 将评论转换为问答对. 最终数据集                               CodeQA  中
                 的  Java 数据集包含  119 778  个问答对, Python  数据集包含  70 085  个问答对.
                    APPS  是由  Hendrycks 等人  [85] 在  2021  年提出的用于评估代码生成任务性能的数据集. 该数据集可用于训练代
                 码生成模型. APPS    数据集由不同     OJ 网站收集的问题组成, 该数据集不仅评估模型编写语法正确的程序的能力,
                 还评估其理解任务描述和设计算法来解决这些任务的能力, 它涵盖了简单的入门问题、面试级别问题和编码竞赛
                 挑战. 该数据集总共包含        10 000  个平均长度为   293.2  个单词编码问题, 131 777  个用于检查解决方案的测试用例
                 和  232 421  个由人类编写的真实解决方案. 数据被平均分为训练集和测试集, 每个集合有                     5 000  个问题. 测试集中,
                 每个问题都有多个测试用例, 平均测试用例数为               21.2.
                    Shellcode_IA32 是由  Liguori 等人  [86] 在  2021 年提出的, 该数据集由带有详细的英文注释的    IA-32 (x86 英特尔架
                 构的  32  位版本) 汇编语言指令组成. 该数据集可用于汇编代码生成和汇编代码摘要模型. 该数据集总共包含                            3 200
                 对汇编代码片段和注释. 考虑到自然语言描述的可变性, 作者用英语描述了数据集的不同样本, 并使用所收集程序
                 的开发者撰写的评论作为自然语言描述. 该数据集是迄今为止可用于代码生成的最大的面向安全的代码集合.
                    SecurityEval 是  2022  年  Siddiq  等人  [87] 提出的用于评估代码生成模型的安全性的数据集. 该数据集可用于训
                 练代码生成模型. 该数据集包含          130  个  Python  代码片段, 涵盖了  75  种漏洞类型  (CWE). 数据集按照  JavaScript 对
                 象表示法                                      JSON  对象. 其中, JSON  对象具有   3  个键值对, 分别是   ID、
                 prompt、和  insecure code. ID  唯一地标识样本, prompt 内容是部分源代码框架, 可以用作代码生成模型的输入, 而
                 insecure code  是模型生成的可能存在漏洞的代码示例. 该数据集可用于向大模型                    (LLM) 输入源代码框架提示
                 (prompt) 然后检查生成的代码来评估模型的代码生成技术的安全性.
                    LLMSecEval 是  2023  年  Tony  等人  [88] 提出的用于评估代码生成模型的安全性的数据集. 该数据集可用于训练
                 代码生成模型. 该数据集包含          150  个自然语言的提示      (NL Prompt), 涵盖了  MITRE  中前  25  种常见缺陷类型
                 (CWE). LLMSecEval 数据集来自   Chen  等人  [7] 的  HumanEval 数据. 作者首先对数据进行预处理, 包括过滤掉无效
                 的描述、删除空白内容、删除包含大量代码片段内容和, 删除不解释输入代码功能的内容, 最终得到                                 150  个有效
                 的  NL Prompt. 具体而言, LLMSecEval 总共包含   150  个编译为  CSV  和  JSON  文件的自然语言提示     (NL-Prompt),
   69   70   71   72   73   74   75   76   77   78   79