  In Spectrum-Based Fault Localization (SBFL), a suspiciousness score is
assigned to each code element based on test coverage and test outcomes. The
scores are then used to rank the code elements relative to each other in order
to aid the programmer during the debugging process when seeking the source of a
fault. However, probably none of the known SBFL formulae are guaranteed to
produce different scores for all the program elements, hence ties emerge
between the code elements. Based on our experiments, ties in SBFL are
prevalent: in Defects4J, 54-56% of buggy methods are members of ties, i.e.,
there is at least one other method with the same score in these cases (but
typically much more, on average 6), and this inevitably reduces the
effectiveness of any SBFL approach. In this work, we present a technique to
break ties in such cases based on the so-called method calls frequencies. This
counts the number of different contexts of method calls (both as callees and as
callers) in failing test cases. The intuition is that if a method appears in
many different calling contexts during a failing test case, it will be more
suspicious and get a higher rank position compared to other methods with the
same scores. This method can be applied to any underlying SBFL formula, and can
favourably break the occurring ranks in the ties in many cases. The
experimental results show that our novel tie-breaking strategy achieved a
significant reduction in both size and number of critical ties in our
benchmark. In 72-73% of the cases, the ties were completely eliminated and the
average reduction rate was more than 80%.
