I
M
A
G
E
B
Y
C
E
P
E
R
A
the symbolic techniques we discuss
and their relation to indirect specifi-
cations. These techniques all perform
symbolic analysis of various program
artifacts (such as failing traces or past
program versions) to help guide a pro-
grammer’s search for possible causes
of an observable error. Program arti-
facts are converted into a logical for-
mula through symbolic analysis, and
manipulation of such logical formu-
lae helps uncover specifications of in-
tended program behavior. We conclude
with a forward-looking view of symbolic
analysis used for automated program
repair, as reflected in research projects
DirectFix, 17 Angelix, 18 and SemFix. 20
Computer-Assisted Debugging
There has been interest in computer-
assisted debugging since at least the
mid-1980s. Here, we highlight three
major ideas and refer the reader to
Zeller25 for a more comprehensive
overview of these and other ideas in
computer-assisted debugging.
The first major idea in harnessing
the power of computers to aid programmers in debugging was “slicing.”
Static slicing23 aims to preserve only as
much of the program as is necessary
to retain the behavior as far as some
output variable is concerned; such