中文

从数据中学习静态缺陷查找器

软件工程 2020-03-30 v3 机器学习

摘要

我们提出一种创建静态缺陷查找器的替代方法。我们不依赖人类专家知识,而是利用深度神经网络直接从数据训练静态分析器。具体而言,我们将缺陷查找问题构建为分类任务,并使用图神经网络(GNN)训练一个分类器来区分有缺陷与无缺陷的程序。关键地,我们提出一种新颖的基于区间的传播机制,其带来了显著更高效、准确且可扩展的 GNN 推广。我们将该方法实现为一个框架 NeurSA,并进行了广泛评估。在一个跨项目预测任务中,我们从 NeurSA 实例化的三个神经缺陷检测器能有效捕获未见代码中的空指针解引用、数组越界与类型转换缺陷。我们在一组空指针解引用缺陷上将 NeurSA 与若干静态分析器(如 Facebook Infer 与 Pinpoint)比较。结果表明 NeurSA 在捕获真实缺陷与抑制虚假警告方面更精确。我们还将 NeurSA 应用于 GitHub 上若干流行 Java 项目,发现了 50 个新缺陷,其中 9 个已被修复,3 个已被确认。

关键词

引用

@article{arxiv.1907.05579,
  title  = {Learning a Static Bug Finder from Data},
  author = {Yu Wang and Fengjuan Gao and Linzhang Wang and Ke Wang},
  journal= {arXiv preprint arXiv:1907.05579},
  year   = {2020}
}