Feedback-Driven Semi-supervised Synthesis of Program Transformations
While editing code, it is common for developers to make multiple related
repeated edits that are all instances of a more general program transformation.
Since this process can be tedious and error-prone, we study the problem of
automatically learning program transformations from past edits, which
can then be used to predict future edits. We take a novel view of the
problem as a semi-supervised learning problem: apart from the
concrete edits that are instances of the general transformation,
the learning procedure also exploits access to additional inputs
(program subtrees) that are marked as positive or negative depending on
whether the transformation applies on those inputs. We present a procedure
to solve the semi-supervised transformation learning problem using anti-unification
and programming-by-example synthesis technology.
To eliminate reliance on access to marked additional inputs,
we generalize the semi-supervised learning procedure to a feedback-driven
procedure that also generates the marked additional inputs in
an iterative loop. We apply these ideas to build and evaluate three applications
that use different mechanisms for generating feedback. Compared to existing
tools that learn program transformations from edits, our feedback-driven
is vastly more effective in successfully predicting edits with significantly lesser amounts of past edit data.