论文

自动即时更新 Python 类型注释

Automating Just-In-Time Python Type Annotation Updating

摘要

类型注释在Python项目中越来越流行,以避免Python的动态类型功能引起的类型错误。然而,当开发人员更改源代码时,这些类型注释常常被忽略或忽视,从而导致类型注释过时且不一致。这种过时的类型注释可能会阻碍程序的理解,误导开发人员,甚至在将来引入错误。因此,有必要从一开始就避免和纠正这些不一致的类型注释。在这项工作中,我们认为通过在代码更改的同时自动更新类型注释,可以减少甚至避免过时的类型注释。我们将此任务称为“即时 (JIT) 类型注释更新”。为了解决此任务,我们提出了一种基于 LLM 的新颖方法,名为 TypeUp(类型注释更新器)来自动执行此任务。 TypeUp可以根据旧的类型注释和相应的代码更改自动生成新的类型注释。具体来说,TypeUp 通过引出其知识和逻辑推理能力并从类似的代码更改中学习,引导 LLM 执行类型注释更新。评估结果表明,TypeUp 在我们的任务中比最先进的类型推断方法(即 TypeGen)高出 41.9%。此外,我们对现实世界的软件项目进行了野外评估,我们的方法生成的 25 个类型注释更新中有 20 个已经得到开发人员的确认,显示了我们的方法在现实环境中的实用价值。