Course "Automatic Software Repair" at ECI 2015

by Martin Monperrus

This page presents the material related to the course on Automatic Software Repair that I'll give at Escuela de Ciencias Informáticas 2015 (ECI 2015). The course will be a mix of lecture, DIY and student presentations.

Don't hesitate to ask me questions in advance by email.

–Martin (who am I?, what have I done in this field?)

Course goals

The course is a success if:

Major topics:

Course Format

Teaching Philosophy

I'm an adept of active learning, where "active" for you means reading, preparing and giving a presentation, asking questions, writing code, etc.

In particular, I value inquiry-based learning. The best course is when it is only driven by student's questions.


The grading will be done 50% of the presentations and 50% on the prototyping.

Course Notes


Each session ends with student's presentation. You can do the exercise alone or in pair. The rules are as follow. You read a paper whose topic is the one of the session, you present the paper 5 minutes, the presentation is followed by questions and discussions. You can prepare slides.

I give you a carefully selected list of papers, but you can choose another one if you'd like too, I'd love to be surprised, I'd love to discover new papers.

Day #1: Introduction


Papers (or also other papers cited in the course notes):

Open questions for end-of-session discussion:

Day #2: Automatic Patch Generation


Presentation template:

Day #3: Runtime Repair


Day #4: Do It Yourself

You're free to choose the topic. Use your language of choice for maximum productivity. For both patch generation and runtime repair, you need a way to transform existing programs (aka meta-programming). For Java, I recommend Spoon (full disclosure: I'm the lead maintainer :-). For other languages, I may have some pointers.

DIY prototypes done during the course:

Afix (by Brian J. Cardiff) fixes Crystal program using a metaprogramming repair approach. Afix is able to fix one real bug in a Markdown parser (

failsafeblocks (by Iván Pondal) fixes errors at runtime by selecting alternative implementations in Java, in a way that is similar to recovery blocks (

ANPER (by Simón Gutiérrez Brida and Gastón Scilingo) fixes null pointer exceptions in Java (

Astorus (by Francisco DeMartino) fixes off by one errors and bad condition errors in Python code (

ASRE (by Nicolas Rivasi and Pablo Herrero) fixes Ruby programs by replacing methods.They exploit that may mutations are indeed method changes in Ruby using polymorphic methods: eg. '<' and '<=', select by reject, etc. (

Code Fixer (by Carlos Fau and Alejandro Russel) explores the combinations of condition operator changes that enable a test suite to pass (

Day #5: Discussion and Advanced Concepts of Automatic Repair


Tagged as: 42? No: