Skip to main content
QUICK REVIEW

[论文解读] DEAR: A Novel Deep Learning-based Approach for Automated Program Repair

Yi Li, Shaohua Wang|arXiv (Cornell University)|May 4, 2022
Software Testing and Debugging Techniques被引用 11
一句话总结

DEAR 提出了一种基于深度学习的新型自动化程序修复方法,通过结合基于谱的故障定位(SBFL)、BERT 微调和数据流分析,识别依赖性代码变更,以解决多 hunk、多语句的错误。它采用带循环训练和注意力机制的两级树形 LSTM 模型,生成准确且上下文感知的修复方案,在 Defects4J 上比最先进的深度学习驱动的 APR 模型多修复 42% 至 683% 的错误,并在 BigFix 和 CPatMiner 上显著提升了对多 hunk/多语句错误的修复能力。

ABSTRACT

The existing deep learning (DL)-based automated program repair (APR) models are limited in fixing general software defects. % We present { ool}, a DL-based approach that supports fixing for the general bugs that require dependent changes at once to one or multiple consecutive statements in one or multiple hunks of code. % We first design a novel fault localization (FL) technique for multi-hunk, multi-statement fixes that combines traditional spectrum-based (SB) FL with deep learning and data-flow analysis. It takes the buggy statements returned by the SBFL model, detects the buggy hunks to be fixed at once, and expands a buggy statement $s$ in a hunk to include other suspicious statements around $s$. We design a two-tier, tree-based LSTM model that incorporates cycle training and uses a divide-and-conquer strategy to learn proper code transformations for fixing multiple statements in the suitable fixing context consisting of surrounding subtrees. We conducted several experiments to evaluate { ool} on three datasets: Defects4J (395 bugs), BigFix (+26k bugs), and CPatMiner (+44k bugs). On Defects4J dataset, { ool} outperforms the baselines from 42\%--683\% in terms of the number of auto-fixed bugs with only the top-1 patches. On BigFix dataset, it fixes 31--145 more bugs than existing DL-based APR models with the top-1 patches. On CPatMiner dataset, among 667 fixed bugs, there are 169 (25.3\%) multi-hunk/multi-statement bugs. { ool} fixes 71 and 164 more bugs, including 52 and 61 more multi-hunk/multi-statement bugs, than the state-of-the-art, DL-based APR models.

研究动机与目标

  • 解决现有基于深度学习的自动化程序修复(APR)工具仅能修复单条语句的局限性,无法有效处理跨多条语句或多个 hunk 的依赖性变更。
  • 通过结合基于谱的故障定位(SBFL)、深度学习与数据流分析,提升多 hunk、多语句错误的故障定位准确性。
  • 设计一种组合式、分而治之的策略,以学习并生成跨越多个抽象语法树(AST)子树的复杂代码转换。
  • 通过引入注意力机制与循环训练,增强两级树形 LSTM 模型,提升对多语句修复中结构性代码变更的学习能力。
  • 实现对一般软件缺陷的端到端修复,这些缺陷需要在多个代码 hunk 之间协调变更,而当前基于深度学习的 APR 模型难以有效处理。

提出的方法

  • 将基于谱的故障定位(SBFL)与微调后的 BERT 结合,识别可疑语句,并确定需要联合修复的代码 hunk。
  • 设计一种扩展算法,利用 RNN 将语句分类为错误语句,并通过数据流分析将错误区域扩展至包含依赖的连续语句。
  • 使用基于 AST 的差异分析,提取错误代码与修复代码之间的细粒度、子树级别映射,实现精确对齐与转换学习。
  • 实现一种两级树形 LSTM 模型,以分层方式处理 AST 子树,采用分而治之策略学习各个子树的转换。
  • 通过注意力机制与循环训练协调 LSTM,提升在学习复杂多语句代码变更时的泛化能力与鲁棒性。
  • 通过语义检查器和语言无关的表示形式进行后处理,确保修复结果的有效性,并支持向其他编程语言的可扩展性。

实验结果

研究问题

  • RQ1结合 SBFL、深度学习与数据流分析的混合故障定位技术,能否有效识别需要协调修复的多 hunk、多语句错误?
  • RQ2带有注意力机制与循环训练的两级树形 LSTM 模型,能否学习并生成针对不同 hunk 中多个依赖语句的准确、上下文感知的代码转换?
  • RQ3DEAR 在修复一般性软件缺陷方面,尤其是多 hunk/多语句错误,相较于现有基于深度学习的 APR 模型,其性能提升程度如何?
  • RQ4与最先进的基线模型相比,DEAR 在处理来自大规模工业数据集(如 BigFix 和 CPatMiner)的复杂真实错误时,表现如何?
  • RQ5组合式、子树级别的转换学习对自动化程序修复模型的准确性与泛化能力有何影响?

主要发现

  • 在 Defects4J 数据集上,当仅考虑生成的 top-1 修复补丁时,DEAR 比现有的基于深度学习的 APR 基线模型多修复了 42% 至 683% 的错误。
  • 在 BigFix 数据集上,使用 top-1 修复补丁时,DEAR 比次优的基于深度学习的 APR 模型多修复了 31 至 145 个错误。
  • 在 CPatMiner 数据集上,DEAR 比最先进的基于深度学习的 APR 模型多修复了 169 个总错误和 52 个多 hunk/多语句错误。
  • 在 CPatMiner 中总共修复的 667 个错误中,DEAR 成功修复了 169 个(占 25.3%)涉及多个 hunk 和多个语句的错误,比基线模型多修复了 61 个此类复杂错误。
  • 在故障定位中整合数据流分析与 BERT 微调,显著提升了对需要联合修复的错误 hunk 的识别能力,减少了误报。
  • 循环训练与注意力增强的两级树形 LSTM 架构,提升了模型学习复杂、分层代码转换的能力,尤其在多语句修复场景中表现更优。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。