  The goal of program repair is to automatically fix programs to meet a
specification. We propose a new specification mechanism, direct manipulation,
in which the programmer can visualize the trace of a buggy program on a failing
input and convey the intended program behavior by manipulating variable values
at some location. The repair problem is to find a program that, on the same
input, reaches the location identified by the programmer with variable values
equal to the manipulated ones. Since a single program execution under-specifies
the overall program behavior, we augment our repair problem with quantitative
objectives to find the program that agrees with the specification and is
closest to the original one with respect to some distance. We formalize the
repair problem, build a program repair tool JDial based on the Sketch
synthesizer, and show the effectiveness of JDial on representative buggy
benchmarks from introductory programming assignments.
