打破并修复:面向程序修复的无监督学习
本文提出了一种基于程序 -- 反馈图的图神经网络及一种用非监督学习方法构建大量程序修复样例的自监督学习范式。最终应用的 DrRepair 算法在两个应用领域上都取得了比之前的工作更好的修复效果。
May, 2020
BugLab 是一种基于机器学习的、自监督学习为主的程序分析方法,通过两个模型共同训练,可以有效地发现和修复代码中的错误,提高了 2374 个真实缺陷数据集的检测和修复准确度,同时发现了 19 个以前未知的错误。
May, 2021
DeepDebug 是数据驱动的程序修复方法,其可以从 GitHub 代码库中挖掘的实际 Java 方法中学习检测和修复错误的方法。通过将错误修补构建为序列到序列的学习任务,它实现了两个步骤,即去噪预训练和有监督的微调。本方法显示出比以前的工作更好的异常检测能力,并且可以使用通用解析器进行语言无关的方法。
Apr, 2021
本文介绍了一个名为 “Build-it Break-it Fix-it”(BIBIFI)的软件安全竞赛,该竞赛旨在评估构建安全软件的能力,而不仅仅是破坏它。竞赛评选最佳的构建者和破坏者,并发现使用 CC 编程语言、掌握多种编程语言、编写较短程序等因素与成功构建安全软件和破坏不安全软件的相关性。
Jun, 2016
本文提出一种基于 CodeBERT 的自动化程序修复方法,使用 ManySStuBs4J 小和大数据集对模型进行微调,能够准确地预测开发人员在 19-72%的情况下实现修复代码,并可以在不到一秒钟的时间内自动生成修复程序。
Mar, 2021
提出了一种基于预训练编程语言模型 CodeT5 的新型统一 “Detect-Localize-Repair” 框架 CodeT5-DLR,它包括三个目标,即 bug 检测、定位和程序修复,并在 Java 和 Python 的两个新收集的行级调试数据集上进行了评估。结果表明,该模型在 NLP 和软件工程领域的现有基线上显著优于其他机器学习方法。
Nov, 2022
本文介绍了一种名为因果程序修复(CPR)的可解释性方法,该方法基于序列到序列模型和因果推断,可以在自动程序修复的过程中生成决策解释的相关组成部分、通过数据增广来推断这些关系、生成响应的令牌图,并解决划分问题。实验表明,CPR 可以生成合理的解释因果图,并提高自动程序修复的错误修正性能。
May, 2022
通过引入 extit {弱监督} 学习范式并提出一种新的 extit {修正学习} 框架(LBF),如果深度神经网络生成的 ' 错误 ' 解决方案树,通过符号推理实现从上到下探索并推断出最可能的修正措施,进而使其能够生成多样性的数学问题解法,相较于完全监督方法,所提出的 LBF 框架在弱监督学习上表现出色并且取得了可媲美的准确率。
Dec, 2020
利用深度学习技术推断代码相似度来优先排序、转化代码库中的语句以生成补丁。DeepRepair 能够快速生成可编译的补丁,然而不比现有的缺陷修复技术更快地生成测试足够的补丁,但结果表明,该方法能够找到现有的基于冗余假设缺陷修复方法无法发现的补丁。
Jul, 2017
草案提出了 BugFarm,用于将任意代码转化为多个复杂的错误。BugFarm 利用 LLM(语言模型)在多个位置(难以修复)突变代码。为了确保多个修改不会显着改变代码的表示,BugFarm 分析了底层模型的注意力,并指示 LLMs 仅更改注意力最低的位置(难以检测)。我们对 BugFarm 生成的 320k + 错误进行了全面评估,这些错误是通过学习型错误预测方法难以检测到的,并且通过 SOTA(优秀的)学习型程序修复技术难以修复的。
Oct, 2023