这篇文章介绍了DeepDebug,一种利用大型预训练Transformer模型来自动修复Python代码中错误的方法。该方法结合了堆栈跟踪、反向翻译和代码骨架等技术,旨在提高程序修复的准确性和效率。

主要内容:

  1. 方法概述
    • 合成错误生成:通过训练一个错误生成模型,利用反向提交数据生成合成错误,从而扩增训练数据。
    • 反向翻译:使用反向翻译技术在大量无错误代码上生成错误代码,进一步增强模型的训练数据。
    • 代码骨架:在修复代码时,不仅关注错误的函数,还包含类定义、导入、注释等上下文信息,以提高修复的准确性。
  2. 数据集
    • 预训练数据:使用20万个公开的Python仓库进行预训练。
    • 提交数据:从10万个仓库中提取包含“fix”关键词的提交,用于训练错误生成和修复模型。
    • 可执行测试:从1万个包含测试的仓库中提取方法,并生成带有错误的版本,用于微调模型。
  3. 实验结果
    • 在QuixBugs基准上,DeepDebug显著提高了修复错误的数量,比之前的方法提高了50%,同时将假阳性率从35%降低到5%,并将超时从六小时缩短到一分钟。
    • 在自定义的可执行测试基准上,模型在第一次尝试时就能修复68%的错误,加入堆栈跟踪后,修复率提升到75%。
  4. 未来工作
    • 计划部署一个命令行工具,可能是一个集成开发环境的插件,直接帮助开发者调试代码。
    • 研究更复杂的调试场景,如多文件调试和更广泛的编程语言支持。

总结:

DeepDebug提出了一种结合多种技术的自动化调试框架,利用大量数据和先进的模型来提高修复效率和准确性,是一个很有前景的研究方向。

DeepDebug 是一种利用大型预训练变换器(transformers)来自动修复Python代码中错误的技术方案。该方案结合了堆栈跟踪(stack traces)、反向翻译(backtranslation)和代码骨架(code skeletons)等技术,旨在提高软件开发过程中的调试效率。以下是该技术方案的详细介绍:

1. 数据准备

  • 错误生成模型训练:通过反向提交数据训练错误生成模型,生成合成错误。具体来说,他们利用修复错误的提交数据,反向生成包含错误的代码,从而增加训练数据的多样性。

  • 反向翻译:利用反向翻译技术,将干净的代码翻译成错误代码,反之亦然,从而扩大训练数据集,使模型能够处理更多类型的错误场景。

  • 代码骨架:在修复代码时,不仅关注错误的函数,还包含类定义、导入、注释等上下文信息,以提高修复的准确性。

2. 模型架构

  • 序列到序列变换器:采用具有12个编码器层和12个解码器层的序列到序列变换器模型,并使用轴向嵌入(axial embeddings)来处理更大的上下文窗口,从而更好地理解代码的上下文环境。

3. 训练策略

  • 预训练:在包含200K个Python仓库的大型语料库上进行预训练,采用去噪目标(denoising objective)来建立对Python代码的坚实基础理解。

  • 微调:在包含10K个仓库且具有可执行测试的数据上进行微调,其中引入并修复合成错误,同时利用堆栈跟踪和错误消息进行增强学习。

4. 实验结果

  • 性能提升:在QuixBugs基准测试中,DeepDebug将修复错误的数量提高了50%以上,将误报率从35%降低到5%,并将超时时间从六小时缩短到一分钟。

  • 自身基准测试:在自身构建的可执行测试基准上,模型在第一次尝试时即可修复68%的错误,加入堆栈跟踪后,修复率提升到75%。

5. 未来工作

  • 迭代修复:通过反馈不断改进修复,以提高准确率。

  • 多文件错误定位:处理跨越多个函数或文件的错误。

  • 支持其他语言:将该方法扩展到Python以外的编程语言。

  • 命令行接口:开发命令行工具,以便开发者更方便地使用该技术。

6. 潜在影响和考虑

  • 泛化和上下文理解:评估模型在处理未见错误和大型代码库时的表现。

  • 误报和可扩展性:管理误报,并考虑训练和部署所需的资源。

  • 动态信息的集成:结合静态代码分析和运行时行为,以实现更有效的调试。

总之,DeepDebug 提出了一个在自动化调试领域具有重要意义的方法,结合静态和动态分析以及大型语言模型,有望显著提高软件开发效率。该方法全面且前景广阔,可能 revolutionize 软件工程中的错误修复过程。