这个神器你知道吗?能自动修复Python中的BUG!谁还去改BUG啊?

本文介绍微软Cloud+AI部门提出的一种自动debug工具DeepDebug,它使用预训练的transformer模型修复Python代码中的错误。研究者通过反向翻译模型训练,结合调试信息如栈追踪和打印语句,提高了模型的修复能力。实验结果显示,DeepDebug在QuixBugs基准上的修复成功率显著提高,误报率和超时问题也得到改善。
摘要由CSDN通过智能技术生成

还在为不断的 debug 代码烦恼吗?

本地化 Bug 并修复程序是软件开发过程中的重要任务。在本篇论文中,来自微软 Cloud+AI 部门的研究者介绍了 DeepDebug,一种使用大型预训练模型 transformer 进行自动 debug 的方法。

首先,研究者基于 20 万个库中的函数训练了反向翻译模型。接下来,他们将注意力转向可以对其执行测试的 1 万个库,并在这些已经通过测试的库中创建所有函数的 buggy 版本。这些丰富的调试信息,例如栈追踪和打印语句,可以用于微调已在原始源代码上预训练的模型。最后,研究者通过将上下文窗口扩展到 buggy 函数本身外,并按优先级顺序添加一个由该函数的父类、导入、签名、文档字符串、方法主体组成的框架,从而增强了所有模型。

在 QuixBugs 基准上,研究者将 bug 的修补总数增加了 50%以上,同时将误报率从 35%降至 5%,并将超时(timeout)从 6 小时减少到 1 分钟。根据微软自己的可执行测试基准,此模型在不使用跟踪的情况下首次修复了 68%的 bug;而在添加跟踪之后,第一次尝试即可修复 75%的错误。为评估可执行的测试,作者接下来还将开源框架和验证集。

图片

论文链接:https://arxiv.org/pdf/2105.09352.pdf

引言

自动程序修复中的主要范例是「生成和验证」方法。研究者遵循该方法,假设存在可以识别 bug 存在的一组测试函数,然后本地化 bug 并考虑候选的修补程序,直到找到满足测试的补丁程序为止。

在整个实验过程中,研究者使用了错误已被本地化为单个 buggy 方法的合成 bug,将其与其他上下文(例如函数文件中的上下文以及暴露 buggy 函数的栈追踪)作为输入,并将该输入提供给尝试生成修复好的函数的序列到序列 transformer。

研究者在部署方案中还尝试使用了栈追踪来本地化 bug。目前,研究者基于来自开发人员自己的代码行的栈追踪来应用一种简单的启发法,因为最近调用的行是最可疑的。在未来,作者还有兴趣使用可以对给定栈追踪的方法进行重新排序的编码器 transformer 来改进启发法。

如下图所示,利用了经过广泛预训练的 transformer,研究者使用了用于微调 PyMT5 的相同的 DeepDev-py 序列到序列模型。他们首先使用 commit 数据来训练基线 bug 修补程序模型和 bug 创建模型。Bug 创建(bug-creator)模型向 DeepDebug(反向翻译)提供的数据量是原来的 20 倍。最后,研究者针对具有可执行测试并产生追踪的函数中的神经错误微调了此模型,从而获得其最终的 DeepDebug(追踪)。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python是世界上最好的语言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值