中文

硬分叉场景下的零样本补丁移植自动化

软件工程 2024-04-30 v1

摘要

分叉是代码复用的一种常见方式,它允许开发者通过复制和修改现有代码库来创建软件变体(称为硬分叉)。尽管有诸多好处,分叉也导致了软件维护中的重复劳动。开发者需要跨硬分叉移植补丁,以修复相似缺陷或实现相似功能。由于源项目和硬分叉之间存在差异,补丁移植变得复杂,需要针对同一功能的不同实现进行调整。在这项工作中,我们首次尝试在零样本设置下自动化硬分叉的补丁移植。我们首先对过去十年间从Vim移植到Neovim的补丁进行了实证研究,以了解补丁移植的必要性和当前实践中的问题。然后,我们提出了一种基于大型语言模型(LLM)的方法(称为PPatHF),以函数为单位自动为硬分叉移植补丁。具体来说,PPatHF由精简模块和移植模块组成。给定参考项目中某函数补丁前后的版本以及目标项目中的对应函数,精简模块会先精简输入函数,移除与补丁相关性较低的代码。随后,移植模块利用LLM将补丁应用到目标项目的函数上。我们在从Vim移植到Neovim的310个补丁上评估了PPatHF。实验结果表明,PPatHF显著优于基线方法。具体而言,PPatHF能正确移植131个(42.3%)补丁,并能自动化开发者手动移植补丁所需工作的57%。

关键词

引用

@article{arxiv.2404.17964,
  title  = {Automating Zero-Shot Patch Porting for Hard Forks},
  author = {Shengyi Pan and You Wang and Zhongxin Liu and Xing Hu and Xin Xia and Shanping Li},
  journal= {arXiv preprint arXiv:2404.17964},
  year   = {2024}
}

备注

Accepted by ISSTA 2024