Maintenance is a dominant component of software cost, and localizing reported defects is a significant component of maintenance. We propose a scalable approach that leverages the natural language present in both defect reports and source code to identify files that are potentially related to the defect in question. Our technique is language-independent and does not require test cases. The approach represents reports and code as separate structured documents and ranks source files based on a document similarity metric that leverages inter-document relationships. We evaluate the fault-localization accuracy of our method against both lightweight baseline techniques and also reported results from state-of-the-art tools. In an empirical evaluation of 5345 historical defects from programs totaling 6.5 million lines of code, our approach reduced the number of files inspected per defect by over 91 . Additionally, we qualitatively and quantitatively examine the utility of the textual and surface features used by our approach.
Liblit use Cooperative Bug Isolation, a statistical approach to isolate multiple defects within a program given a deployed user base. By analyzing large amounts of collected execution data from real users, they can successfully differentiate between different causes of faults in failing software @cite_39 . Their technique produces a ranked list of very specific fault localizations (e.g., the fault occurs when @math on line 57''). In general, their technique can produce more precise results than ours, but it requires a set of deployed users and works best on those defects experienced by many users. By contrast, we do not require that the program be runnable, much less deployed, and use only natural language defect report text.
@cite_39
2162376048
We present a statistical debugging algorithm that isolates bugs in programs containing multiple undiagnosed bugs. Earlier statistical algorithms that focus solely on identifying predictors that correlate with program failure perform poorly when there are multiple bugs. Our new technique separates the effects of different bugs and identifies predictors that are associated with individual bugs. These predictors reveal both the circumstances under which bugs occur as well as the frequencies of failure modes, making it easier to prioritize debugging efforts. Our algorithm is validated using several case studies, including examples in which the algorithm identified previously unknown, significant crashing bugs in widely used systems.