  Due to the vast number of students enrolled in Massive Open Online Courses
(MOOCs), there has been an increasing number of automated program repair
techniques focused on introductory programming assignments (IPAs). Such
state-of-the-art techniques use program clustering to take advantage of
previous correct student implementations to repair a given new incorrect
submission. Usually, these repair techniques use clustering methods since
analyzing all available correct student submissions to repair a program is not
feasible. The clustering methods use program representations based on several
features such as abstract syntax tree (AST), syntax, control flow, and data
flow. However, these features are sometimes brittle when representing
semantically similar programs.
  This paper proposes InvAASTCluster, a novel approach for program clustering
that takes advantage of dynamically generated program invariants observed over
several program executions to cluster semantically equivalent IPAs. Our main
objective is to find a more suitable representation of programs using a
combination of the program's semantics, through its invariants, and its
structure, through its anonymized abstract syntax tree. The evaluation of
InvAASTCluster shows that the proposed program representation outperforms
syntax-based representations when clustering a set of different correct IPAs.
Furthermore, we integrate InvAASTCluster into a state-of-the-art
clustering-based program repair tool and evaluate it on a set of IPAs. Our
results show that InvAASTCluster advances the current state-of-the-art when
used by clustering-based program repair tools by repairing a larger number of
students' programs in a shorter amount of time.
