Providing feedback on programming assignments is a tedious task for the
instructor, and even impossible in large Massive Open Online Courses with
thousands of students. Previous research has suggested that program repair
techniques can be used to generate feedback in programming education. In this
paper, we present a novel fully automated program repair algorithm for
introductory programming assignments. The key idea of the technique, which
enables automation and scalability, is to use the existing correct student
solutions to repair the incorrect attempts. We evaluate the approach in two
experiments: (I) We evaluate the number, size and quality of the generated
repairs on 4,293 incorrect student attempts from an existing MOOC. We find that
our approach can repair 97% of student attempts, while 81% of those are small
repairs of good quality. (II) We conduct a preliminary user study on
performance and repair usefulness in an interactive teaching setting. We obtain
promising initial results (the average usefulness grade 3.4 on a scale from 1
to 5), and conclude that our approach can be used in an interactive setting.Comment: Extended version of the PLDI paper of the same nam