摘要
arXiv:2502.07786v1 宣布类型:交叉
摘要:为入门级编程作业(IPAs)自动编程修复(APR)受到每年参加编程课程的学生人数众多的启发。由于为IPAs提供反馈需要大量时间和精力,因此个性化反馈通常涉及建议学生修改程序。基于形式方法(FM)的语义修复方法是有效的,但有限制。这些工具擅长识别错误的部分,但如果正确的实现与错误的实施共享相同的控制流图,它们也只能修复程序。相反,大型语言模型(LLMs)被用于APR,但通常制作广泛的修改而不是最小的修改。这导致了更侵入性的修复,使学生更难从错误中学习。总之,LLMs在完成字符串方面表现出色,而基于FM的错误定位在识别程序的错误部分方面表现出色。在本文中,我们提出了一种将两者优势结合的新方法,通过零样本学习来增强IPAs的APR。我们的方法使用基于MaxSAT的错误定位来识别程序中的错误部分,然后向LLM呈现不含这些错误语句的程序草图。这种混合方法遵循CEGIS循环,逐步完善程序。我们要求LLM合成缺失的部分,然后该程序与测试集进行检查。如果建议的程序不正确,则从测试集中反馈一个反例给LLM。我们的实验表明,使用基于MaxSAT的无bug程序草图的反例引导方法,显著提高了所有六种评估的LLM的修复能力。该方法使LLM能够使用更小的修复来修复更多程序,优于其他配置和最先进的符号程序修复工具。