  Formula-based debugging techniques are becoming increasingly popular, as they
provide a principled way to identify potentially faulty statements together
with information that can help fix such statements. Although effective, these
approaches are computationally expensive, which limits their practical
applicability. Moreover, they tend to focus on failing test cases alone, thus
ignoring the wealth of information provided by passing tests. To mitigate these
issues, we propose two techniques: on-demand formula computation (OFC) and
clause weighting (CW). OFC improves the overall efficiency of formula-based
debugging by exploring all and only the parts of a program that are relevant to
a failure. CW improves the accuracy of formula-based debugging by leveraging
statistical fault-localization information that accounts for passing tests. Our
empirical results show that both techniques are effective and can improve the
state of the art in formula-based debugging.
