Automated Program Repair of Uncompilable Student Code

📄 arXiv: 2510.06187v3 📥 PDF

作者: Griffin Pitts, Aum Pandya, Darsh Rank, Tirth Bhatt, Muntasir Hoq, Bita Akram

分类: cs.SE, cs.AI, cs.CY

发布日期: 2025-10-07 (更新: 2025-12-23)

备注: In Proceedings of the 57th ACM Technical Symposium on Computer Science Education V.2 (SIGCSE TS 2026)

DOI: 10.1145/3770761.3777323


💡 一句话要点

利用大型语言模型自动修复学生未编译代码,提升学生建模效果

🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)

关键词: 自动程序修复 大型语言模型 学生建模 代码编译 编程教育

📋 核心要点

  1. CS1编程学习中大量未编译代码被丢弃,阻碍了对学生学习过程的全面建模。
  2. 利用大型语言模型作为修复代理,自动修复未编译代码,保留学生原始结构意图。
  3. 实验评估了不同上下文提示下LLM的修复效果,关注可编译性、编辑距离和结构保留。

📝 摘要(中文)

在CS1学习环境中,学生提交的编程作业中很大一部分无法编译,这限制了它们在学生建模和知识追踪中的应用。传统的建模流程通常会排除这些情况,从而丢弃了学生学习过程中的观察数据。本研究探讨了自动程序修复作为一种恢复无法编译代码的策略,同时保留学生结构意图,以便用于学生建模。在此框架下,我们评估了大型语言模型(LLMs)作为在高上下文和低上下文提示条件下的修复代理。修复结果的评估指标包括可编译性、编辑距离以及对学生原始结构和逻辑的保留程度。虽然所有模型都产生了可编译的修复,但它们在保留学生的控制流和代码结构方面存在差异,从而影响了它们的教学效用。通过恢复无法编译的提交,这项工作能够对学习者的编码过程和随时间的发展进行更丰富和更全面的分析。

🔬 方法详解

问题定义:该论文旨在解决CS1编程课程中学生提交的大量无法编译的代码的问题。现有方法通常直接丢弃这些代码,导致学生建模和知识追踪的信息缺失。痛点在于如何有效地恢复这些代码,同时尽可能保留学生的原始意图和代码结构,以便进行更全面的学习过程分析。

核心思路:核心思路是利用大型语言模型(LLMs)的强大代码生成和理解能力,将其作为自动程序修复的代理。通过适当的提示(prompting),引导LLM修复代码中的编译错误,使其能够成功编译,同时尽可能地保持学生原有的代码逻辑和结构。

技术框架:整体框架包括以下几个主要步骤:1) 收集学生提交的未编译代码;2) 设计高上下文和低上下文两种提示策略,用于引导LLM进行代码修复;3) 使用LLM(如Codex)生成修复后的代码;4) 评估修复后的代码,评估指标包括可编译性、编辑距离和结构保留程度。

关键创新:关键创新在于将大型语言模型应用于自动程序修复,并针对学生代码的特点,设计了不同的提示策略。与传统的程序修复方法相比,LLM具有更强的代码理解和生成能力,能够更好地保留学生的原始意图。此外,该研究还关注了修复后的代码的结构保留程度,这对于后续的学生建模至关重要。

关键设计:论文中使用了两种提示策略:高上下文提示和低上下文提示。高上下文提示提供更多的代码上下文信息,例如错误信息和相关的代码片段,以帮助LLM更好地理解代码的意图。低上下文提示则只提供最基本的信息,例如代码本身。评估指标包括:1) 可编译性(是否能够成功编译);2) 编辑距离(修复后的代码与原始代码的差异程度);3) 结构保留程度(修复后的代码是否保留了学生的原始控制流和代码结构)。

📊 实验亮点

实验结果表明,所有模型都能生成可编译的修复,但不同模型在保留学生控制流和代码结构方面存在差异。高上下文提示通常能产生更好的修复效果,但也会引入更多的修改。该研究为如何有效地利用LLM进行自动程序修复提供了有价值的见解,并为后续的学生建模奠定了基础。

🎯 应用场景

该研究成果可应用于在线编程教育平台,自动修复学生提交的错误代码,提供即时反馈,帮助学生更快地学习编程。此外,修复后的代码可用于更精确的学生建模和知识追踪,从而为个性化学习提供支持。该技术还有潜力应用于其他软件开发场景,例如自动修复代码缺陷。

📄 摘要(原文)

A significant portion of student programming submissions in CS1 learning environments are uncompilable, limiting their use in student modeling and downstream knowledge tracing. Traditional modeling pipelines often exclude these cases, discarding observations of student learning. This study investigates automated program repair as a strategy to recover uncompilable code while preserving students' structural intent for use in student modeling. Within this framework, we assess large language models (LLMs) as repair agents under high- and low-context prompting conditions. Repairs were evaluated for compilability, edit distance, and preservation of students' original structure and logic. While all models produced compilable repairs, they differed in how well they preserve students' control flow and code structure, affecting their pedagogical utility. By recovering uncompilable submissions, this work enables richer and more comprehensive analyses of learners' coding processes and development over time.