Skip to main content
QUICK REVIEW

[论文解读] How Often Do Single-Statement Bugs Occur? The ManySStuBs4J Dataset

Rafael-Michael Karampatsis, Charles Sutton|arXiv (Cornell University)|May 30, 2019
Software Testing and Debugging Techniques参考文献 26被引用 23
一句话总结

本文介绍了 ManySStuBs4J 数据集,该数据集包含来自 1,000 个流行开源 Java 项目的 153,652 个单语句错误修复变更,已针对 16 种常见错误模板进行标注。研究发现,33.47% 的这些单语句错误与已知模板匹配,表明大量简单错误可通过一组预定义模式修复,其出现频率估计为每 1,600–2,500 行代码出现一次此类错误。

ABSTRACT

Program repair is an important but difficult software engineering problem. One way to achieve acceptable performance is to focus on classes of simple bugs, such as bugs with single statement fixes, or that match a small set of bug templates. However, it is very difficult to estimate the recall of repair techniques for simple bugs, as there are no datasets about how often the associated bugs occur in code. To fill this gap, we provide a dataset of 153,652 single statement bug-fix changes mined from 1,000 popular open-source Java projects, annotated by whether they match any of a set of 16 bug templates, inspired by state-of-the-art program repair techniques. In an initial analysis, we find that about 33% of the simple bug fixes match the templates, indicating that a remarkable number of single-statement bugs can be repaired with a relatively small set of templates. Further, we find that template fitting bugs appear with a frequency of about one bug per 1,600-2,500 lines of code (as measured by the size of the project's latest version). We hope that the dataset will prove a resource for both future work in program repair and studies in empirical software engineering.

研究动机与目标

  • 为解决生产代码中单语句错误频率和普遍性缺乏真实世界数据的问题。
  • 通过提供大规模、已标注的真实世界简单错误数据集,实现对程序修复技术的准确评估。
  • 通过测量此类错误在实际中出现的频率,估算基于模板的修复方法的召回率。
  • 支持未来在自动化调试、故障定位以及代码修复的机器学习方法方面的研究。

提出的方法

  • 利用版本控制历史从 1,000 个流行开源 Java Maven 项目中挖掘,提取单语句错误修复变更。
  • 使用 16 种基于前沿程序修复技术的预定义错误模板,对每个修复进行标注。
  • 聚焦于修复前后均可编译的错误,因其性质简单而被标记为“简单愚蠢错误”(SStuBs)。
  • 创建两个数据集版本:一个较小版本(25,539 个变更),仅包含可使用 Maven 构建且具备测试套件的项目;一个更大版本(153,652 个变更),涵盖全部 1,000 个项目。
  • 使用项目规模(最新版本)估算每行代码中 SStuB 的出现频率。
  • 通过 Zenodo 和公共 GitHub 仓库发布数据集,以支持可复现性和再利用。

实验结果

研究问题

  • RQ1在真实世界开源 Java 项目中,单语句错误出现的频率如何?
  • RQ2单语句错误修复中有多少比例与一组预定义的常见修复模板匹配?
  • RQ3SStuB 的出现频率如何随项目规模(以代码行数衡量)而变化?
  • RQ4基于模板的修复技术在真实世界数据上能达到多高的召回率?
  • RQ5该数据集在评估基于机器学习的故障定位与修复方法方面有多大的实用性?

主要发现

  • 在大版本数据集中,153,652 个单语句错误修复中约有 33.47% 与 16 个预定义修复模板中的至少一个匹配。
  • 小版本数据集的匹配率同样为 33.04%,表明模板覆盖在各类项目中具有一致性。
  • 在小版本数据集中,SStuB 的出现频率约为每 1,600 行代码一次;在大版本数据集中约为每 2,500 行代码一次。
  • 大版本数据集包含 63,923 个 SStuB 实例,小版本包含 10,231 个,为评估提供了充足的数据支持。
  • 该数据集可通过 Zenodo 和 GitHub 公开获取,支持程序修复和实证软件工程领域的可复现研究。
  • 部分项目中存在测试套件,使得基于测试的修复与故障定位技术的评估成为可能。

更好的研究,从现在开始

从论文设计到论文写作,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。