摘要
背景:关于使用静态分析工具(例如 FindBugs)的最重要挑战是存在大量开发人员未采取行动的警告。已经提出了许多功能来构建分类模型,以自动识别可操作的警告。通过分析这些功能和相关研究,我们观察到一些限制,使用户缺乏应用这些功能的实用指南。
目的:这项工作旨在对所有公共可用特征进行系统的实验评估,并探索是否存在用于可操作警告识别的黄金特征集。
方法:我们首先进行系统的文献回顾,收集所有公共可用的特征用于警告识别。我们采用 12 个项目,共 60 次修订作为我们的主题项目。然后,我们实施一个工具来提取每个项目修订的所有特征的值,以准备实验数据。
结果:对收集到的 116 个特征的实验评估表明,有一组共同的特征(23 个特征)在大多数项目修订的警告识别中起作用。这些特征可以在警告识别的时间成本低得多的情况下实现令人满意的性能。
结论:这些常用的特征可以被视为识别可操作警告的黄金特征集。这一发现可以作为促进现实世界警告识别的实用指南。
关键词:静态分析,可操作的警告识别,实验评估
引言
静态分析(SA)工具(例如 FindBugs)被广泛用于查找软件中的错误。这些工具主要利用启发式模式匹配方法来扫描软件项目的源代码或二进制代码,并且可以推断出各种各样的错误、安全漏洞和不良编程实践 [2, 4, 10]。商业软件公司对整个代码库广泛采用 SA 工具提供了确凿的证据,证明 SA 对发现潜在缺陷在经济上是有利的 [3]。
使用 SA 工具的最大挑战是有大量警告没有被开发人员采取行动。一个主要原因是报告的警告的高误报率[10]。由于所分析的软件没有被执行,SA 工具必须推测实际的程序行为将是什么。他们经常高估可能的程序行为,导致与真正缺陷不对应的虚假警告。此外,即使警告揭示了真正的缺陷,它们也可以被忽略。原因包括涉及过时代码的警告、对使用没有影响的“微不足道”缺陷,以及需要大量努力修复而几乎没有感知收益的真正缺陷 [3, 10]。大量不可操作的警告使得分析 SA 工具生成的结果变得既费时又费力。
为了使 SA 工具更实用,已经提出了许多研究来自动识别可操作的警告 [5-7、11、12、14、15、17、18、26]。他们中的大多数都有一个共同的过程,即提出一组特征,然后使用这些特征构建机器学习分类器来预测哪些警告是可操作的。通过分析这些研究,我们发现了以下非平凡的局限性。
- 隔离:不同的研究使用不同的特征集来预测可操作的警告,并且没有一个研究进行了完整的比较来探索哪些特征更有效 [5-7, 11, 12, 14, 15, 17, 18, 26]。
- 冲突:不同的研究,即使是那些使用相同特征的研究,也经常在不同的项目上评估自己,并得出关于特征有效性的相互矛盾的结论。例如,[11] 中的实验表明,生命周期较短的警告更有可能是可操作的,而 [7] 发现可操作警告和不可操作警告的生命周期之间没有明确的二元划分。
- 歧义:在不同的研究中经常观察到名称相同但含义不同的特征。例如,“警告生命周期”是通过 [7] 中调查的修订和警告开放修订之间的修订数量来衡量的,而在 [12] 中它被定义为这两个修订之间的时间量。
- 粗糙度:大多数研究只评估了他们提出的特征的整体性能,而不是每个特征的有效性[5、6、11、15、26]。
由于现有研究的上述限制,用户在使用这些功能时缺乏实用指南。他们会对应该将哪些特征应用于警告识别感到困惑和措手不及。
受限制的启发,我们旨在对 SA 警告识别 (SAWI) 中使用的所有公共可用特征进行系统的实验评估,并探索这些是否是可操作警告识别的黄金特征集。我们将调查以下两个研究问题:
- RQ1:在大多数项目修订的警告识别中是否有一套通用的功能?
- RQ2:警告识别中的共同特征集的性能(即 AUC 和时间成本)如何?
为了回答这两个研究问题,我们首先进行了广泛的系统文献回顾,以探索用于警告识别的所有公共可用特征。我们采用 12 个项目,共 60 次修订作为我们的主题项目。然后,我们实施一个工具来提取每个项目修订的所有可用特征的值,以准备实验数据。
从 10 个相关研究中收集了 116 个特征。它们分为 8 类,即文件特征和历史;代码特征、历史和分析;分别是警告特征、历史和组合。
对这些特性的实验评估表明,有一组共同的特性(23 个特性)在大多数项目修订的警告识别中生效。其中大部分属于警告组合、代码特征和警告特征类别。
然后,我们从 AUC 和时间成本的角度评估这些共同特征的分类性能。结果表明,这些特征可以实现令人满意的性能,而警告识别的成本要低得多。
从这个意义上说,这些普遍选择的特征可以被视为预警识别的黄金特征集。这一发现可以作为促进现实世界警告识别的实用指南。
本文做出以下贡献:
- 对用于警告识别的黄金特征集进行严格而广泛的评估。据我们所知,这是第一项广泛评估可操作警告识别功能的工作。
- 116 个公开可用的特征,用于从系统文献回顾中识别警告。这可以看作是警报识别的完整特征集,将有助于未来的研究。
- 用于可操作警告识别的黄金功能集。它可以作为使用公共可用功能的实用指南。
- 可公开访问的特征数据集和用于提取特征的源代码。它们可以促进我们研究的复制,并作为评估其他 SAWI 或错误检测方法的基准。
本文的其余部分安排如下。第 2 节描述了实验中的特征。第 3 节介绍了实验的主题项目。第 4 节描述了我们如何准备实验数据。第 5 节展示了我们的实验设计。第 6 节介绍了我们的研究结果。第 7 节披露了对有效性的威胁。第 8 节调查相关工作。最后,我们在第 9 节总结了这篇论文。