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
ひとこと要約

本稿では、1,000の代表的なオープンソースJavaプロジェクトから抽出した153,652件の単一文書のバグ修正変更を含むManySStuBs4Jデータセットを紹介する。これらの変更は16種類の一般的なバグテンプレートに基づいてアノテーションされている。その結果、これらの単一文書のバグの33.47%が既知のテンプレートと一致しており、単純なバグの大部分が少数の事前定義されたパターンで修復可能であることが示唆される。バグの頻度は約1行あたり1,600〜2,500行に1件程度であると推定される。

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プロジェクトをマイニングし、単一文書のバグ修正変更を抽出する。
  • 最先端のプログラム修復技術にインspiredされた16種類の事前定義済みバグテンプレートのうち、1つ以上を各修正にアノテーションする。
  • 修復前後でコンパイルが成功するバグに焦点を当て、その単純さから「単純なバカバグ」(SStuBs)と呼ばれる。
  • 2つのデータセットバージョンを生成する:Mavenビルド可能でテストスイートを備えたプロジェクトに限定した小規模版(25,539件の変更)と、全1,000プロジェクトをカバーする大規模版(153,652件の変更)。
  • プロジェクトのサイズ(最新バージョン)を用いて、SStuBsの1行あたりの頻度を推定する。
  • 再現可能性と再利用性を確保するため、ZenodoおよびパブリックGitHubリポジトリを通じてデータセットをリリースする。

実験結果

リサーチクエスチョン

  • RQ1実世界のオープンソースJavaプロジェクトにおいて、単一文書のバグはどの程度の頻度で発生するか?
  • RQ2単一文書のバグ修正のうち、事前に定義された一般的な修復テンプレートと一致する割合はどの程度か?
  • RQ3SStuBの発生頻度は、コード行数(LOC)で測定したプロジェクトサイズにどのように比例するか?
  • RQ4テンプレートベースの修復手法が実世界のデータに対してどの程度の再現率を達成できるか?
  • RQ5このデータセットは、機械学習に基づく障害局所化および修復手法の評価にどの程度有用か?

主な発見

  • 大規模データセットの153,652件の単一文書バグ修正のうち、約33.47%が16種類の事前定義済み修復テンプレートの少なくとも1つと一致している。
  • 小規模データセットバージョンでは類似する一致率33.04%を示し、プロジェクトタイプを問わず一貫したテンプレートカバレッジが得られている。
  • 小規模データセットではSStuBが約1行あたり1,600行に1件、大規模データセットでは1行あたり2,500行に1件の頻度で発生している。
  • 大規模バージョンには63,923件のSStuBインスタンス、小規模バージョンには10,231件のSStuBインスタンスが含まれており、評価に十分なデータ量を提供している。
  • データセットはZenodoおよびGitHubを通じてパブリックに公開されており、プログラム修復および実証的ソフトウェア工学分野の再現性のある研究を支援している。
  • 一部のプロジェクトにテストスイートが存在するため、テストに基づく修復および障害局所化手法の評価が可能である。

より良い研究を、今すぐ始めましょう

論文設計から論文執筆まで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。