  Using online Q&A forums, such as Stack Overflow (SO), for guidance to resolve
program bugs, among other development issues, is commonplace in modern software
development practice. Runtime exceptions (RE) is one such important class of
bugs that is actively discussed on SO. In this work we present a technique and
prototype tool called MAESTRO that can automatically recommend an SO post that
is most relevant to a given Java RE in a developer's code. MAESTRO compares the
exception-generating program scenario in the developer's code with that
discussed in an SO post and returns the post with the closest match. To extract
and compare the exception scenario effectively, MAESTRO first uses the answer
code snippets in a post to implicate a subset of lines in the post's question
code snippet as responsible for the exception and then compares these lines
with the developer's code in terms of their respective Abstract Program Graph
(APG) representations. The APG is a simplified and abstracted derivative of an
abstract syntax tree, proposed in this work, that allows an effective
comparison of the functionality embodied in the high-level program structure,
while discarding many of the low-level syntactic or semantic differences. We
evaluate MAESTRO on a benchmark of 78 instances of Java REs extracted from the
top 500 Java projects on GitHub and show that MAESTRO can return either a
highly relevant or somewhat relevant SO post corresponding to the exception
instance in 71% of the cases, compared to relevant posts returned in only 8% -
44% instances, by four competitor tools based on state-of-the-art techniques.
We also conduct a user experience study of MAESTRO with 10 Java developers,
where the participants judge MAESTRO reporting a highly relevant or somewhat
relevant post in 80% of the instances. In some cases the post is judged to be
even better than the one manually found by the participant.
