摘要
尽管静态代码分析(SCA)工具已集成到许多现代软件构建和测试管道中,但它们的实际影响仍然受到它们通常产生的过多误报警告的严重阻碍。为了解决这个问题,研究人员提出了几种后处理方法,旨在在 SCA 工具产生结果后过滤掉错误命中(或等效地识别“可操作”警告)。然而,我们发现这些方法中的大多数都是有针对性的(即仅处理少数 SCA 警告类型)并在综合基准或小规模手动收集的数据集(即典型样本量为数百)上进行评估。在本文中,我们提出了一个数据集,其中包含 224,484 个被开发人员修复(真阳性)或明确忽略(假阳性)的真实警告样本,我们使用数据挖掘方法从 GitHub 的 9,958 个不同的开源 Java 项目中收集了这些样本。此外,我们利用这个丰富的数据集来训练基于代码嵌入的机器学习模型,用于过滤由 160 种不同的 SonarQube 规则检查产生的误报警告,这是当今最广泛采用的 SCA 工具之一。这是我们在该领域所知道的最广泛的现实世界公共数据集和研究。我们的方法对 SonarQube 警告分类的准确率为 91%(最佳 F1 分数为 81.3%,AUC 为 95.3%)。
关键词:静态代码分析、过滤误报、真实数据集、代码嵌入、机器学习。
引言
静态代码分析 (SCA) 工具成为现代软件开发生命周期 (SDLC) 的一等公民。 SCA 工具相对快速、经济高效且易于与持续集成 (CI) 系统集成。他们分析软件的源代码,可以有效地检测各种类型的编程问题,如简单的编码错误、漏洞、性能问题或设计错误。