Developers spend most of their time debugging software. This effort results in perfective changes to their applications, but is otherwise lost. No central repository exists that stores all bug descriptions and fixes. The reason for this state of affairs is the belief that debugging is an idiosyncratic, context-specific task that does not generalize. In contrast, this project hypothesizes that applications decompose into smaller, similar problems and that limitations of the human mind imply that we are likely to make similar errors when confronted by similar problems. In practice, most developers agree. When fixing a bug, a developer often begins by searching for similar bugs that have been reported and resolved in the past, because a fix for a similar bug can help him understand his bug, or even directly fix his bug. In short, the problem is that the knowledge gained during debugging is wasted---either not stored or not searchable.
This project seeks to revolutionize debugging by capturing and reusing debugging knowledge. Developers can leverage the knowledge of the community to speed up debugging. To this end, it proposes to create a universal bug repository capable of storing all bug information, indexed on bug traces. To speed debugging, this repository will support efficiently finding similar bugs and their fixes. It will be the basis of automatic debugging tools that match closed bugs to an open bug, then test the applicability of their fixes to that open bug. Programmers will consult the proposed bug repository as a matter of course during debugging. Monitors that compare the current execution against traces in the repository can also prevent bugs and improve software reliability. This project promises to significantly speed up debugging and reduce software production cost. The proposed educational innovations and outreach efforts can also help train more capable IT professionals for the workforce.