SWE-Synth: Synthesizing Verifiable Bug-Fix Data to Enable Large Language Models in Resolving Real-World Bugs

TL;DR

SWE-Synth利用LLM模拟调试流程,合成可验证的高质量修复数据,提升开源模型性能。

cs.SE 🔴 高级 2025-04-21 44 次浏览
Minh V. T. Pham Huy N. Phan Hoang N. Phan Cuong Le Chi Tien N. Nguyen Nghi D. Q. Bui
自动程序修复 合成数据 大语言模型 软件工程自动化 验证机制

核心发现

方法论

该方法通过在仓库层面引入变异框架,利用LLM代理模拟调试流程,生成包含缺陷-修复对、测试用例和中间推理轨迹的高质量数据。核心算法包括基于测试覆盖的组件选择策略和LLM的代码重实现,结合强化学习和拒绝采样技术,确保生成的缺陷具有现实性和可验证性。数据生成流程包括组件掩码、LLM重实现、测试验证和轨迹采样,显著减少人工干预,扩展规模。实验中,训练模型在SWE-Bench Lite上达成2.3%的性能提升,验证了合成数据的有效性。

关键结果

  • 模型在SWE-Bench Lite上,训练于SWE-Synth数据的系统达成了13.0%的缺陷修复率,优于基于真实数据的13.0%,提升了2.3%。
  • 通过测试覆盖的组件采样策略,生成的缺陷更具代表性,模型泛化能力增强,特别是在复杂多变的调试场景中表现优异。
  • 结合中间推理轨迹的训练,模型在多步骤修复任务中表现出更强的可解释性和鲁棒性,验证了过程感知数据的重要性。

研究意义

该研究突破了合成缺陷数据的规模和真实性瓶颈,为开源模型提供了高质量训练资源,有助于推动自动程序修复技术的普及与应用。通过模拟人类调试流程,增强模型的推理能力和泛化能力,解决了现有真实数据稀缺、标注成本高的问题,具有重要的理论和实践价值。

技术贡献

提出基于LLM的仓库级变异框架,结合测试覆盖和中间轨迹采样,创新性地实现了大规模、可验证的缺陷-修复数据合成。引入强化学习和拒绝采样机制,提升数据质量和多样性。实现的SWE-Synth数据集在规模和真实性上优于传统手工标注,推动了自动程序修复模型的训练范式转变。

新颖性

首次提出利用LLM模拟调试流程,系统性合成具有中间推理轨迹的高质量缺陷修复数据。区别于Mutation或纯合成方法,强调过程感知和验证机制,显著提升数据的现实性和实用性,开创了合成数据在软件工程中的新应用路径。

局限性

  • 目前主要针对Python仓库,跨语言迁移仍需适配不同语言特性和测试机制,存在一定局限。
  • 依赖大量测试用例和覆盖信息,部分场景下测试数据不足可能影响缺陷生成效果。
  • 生成的缺陷虽更接近真实,但仍存在偏向特定类型缺陷的风险,泛化能力有待验证。

未来方向

未来将扩展多语言支持,结合更复杂的调试场景和多模态信息,提升缺陷多样性和真实性。探索结合强化学习优化缺陷生成策略,增强模型的自适应能力。同时,推动合成数据在工业界的实际应用,验证其在大规模软件系统中的效果。

AI 总览摘要

自动程序修复(APR)作为软件工程的核心挑战之一,长期以来受限于高质量训练数据的匮乏。真实缺陷-修复对的采集成本高、噪声多,难以满足大规模训练需求。为此,本文提出SWE-Synth框架,利用大语言模型(LLM)模拟调试流程,系统性合成具有中间推理轨迹和验证机制的高质量缺陷数据。

该方法通过在仓库层面引入变异策略,结合测试覆盖信息,选择关键组件进行重实现,生成多样化的缺陷样本。LLM在掩码组件后,根据上下文和测试反馈,重构潜在缺陷代码,形成缺陷-修复对。整个流程通过强化学习和拒绝采样确保缺陷的真实性和多样性。实验结果显示,训练于SWE-Synth数据的模型在SWE-Bench Lite上达成13%的修复率,比传统手工数据提升2.3%,验证了合成数据的有效性。

该研究不仅解决了开源模型训练数据不足的问题,还推动了调试流程模拟和中间推理轨迹的研究,为未来自动化软件工程提供了新思路。未来工作将扩展多语言支持,结合更复杂的调试场景,推动合成数据在工业界的实际应用,助力开源和企业软件的智能修复。

深度分析

研究背景

软件工程中的自动程序修复(APR)近年来取得显著进展,特别是在深度学习和大语言模型(LLM)应用方面。早期方法多依赖手工标注的缺陷-修复对,存在数据稀缺、噪声大、缺少中间推理轨迹等问题。SWE-Bench等基准推动了评估体系的建立,但真实数据的采集成本高,且难以规模化。合成数据成为一种潜在解决方案,但现有技术多局限于Mutation或简单变异,缺乏真实性和验证机制。近年来,LLM在Instruction Tuning和代码生成方面表现优异,为合成高质量调试数据提供了新可能。

核心问题

当前开源模型在自动程序修复任务中表现有限,主要受制于缺乏大规模、真实、可验证的训练数据。真实缺陷-修复对难以规模化采集,且存在噪声和不完整的中间推理信息。合成数据虽能扩展规模,但缺乏真实性和验证机制,导致模型难以学习复杂修复策略。此外,现有方法难以模拟人类调试的过程,缺少中间推理轨迹,限制了模型的泛化和可解释性。这些问题严重制约了自动化软件修复技术的推广。

核心创新

本研究提出基于LLM的仓库级变异框架,创新性地结合测试覆盖信息和中间推理轨迹,系统性合成高质量缺陷数据。具体创新包括:

1)引入测试覆盖驱动的组件选择策略,确保缺陷具有代表性和挑战性;

2)利用LLM进行代码重实现,模拟人类调试中的多样错误;

3)结合强化学习和拒绝采样机制,提升数据真实性和多样性;

4)生成包含中间推理轨迹的缺陷修复流程,增强模型的过程感知能力。这些创新突破了传统Mutation方法的局限,显著提升数据质量和规模,为自动程序修复提供了新范式。

方法详解

  • �� 组件选择:基于测试覆盖率或随机抽样,从仓库中挑选关键组件(函数、类等)进行变异。
  • �� 组件掩码:将选中组件的实现部分掩盖,保留接口和文档信息。
  • �� LLM重实现:输入掩码代码、上下文和测试信息,利用预训练的LLM(如Qwen 2.5)生成新版本,可能引入人类类似的错误。
  • �� 变异验证:将生成的变体插回仓库,运行测试用例,筛选出失败的缺陷样本。
  • �� 轨迹采样:通过强化学习或拒绝采样,采集多步骤修复轨迹,模拟调试过程。
  • �� 数据集构建:将缺陷-修复对、测试用例和中间轨迹整合,形成高质量训练集。
  • �� 训练模型:利用合成数据进行监督微调,提升自动修复能力。

实验设计

采用包含11个Python仓库的SWE-Gym数据集,采样多版本代码作为原始种子。利用Qwen 2.5模型生成缺陷变体,结合测试覆盖信息优化组件选择。对比随机和覆盖驱动策略的效果,评估模型在SWE-Bench Lite上的修复率。通过AB测试验证合成数据对模型性能的提升,分析不同轨迹采样策略的效果。实验还包括对缺陷多样性、复杂性和模型泛化能力的评估,确保方法的实用性和鲁棒性。

结果分析

在SWE-Bench Lite上,训练于SWE-Synth数据的模型达成13%的修复率,优于基于真实数据的13%,提升2.3%。测试覆盖驱动策略生成的缺陷更具代表性,模型在复杂调试场景中的表现优于随机策略。结合中间推理轨迹的训练显著增强模型的可解释性和鲁棒性,验证了过程感知数据的价值。多样化缺陷类型和规模的实验表明,该方法具有良好的扩展性和泛化能力,为自动程序修复提供了新思路。

应用场景

该方法可广泛应用于开源软件自动修复、企业级代码维护和持续集成流程中。通过合成高质量缺陷数据,提升模型在实际环境中的修复能力,降低人工调试成本。未来,结合工业界的测试平台和多语言支持,有望实现大规模自动化修复,推动软件工程的智能化升级。

局限与展望

目前主要针对Python,跨语言迁移仍需适配不同语言特性。依赖大量测试用例和覆盖信息,部分场景下数据不足影响效果。生成的缺陷虽更接近真实,但偏向特定缺陷类型,泛化能力仍需验证。未来需增强多语言支持和复杂调试场景的模拟能力,提升模型的适应性和鲁棒性。

通俗解读 非专业人士也能看懂

想象一个工厂里,工人们需要不断修理机器以保证生产顺利。每次机器出问题,工人会根据故障的表现,逐步找到问题所在,然后修理。现在,假设我们有一个智能助手,它可以模拟工人的思考过程,帮忙找出故障点,甚至自己尝试修理。SWE-Synth就像这个助手,它用一种特别的“学习方法”模拟工人修理机器的步骤,生成很多“故障-修理”案例。这些案例不仅真实,还能被验证,帮助训练其他智能修理工。这样一来,未来的修理工(模型)就能更快、更准地修好各种“机器”,大大提高工厂的效率。

简单解释 像给14岁少年讲一样

想象你在学校里,有个超级聪明的哥哥,他总能帮你解决各种难题。有时候,他会用不同的方法试试,看哪个最快解决问题。SWE-Synth就像这个哥哥,它用一种聪明的“模拟修理”方法,自己制造出很多“出错的代码”,然后再帮忙修好。它会模拟人类程序员的错误,比如写错了条件或者用错了函数,然后用自己的方法修正。这样,未来的程序员(模型)就能学到更多修复技巧,变得更厉害。这个方法不用人一一手动写缺陷,而是让电脑自己“制造”缺陷,既快又多样,帮助让软件变得更聪明、更可靠。

原文摘要

Large language models (LLMs) are transforming automated program repair (APR) through agent-based approaches that localize bugs, generate patches, and verify fixes. However, the lack of high-quality, scalable training datasets, especially those with verifiable outputs and intermediate reasoning traces-limits progress, particularly for open-source models. In this work, we present SWE-Synth, a framework for synthesizing realistic, verifiable, and process-aware bug-fix datasets at the repository level. SWE-Synth leverages LLM agents to simulate debugging workflows, producing not only bug-fix pairs but also test cases and structured repair trajectories. Compared to manually curated datasets, our method scales with minimal human effort while preserving contextual richness and correctness. Experiments show that models trained on SWE-Synth outperform those trained on real-world datasets by 2.3% on SWE-Bench Lite. Our results highlight the potential of synthetic, agent-generated data to advance the state of the art in APR and software engineering automation.

cs.SE cs.AI