← 最新论文
💻 computer science

Combining Example-Based and Rule-Based Program Transformations to Resolve Build Conflicts

本文介绍了 BuCoR(构建冲突解决器),这是一种通过结合基于规则的预定义策略与基于示例的分支版本挖掘技术,来有效检测并自动解决软件合并过程中构建和测试冲突的新工具。

原作者: Sheikh Shadab Towqir, Fei He, Todd Mytkowicz, Na Meng

发布于 2026-02-13
📖 1 分钟阅读☕ 轻松阅读

原作者: Sheikh Shadab Towqir, Fei He, Todd Mytkowicz, Na Meng

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

这篇论文介绍了一个名为 BuCoR 的新工具,它的任务是帮助程序员解决在合并代码时遇到的“灾难性”错误。

为了让你更容易理解,我们可以把软件开发想象成两个厨师(左厨师和右厨师)在各自独立的厨房里,根据同一份原始食谱(基础版本)做不同的改良菜,最后要把这两份改良版合并成一道新菜的过程。

1. 什么是“构建冲突”?(The Problem)

想象一下:

  • 左厨师把食谱里的“糖”改成了“蜂蜜”。
  • 右厨师把食谱里的“糖”改成了“代糖”,并且把原本用来放糖的碗也拆了。

当你们试图把这两份食谱强行拼在一起时,新食谱里会出现混乱:有的地方写着“加蜂蜜”,有的地方写着“加代糖”,甚至有的地方还在找那个已经被拆掉的“糖碗”。

在编程世界里,这就是构建冲突(Build Conflict)。它不仅仅是文字上的打架(比如两个人在同一行写了不同的字),而是逻辑上的死胡同:代码拼在一起后,编译器会报错,程序根本跑不起来。

以前的工具只能像“文字校对员”一样,告诉你们“这里打架了”,但很少能告诉你们“怎么打平”。

2. BuCoR 是什么?(The Solution)

BuCoR 就像是一个拥有双重超能力的“超级主厨”。它不只会看文字,还能理解逻辑。它通过两种策略来解决问题:

策略 A:模仿大师(基于示例的转换 - BuCoR-E)

比喻:看“错题集”找灵感。

  • 原理:BuCoR 会去翻看左厨师或右厨师在之前的厨房里,有没有遇到过类似的问题,以及他们当时是怎么巧妙解决的。
  • 怎么做
    • 比如,左厨师之前把“糖”改成“蜂蜜”时,不仅改了名字,还顺手把装糖的勺子换成了木勺,把量杯的刻度也改了。
    • 现在合并时,BuCoR 发现右厨师把“糖”改成了“代糖”。于是它想:“既然左厨师改糖的时候连勺子和量杯都一起改了,那我也应该把右厨师的‘代糖’相关的勺子和量杯一起改过来,而不仅仅是改个名字。”
  • 优点:它能解决那些非标准、很复杂的问题,因为它是在“模仿”人类开发者的真实智慧。

策略 B:死记硬背规则(基于规则的转换 - BuCoR-R)

比喻:查阅“标准操作手册”。

  • 原理:有些冲突是非常常见的,就像“把 A 改成 B,所有叫 A 的地方都要改成 B"。BuCoR 预先背下了 16 种常见的“标准解法”。
  • 怎么做
    • 如果冲突只是简单的“改名”,BuCoR 会直接套用规则:“哦,这是 C1 类冲突,直接全局替换名字就行。”
  • 优点:速度快,处理那些老生常谈的问题非常高效。

3. BuCoR 是怎么工作的?(The Process)

BuCoR 的工作流程就像是一个侦探 + 建筑师的组合:

  1. 侦探阶段(检测冲突):它先不看代码能不能跑,而是像侦探一样,拿着放大镜对比三份食谱(原版、左版、右版),找出哪里逻辑不通。
  2. 绘图阶段(构建图谱):它把代码里的类、方法、变量画成一张巨大的关系网(图谱)。这就像把厨房里的所有食材、工具、步骤画成一张复杂的地图,这样它就能看清“糖”和“勺子”之间到底有什么关系。
  3. 双管齐下(解决问题)
    • 它先试试模仿大师(BuCoR-E):在地图里找有没有类似的“改错案例”,如果有,就照着画。
    • 如果没找到案例,它就试试标准手册(BuCoR-R):看看是不是那种常见的 16 种情况之一,直接套用公式。
  4. 最终输出:它会把修改好的新食谱(代码)交给程序员检查。

4. 效果怎么样?(The Results)

研究人员拿 BuCoR 去测试了 88 个真实的、棘手的代码冲突案例(涵盖了 21 种不同的“灾难”类型)。

  • 覆盖率:BuCoR 成功给出了至少一种解决方案的有 65 个(占 74%)。也就是说,大部分冲突它都能想办法。
  • 准确率:在它给出的所有方案中,有 52% 是完全正确且符合人类开发者意图的。
    • 其中,“模仿大师”策略(BuCoR-E)虽然尝试得少,但准确率高达 75%(因为它更懂上下文)。
    • “标准手册”策略(BuCoR-R)尝试得多,但准确率只有 39%(因为有些情况不能死板套用)。

结论:这两个策略是互补的。就像你既需要“灵活变通的创意”,也需要“稳扎稳打的规则”,BuCoR 把它们结合在了一起。

总结

这篇论文的核心思想是:解决代码合并冲突,不能只靠死板的规则,也不能只靠死记硬背。

BuCoR 就像是一个聪明的助手,它既懂得举一反三(从过去的错误中学习如何修复),又懂得按章办事(利用已知的标准解法)。它不仅能告诉程序员“这里错了”,还能像一位经验丰富的老厨师一样,告诉你“把糖换成蜂蜜,顺便把勺子也换了,这样菜才好吃”。

这大大减轻了程序员在合并代码时的痛苦,让软件更新变得更顺畅、更安全。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →