Python 漏洞预测中不同源代码表示方法之比较
软件工程
2021-08-05 v1
摘要
在大数据与机器学习的时代,软件开发技术方法飞速演进,一个问题随之出现:程序员不再能手动检测其代码中的所有安全缺陷与漏洞。为克服该问题,开发者如今可依赖自动技术,如基于机器学习的预测模型,来检测此类问题。这类方法的一个固有特性是它们以数值向量(即特征向量)作为输入。因此,需要将源代码转换为此类特征向量,常称为代码嵌入。代码嵌入的一种流行方法是改造自然语言处理技术(如文本表示)以从源代码自动提取必要特征。然而,不同文本表示技术对解决软件工程(SE)问题的适用性与比较却鲜有系统研究。本文中,我们针对检测 Python 代码漏洞这一 SE 任务,对三种流行文本表示方法——word2vec、fastText 和 BERT——进行了比较研究。采用数据挖掘方法,我们收集了大量脆弱与修复形态的 Python 源代码,用 word2vec、fastText 和 BERT 将其嵌入为向量,并使用长短期记忆网络在其上训练。使用相同 LSTM 架构,我们比较了不同嵌入在提取有意义特征向量上的效率。我们的发现表明,所有文本表示方法均适用于该特定任务中的代码表示,但 BERT 模型最有前景,因其最省时且基于它的 LSTM 模型在预测 Python 源代码漏洞上取得了最佳总体准确率(93.8%)。
引用
@article{arxiv.2108.02044,
title = {A Comparison of Different Source Code Representation Methods for Vulnerability Prediction in Python},
author = {Amirreza Bagheri and Péter Hegedűs},
journal= {arXiv preprint arXiv:2108.02044},
year = {2021}
}