Skip to main content
QUICK REVIEW

[論文レビュー] Learning Quick Fixes from Code Repositories

Reudismam Rolim de Sousa, Gustavo Soares|arXiv (Cornell University)|Mar 10, 2018
Software Engineering Research参考文献 22被引用数 17
ひとこと要約

本論文では、ソフトウェアリポジトリのリビジョン履歴から、迅速な修正として使用される共通のJavaコード編集パターンを自動で発見するツールRevisarを提案する。GitHubの9つの人気プロジェクトにおける具体的な編集をマイニングすることで、89の再利用可能なパターンを同定した。そのうち64%は、既存のコードアナライザーに存在しなかった。164名のプログラマーを対象とした調査では、89%が発見された修正を好むと回答し、提出されたプルリクエストの60%が承認された。これは実世界での実用性を裏付けている。

ABSTRACT

Code analyzers such as Error Prone and FindBugs detect code patterns symptomatic of bugs, performance issues, or bad style. These tools express patterns as quick fixes that detect and rewrite unwanted code. However, it is difficult to come up with new quick fixes and decide which ones are useful and frequently appear in real code. We propose to rely on the collective wisdom of programmers and learn quick fixes from revision histories in software repositories. We present REVISAR, a tool for discovering common Java edit patterns in code repositories. Given code repositories and their revision histories, REVISAR (i) identifies code edits from revisions and (ii) clusters edits into sets that can be described using an edit pattern. The designers of code analyzers can then inspect the patterns and add the corresponding quick fixes to their tools. We ran REVISAR on nine popular GitHub projects, and it discovered 89 useful edit patterns that appeared in 3 or more projects. Moreover, 64% of the discovered patterns did not appear in existing tools. We then conducted a survey with 164 programmers from 124 projects and found that programmers significantly preferred eight out of the nine of the discovered patterns. Finally, we submitted 16 pull requests applying our patterns to 9 projects and, at the time of the writing, programmers accepted 6 (60%) of them. The results of this work aid toolsmiths in discovering quick fixes and making informed decisions about which quick fixes to prioritize based on patterns programmers actually apply in practice.

研究の動機と目的

  • 静的解析ツールに統合可能な有用で頻繁に適用されるコード編集パターンを特定する課題に対処すること。
  • ツール開発者が恣意的なヒューリスティクスではなく、実際の開発者実践に基づいてクイックフィックスの優先順位を設定できるようにすること。
  • 複数のオープンソースプロジェクトにおける実世界のコード変更を分析することで、新たな経験的妥当性を持つクイックフィックスを発見すること。
  • アンケート調査と実際のプルリクエスト提出を通じて、マイニングされたパターンの実用性と開発者による好みを評価すること。

提案手法

  • Revisarは、バージョン管理履歴における連続するコードリビジョンを比較し、具体的なコード編集を抽出する。
  • 文法的抽象化技術を適用して、具体的な編集を再利用可能な編集パターンに一般化する。
  • 整合的かつ完全なマッチングアルゴリズムを用いて、類似した編集を抽象パターンにクラスタリングする。
  • 発見されたパターンを実行可能なクイックフィックスとして表現するため、Refasterに類似した構文を活用する。
  • 164名の開発者を対象とした大規模なアンケートと、本番リポジトリへの実際のプルリクエスト提出を通じて、パターンを検証する。

実験結果

リサーチクエスチョン

  • RQ1複数のオープンソースプロジェクトにまたがって開発者が頻繁に適用するコード編集パターンは何か?
  • RQ2実際のリビジョン履歴から発見されたクイックフィックスの有用性について、開発者はどのように評価するか?
  • RQ3マイニングされた編集パターンは、本番コードベースにどの程度成功裏に寄与できるか?
  • RQ4既存の一般的なコード分析ツールにすでに存在するパターンと比較して、発見されたパターンはどうなっているか?

主な発見

  • Revisarは、9つの人気GitHubプロジェクトのうち3つ以上で出現した89の異なる編集パターンを発見した。
  • 発見されたパターンの64%は、FindBugs、PMD、Error Proneなどの既存のコードアナライザーに存在しなかった。
  • 164名のプログラマーを対象としたアンケートでは、テストされた9つのクイックフィックスの大多数について89%が支持を示した。
  • 実際のプロジェクトに発見された修正を提出した16件のプルリクエストのうち、60%がメンテナーより承認された。
  • この手法は、GoogleのError Proneに欠落していた有名なnullセーフティパターン(例:"str.equals(obj)" を "obj.equals(str)" ではなく使用すること)を正常に同定できた。

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

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

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

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