中文

PyTy:修复 Python 中的静态类型错误

软件工程 2024-01-15 v1

摘要

渐进类型化允许开发者按自己的选择标注类型,在无类型标注与完全静态类型化语言之间提供了一个灵活的中间地带。随着越来越多的代码库被标注类型,静态类型检查器检测到的类型错误数量日益庞大。遗憾的是,修复这些错误需要人工投入,阻碍了渐进类型化在实践中的采纳。本文提出 PyTy,一种针对 Python 中可静态检测类型错误的自动程序修复方法。修复类型错误的问题值得特别关注,因为它揭示了特定的修复模式,提供了带有关于在何处及如何应用修复的提示的警告信息,并且因为渐进类型检查可作为验证修复的自动方式。我们通过三项贡献来解决这一问题:(i) 一项实证研究,调查开发者如何修复 Python 类型错误,展示了一组多样化的修复策略,其中包含一些反复出现的模式;(ii) 一种自动提取类型错误修复的方法,使我们能够从 176 个 GitHub 仓库中创建一个包含 2,766 个错误-修复对的数据集,名为 PyTyDefects;(iii) 首个用于修复 Python 类型错误的基于学习的修复技术。受该问题相对数据稀缺的驱动,PyTy 核心的神经模型通过跨语言迁移学习进行训练。我们的评估表明,PyTy 为十种常见的类型错误类别提供修复,成功处理了 281 个真实世界错误中的 85.4%。这一有效性优于被要求修复类型错误的最先进大型语言模型(达 2.1 倍),并补充了先前针对运行时表现出的类型错误的技术。最后,30 个包含 PyTy 建议修复的拉取请求中有 20 个已被开发者合并,展示了 PyTy 在实践中的有用性。

关键词

引用

@article{arxiv.2401.06619,
  title  = {PyTy: Repairing Static Type Errors in Python},
  author = {Yiu Wai Chow and Luca Di Grazia and Michael Pradel},
  journal= {arXiv preprint arXiv:2401.06619},
  year   = {2024}
}