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. This research builds upon a novel, fully-automated method for repairing bugs in existing software, producing trustworthy repairs for real-world programs. The research will be broadly applicable, targeting large legacy applications with many testcases.
The technical focus of the work is a scalable and trustworthy technique to automatically repair program bugs. 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. Thousands of standard software testcases, program invariants, mined specifications, and "fuzz" inputs are used to represent bugs, encode program requirements, and build trusted repairs. Empirical evaluations include an automated hardening scenario: programs and attacks against them are coevolved over time, simulating parts of the security arms race. Significant potential outcomes include: a scalable and trustworthy automated program repair methodology and freely available tools; advances in formal program analyses; significant efforts in outreach and education; and dissemination of the results.