Skip to main content
QUICK REVIEW

[論文レビュー] Can Program Synthesis be Used to Learn Merge Conflict Resolutions? An Empirical Analysis

Rangeet Pan, Vu Le|arXiv (Cornell University)|Mar 2, 2021
Software Engineering Research参考文献 26被引用数 4
ひとこと要約

本論文では、ドメイン固有言語(DSL)を用いたプログラム合成を提案し、C++ コードにおける繰り返し発生するマージ競合パターンの学習と自動化を実現する。1つのパターンあたり2〜3例の例解消から学習することで、11.4% のマージ競合のうち93.2% を解消可能にした。特に1〜2行の変更に特化したマージ競合に対して高い性能を示した。

ABSTRACT

Forking structure is widespread in the open-source repositories and that causes a significant number of merge conflicts. In this paper, we study the problem of textual merge conflicts from the perspective of Microsoft Edge, a large, highly collaborative fork off the main Chromium branch with significant merge conflicts. Broadly, this study is divided into two sections. First, we empirically evaluate textual merge conflicts in Microsoft Edge and classify them based on the type of files, location of conflicts in a file, and the size of conflicts. We found that ~28% of the merge conflicts are 1-2 line changes, and many resolutions have frequent patterns. Second, driven by these findings, we explore Program Synthesis (for the first time) to learn patterns and resolve structural merge conflicts. We propose a novel domain-specific language (DSL) that captures many of the repetitive merge conflict resolution patterns and learn resolution strategies as programs in this DSL from example resolutions. We found that the learned strategies can resolve 11.4% of the conflicts (~41% of 1-2 line changes) that arise in the C++ files with 93.2% accuracy.

研究の動機と目的

  • 大規模な共同開発コードベースにおける繰り返し発生するマージ競合解消パターンを学習・自動化するために、プログラム合成が有効であるかを調査すること。
  • Microsoft Edge(高い競合頻度を示すChromiumの大型フォーク)における一般的なテキスト的マージ競合の種類を特定・分類すること。
  • 特にC++ ファイルを対象として、構造的マージ競合解消パターンを捉えることができるドメイン固有言語(DSL)を設計すること。
  • 最小限の例から、プログラミング・バイ・エクサムプ(PBE)を用いてDSL内のプログラムとして解消戦略を学習する可能性を評価すること。
  • 実際の生産環境におけるマージ競合に対して、合成された戦略の正確性と一般化能力を評価すること。

提案手法

  • 12週間にわたるMicrosoft Edgeにおけるマージ競合の包括的実地調査を実施し、ファイルタイプ、サイズ、場所、解消パターンごとに競合を分類した。
  • 主ブランチまたはフォークブランチからのコード要素(例:includeディレクティブ、マクロ)の選択・変更・合成を抽象化するDSLを設計した。
  • 1パターンあたり2〜3例のマージ競合例から、プログラミング・バイ・エクサムプ(PBE)を用いて解消戦略をDSL内のプログラムとして学習した。
  • オッカムの剃刀に基づくランク付け関数を用い、より小さい・より一般的なプログラムを優先することで過剰適合を低減した。
  • 候補となるプログラムを生成し、既知の競合解消結果と照合することで検証を行う合成エンジンを実装した。
  • ASTノード選択などの新しい操作を追加することで、DSLと学習パイプラインを拡張し、複雑な競合タイプに対応した。

実験結果

リサーチクエスチョン

  • RQ1Microsoft Edgeのような大規模な共同開発C++プロジェクトにおいて、最も頻発するマージ競合の種類とサイズは何か?
  • RQ2開発者は、小さな構造的マージ競合に対して、どの程度再利用可能な解消パターンに従っているか?
  • RQ3C++における一般的なマージ競合解消戦略を簡潔に表現できるドメイン固有言語(DSL)を設計できるか?
  • RQ41パターンあたり2〜3例の例から、プログラム合成が正しく解消戦略を学習・生成できるか?
  • RQ5合成された戦略は類似する競合に対して一般化可能であり、実世界の環境でも高い正確性を示せるか?

主な発見

  • Microsoft Edgeにおける全マージ競合の約28%が1〜2行の変更であり、その大部分はincludeディレクティブやマクロに関連している。
  • C++の競合のうち12.34%がヘッダファイルやマクロに関連しており、特定された9つの解消パターンのうち6つがこれらの構造的変更に特化している。
  • 提案されたDSLは一般的な解消戦略を的確に捉えており、11.4%のC++マージ競合に対して正しく解消可能なプログラム合成を可能にした。
  • 1〜2行の競合に対しては93.2%の正確さを達成し、代表的な競合サブセットにおいて優れた性能を示した。
  • 本手法は小さな繰り返し発生する競合に対して有効であるが、主ブランチおよびフォークブランチ両方のコードセクションを変更する必要がある複雑なケースでは失敗する可能性がある。
  • 本手法は拡張可能であり、DSLの更新と追加例の再トレーニングにより、新たなパターンに対応できる。

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

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

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

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