Fixing software bugs is a difficult and time-consuming process, accounting for up to 90% of the lifetime cost of a typical program. Because the number of defects outstrips the resources available for repairing them, most software is shipped with both known and unknown bugs. All previous approaches to debugging multiple types of defects have been manual. This research will develop a fully automated method for repairing bugs in existing software, thus reducing some of the cost of software maintenance.
The research will be broadly applicable, targeting off-the-shelf, legacy applications created without program annotations or special coding practices. The technical focus of the work is an automated repair approach using evolutionary algorithms. Program variants are evolved, using analogues of biological processes such as mutation, until one is found that both retains required functionality and avoids the defect. Standard software test cases are used to represent the bug and to encode program requirements. Generated repairs can be presented to developers or applied to the program directly. Significant potential outcomes include: an automated program repair methodology and freely available tools; advances in program analyses; advances in evolutionary algorithms; significant efforts in outreach and education; and dissemination of the results.