Automatic Program Repair:

My research focuses on automatically repairing bugs in software. Our source code and benchmarks are available for your perusal. The main project site hosts additional resources for the interested researcher, though the source code/experiments available here have a slightly higher chance of being up-to-date.

Code: Download here (tar.gz). You will need OCaml (anything from 3.09 should work; greater than 3.10 sometimes complicates building CIL; I'm currently using 3.12.) and the CIL Infrastructure for C Program Analysis and Transformation. The source code README focuses on compilation only; instructions on how to run experiments/use the code are found in the experiments tarball. Additional instructions available at the main project page.

Experiments: Download a Giant Tarball (~330M) containing everything necessary to reproduce our bugs and repairs: buggy program source, test inputs/outputs/scripts, and overly-verbose READMEs on how to run everything. You may also find this useful if you need buggy C benchmarks for your own research. There exist a few bugs that are not yet included in the giant tarball; some may be found at the main project site.

Patches: Download example patches, containing source code and generated patches for several of our large open-source benchmarks. Our technique operates on pre-processed source code, making the generated patches a bit difficult to read and less-than-portable between machines; this tarball includes both an automatically-generated patch and a human-generated version translated to the non-preprocessed source (for pedagogical purposes) per benchmark.

Proposal: Automatic, Efficient, and General Repair of Software Defects Using Lightweight Program Analyses

  • Proposal presentation [ .pdf ]

Specification Mining With Few False Positives:

  • Conference presentation, TACAS 2009 [ .pdf | .pptx ]
  • Masters defense [ .pdf ]

Theory Lunch Presentations:

  • A Theory of the Learnable. Spring, 2010 [ .pdf ]

    An introduction to Valiant's seminal paper A Theory of the Learnable, complete with an unecessarily-extended duck metaphor.

  • KKT Algorithm for Minimum Spanning Trees. Spring, 2008. [ .pdf | .ppt ]

    These slides contain a pretty extensive demo of the KKT randomized linear-time MST algorithm on an example graph of ~20 nodes, which you may find useful if you, too, wish to demonstrate said algorithm to a bunch of your friends. Contains an unecessarily-extended The Giving Tree metaphor.