论文信息

  • 题目:Template-Guided Program Repair in the Era of Large Language Models
  • 链接:ICSE

聚焦问题:

基于模板的修复方法被盲目使用及其覆盖范围的不足使得该方法在领域内存在局限,此外,在零样本学习情境下使用小型LLMs也被证明并非最优选择。集体来说,其主要缺点在于:1. 不加选择地使用模板,不加选择地使用所有可用的模板。具体来说,GAMMA利用基于ast的匹配方法来选择修复模板,这有可能导致模型错过正确的补片合成机会,加剧补片过拟合问题。2. 模板覆盖不足:基于模板的APR工具的有效性本质上受到其模板范围的限制。3. 零样本下小规模llm的局限性,而在微调范式下具有模板的十亿级llm的潜力尚未开发。
可行性建立在三个共识上面:

  1. 训练模型对模板进行排名。可以开发一个模板排名模型,利用LLM的代码理解能力。
  2. 神经机器翻译(NMT)工作流通过将修复任务概念化为翻译而不是填充任务来规避模板覆盖问题。在这个工作流程中,我们可以设计一个特殊的模板来表示传统模板集之外的bug修复,并采用NMT模型来学习这些复杂的修复行为。
  3. 应用NMT微调策略可以克服与零样本学习范式相关的局限性。考虑到llm本身不是为修复任务量身定制的,我们可以在微调期间将模板的错误修复知识传授给llm。此外,NMT工作流程的灵活性使其能够适应各种模型架构,而不局限于基于mlm的llm。
    NTR将修复任务分为模板选择和补丁生成两个阶段。1)在模板选择阶段,NTR将其制定为多类分类问题,并微调轻量级llm作为模板选择模型,进行模板排序。2)在补丁生成阶段,我们采用NMT工作流,并将选择的模板格式化为指导。我们选择了一个具有数十亿个参数的LLM,并在NMT工作流程下对其进行微调。在微调过程中,我们引入符号来表示有bug的代码、模板和固定的代码。这使得llm能够以自回归的方式合成补丁,自然地遵循所选模板的逻辑。为了解决模板覆盖问题,我们建立了一个特殊的模板以捕获超出现有模板范围的修复行为。

NTR

NTR的工作流分为模型微调和模型推理两个主要部分,设计选择上有两个模块,首先训练一个模板选择模型,对有bug的代码优先考虑合适的修复模板,然后训练一个补丁生成模型,在模板的指导下进行补丁合成。

模型微调

模板排序和补丁生成。

  1. 模板选择模型训练:要考虑模板的有效性,所以使用NMT微调范式来训练一个模板选择模型。训练步骤:
  • Bug-修复对提取:提取出函数级别的BFP(Bug-Fix pair)。
  • 模板提取,获取bfp后针对性产生修复与模板,基于最先进的基于模板的APR工作进行这一步。
  • 模型训练和微调,训练目标在于最小化模板选择模型的交叉熵。
    在模板选择模型的训练过程中,我们使用小规模的llm(如CodeT5)作为基础模型。
  1. 补丁生成模型训练
    通过对模板选择和补丁生成进行独立优化,从而独特地协调模板选择和补丁生成。在补丁生成阶段,我们特别将选择的修复模板与有bug的代码一起作为输入,而将固定的代码单独指定为输出。这种双输入方法使贴片合成过程更接近于所选模板提供的指导。在微调阶段,我们将bug代码、模板和修复代码格式化,如下:
    ![](屏幕截图 2025-12-15 155714.png)