Last week MIT researchers published an article about an automatic bug-repair system called Prophet. Prophet is a machine-learning system that learns general properties and patterns of successful error corrections in software and applies those patterns to making new error corrections in other programs.
While the possibility of having software track down and fix bugs automatically (which effectively would mean creating self-correcting computer programs) is exciting enough in its own right, Prophet possibly has far-reaching implications for verifying the general correctness of code as well. Although mathematically proving that particular computer programs are correct is an established discipline in theoretical computer science, doing so is difficult and costly (further exacerbated by often unclear requirements and unknown or unforeseen constraints), which is why it’s almost never done in practice. MIT professor of electrical engineering and computer science Martin Rinard, who co-authored a paper describing Prophet with MIT graduate student Fan Long, says:
“One of the most intriguing aspects of this research is that we’ve found that there are indeed universal properties of correct code that you can learn from one set of applications and apply to another set of applications.”
Prophet looks very promising and could be groundbreaking for software engineering but it’s still very much a research project. While not quite as sophisticated there are tools that help you find common bugs you can use today. FindBugs™ uses static analysis to look for bugs in Java code. FindBugs™ analyzes your code base and recognizes common patterns that typically lead to software errors and security or performance issues. The tool can be run on the command line but is also available as a plugin for IntelliJ IDEA (and various other IDEs), Maven and continuous integration servers such as Jenkins or Hudson.