  We introduce Learn2fix, the first human-in-the-loop, semi-automatic repair
technique when no bug oracle--except for the user who is reporting the bug--is
available. Our approach negotiates with the user the condition under which the
bug is observed. Only when a budget of queries to the user is exhausted, it
attempts to repair the bug. A query can be thought of as the following
question: "When executing this alternative test input, the program produces the
following output; is the bug observed"? Through systematic queries, Learn2fix
trains an automatic bug oracle that becomes increasingly more accurate in
predicting the user's response. Our key challenge is to maximize the oracle's
accuracy in predicting which tests are bug-exposing given a small budget of
queries. From the alternative tests that were labeled by the user, test-driven
automatic repair produces the patch.
  Our experiments demonstrate that Learn2fix learns a sufficiently accurate
automatic oracle with a reasonably low labeling effort (lt. 20 queries). Given
Learn2fix's test suite, the GenProg test-driven repair tool produces a
higher-quality patch (i.e., passing a larger proportion of validation tests)
than using manual test suites provided with the repair benchmark.
