中文

Getafix:学习自动修复缺陷

软件工程 2019-11-22 v5

摘要

静态分析器通过警告反复出现的缺陷类别,帮助尽早发现缺陷。尽管在实践中修复这些缺陷在很大程度上仍是人工任务,我们观察到某一特定缺陷类别的修复往往是重复的。本文通过学习过往修复来解决自动修复常见缺陷实例的问题。我们提出 Getafix,一种生成类人修复、且速度足以在与获取静态分析结果所需时间成正比的时限内给出修复建议的方法。Getafix 基于一种新颖的层次聚类算法,将修复模式归纳为从通用到特定的层次结构。Getafix 不使用计算代价高昂的候选修复大空间搜索,而是采用一种简单而有效的排序技术,利用代码变更的上下文为给定缺陷选择最合适的修复。我们的评估将 Getafix 应用于 1,268 个由流行 Java 静态分析器报告的六类缺陷修复,包括空指针解引用、不正确的 API 调用以及特定语言构造的误用。该方法将人工所写修复作为首位建议的预测比例在 12% 到 91% 之间(取决于缺陷类别)。前 5 个建议包含 1,268 个缺陷中 526 个的修复。此外,我们报告了在 Facebook 内部部署该方法的情况,它提升了数十亿人使用软件的可靠性。据我们所知,Getafix 是首个从过往人工修复中学习修复模式以生成类人修复、并已工业部署的自动化缺陷修复工具。

关键词

引用

@article{arxiv.1902.06111,
  title  = {Getafix: Learning to Fix Bugs Automatically},
  author = {Johannes Bader and Andrew Scott and Michael Pradel and Satish Chandra},
  journal= {arXiv preprint arXiv:1902.06111},
  year   = {2019}
}