I
M
A
G
E
B
Y
V
I
S
U
A
L
G
E
N
E
R
A
T
I
O
N
of researchers is working on new tech-
niques for automated program repair
that could make it a reality. A bibliography
of automated program repair research
has been composed by Monperrus. 17
In essence, automated repair tech-
niques try to automatically identify
patches for a given bug,a which can
then be applied with little, or possibly
even without, human intervention.
This type of work is beginning to see
adoption in certain, constrained, prac-
a We use the colloquial term “bug” to refer to
programming mistakes that result in unin-
tended runtime behavior.
tical domains. Static bug finding tools
increasingly provide “quick fix” suggestions to help developers address
flagged bugs or bad code patterns, and
Facebook recently announced a tool
that automatically suggests fixes for
bugs found via their automatic testing
tool for Android applications. 15
The problem of bugs motivates a
broad array of work on automatically
identifying them. Advances in formal
verification have shown the promise
of fully assured software. However, the
pace and scale of modern software de-
velopment often precludes the appli-
cation of such techniques from all but
the most safety-critical systems. Light-
er-weight static approaches that rely
most commonly on syntactic pattern
matching or less complex static analy-
sis are becoming increasingly popular
as quality gates in many companies. 7, 23
Testing, at multiple levels of system ab-
straction, remains the most common
bug detection technique in practice.
While detecting bugs is a necessary
step toward improving software, it leaves
the arguably harder task of fixing bugs unsolved. In practice, program repair is challenging for several reasons. A developer
must at first understand the problem and
localize its root cause in the source code.