Automated feedback generation for introductory programming assignments is useful for programming education. Most works try to generate feedback to correct a student program by comparing its behavior with an instructor's reference program on selected tests. In this work, our aim is to generate verifiably correct program repairs as student feedback. The student assignment is aligned and composed with a reference solution in terms of control flow, and differences in data variables are automatically summarized via predicates to relate the variable names. Failed verification attempts for the equivalence of the two programs are exploited to obtain a collection of maxSMT queries, whose solutions point to repairs of the student assignment. We have conducted experiments on student assignments curated from a widely deployed intelligent tutoring system. Our results indicate that we can generate verified feedback in up to 58% of the assignments. More importantly, our system indicates when it is able to generate a verified feedback, which is then usable by novice students with high confidence.
翻译:用于入门编程任务的自动反馈生成对编程教育有用。 多数工作都试图通过比较学生方案的行为和教学参考方案对选定测试进行对比,从而产生反馈来纠正学生方案。 在这项工作中,我们的目标是作为学生反馈产生可核查的正确方案维修。 学生任务与控制流量方面的参考解决方案一致,构成一个参考解决方案,数据变量的差异通过上游数据自动总结,将变量名称联系起来。 两个程序等同性的核查尝试被利用,以获得一个最大SMT查询的集合,这些查询的解决方案是修复学生任务。 我们从一个广泛部署的智能辅导系统中对学生任务进行了实验。 我们的结果表明,我们可以在高达58%的任务中产生经核实的反馈。 更重要的是,我们的系统表明,当它能够产生经核实的反馈时,它能够被高度自信的无名学生使用。