[论文解读] Can Program Synthesis be Used to Learn Merge Conflict Resolutions? An Empirical Analysis
本文提出使用程序合成结合领域特定语言(DSL)来学习并自动化解决 C++ 代码中重复出现的合并冲突模式,通过每种模式提供 2–3 个示例,成功以 93.2% 的准确率解决了 11.4% 的冲突——尤其是 1–2 行的更改,实现了高效学习。
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 中常见的文本型合并冲突类型,Microsoft Edge 是一个高冲突频率的 Chromium 大型分支。
- 设计一种领域特定语言(DSL),以捕捉结构化合并冲突解决模式,特别适用于 C++ 文件。
- 评估通过少量示例进行编程示例(PBE)学习解决策略作为 DSL 程序的可行性。
- 评估所生成策略在真实世界合并冲突中的准确性和泛化能力,特别是在生产环境中的表现。
提出的方法
- 在为期 12 周的时间内,对 Microsoft Edge 中的合并冲突进行大规模实证研究,按文件类型、大小、位置和解决模式对冲突进行分类。
- 设计一种领域特定语言(DSL),包含用于从主分支或分叉分支中选择、修改和组合代码元素(如包含指令、宏)的抽象机制。
- 使用编程示例(PBE)方法,从每种模式的 2–3 个示例冲突中学习解决策略,并将其表示为 DSL 中的程序。
- 采用基于奥卡姆剃刀原则的排序函数,优先选择更小、更具通用性的程序,以减少过拟合。
- 实现一个合成引擎,生成候选程序,并通过已知的冲突解决结果验证其正确性。
- 通过添加新操作(如 AST 节点选择)扩展 DSL 和学习流程,以支持新类型的复杂冲突。
实验结果
研究问题
- RQ1在 Microsoft Edge 等大型协作 C++ 项目中,最常见的合并冲突类型和大小是什么?
- RQ2开发人员在解决小型结构化合并冲突时,遵循重复解决模式的程度如何?
- RQ3是否可以设计一种领域特定语言(DSL),以简洁方式表达 C++ 中常见的合并冲突解决策略?
- RQ4程序合成能否仅通过每种模式的 2–3 个示例,高准确率地学习并生成正确的解决策略?
- RQ5所生成的策略是否能在相似冲突上实现泛化,并在真实世界环境中实现高准确率?
主要发现
- Microsoft Edge 中约 28% 的合并冲突为 1–2 行更改,其中相当一部分涉及包含指令和宏。
- 在 C++ 冲突中,12.34% 与头文件和宏相关,且九种识别出的解决模式中有六种专门用于处理这些结构性更改。
- 所提出的 DSL 有效捕捉了常见解决策略,使程序合成能够为 11.4% 的 C++ 合并冲突生成正确解决方案。
- 在解决 1–2 行冲突时,所生成策略的准确率达到 93.2%,表明其在具有代表性的冲突子集上表现优异。
- 该方法对小型、重复性冲突有效,但在需要同时修改主分支和分叉分支代码部分的复杂情况下可能失效。
- 该方法具有可扩展性,可通过更新 DSL 并使用更多示例重新训练,以适应新冲突模式。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。