  Testing and code reviews are known techniques to improve the quality and
robustness of software. Unfortunately, the complexity of modern software
systems makes it impossible to anticipate all possible problems that can occur
at runtime, which limits what issues can be found using testing and reviews.
Thus, it is of interest to consider autonomous self-healing software systems,
which can automatically detect, diagnose, and contain unanticipated problems at
runtime. Most research in this area has adopted a model-driven approach, where
actual behavior is checked against a model specifying the intended behavior,
and a controller takes action when the system behaves outside of the
specification. However, it is not easy to develop these specifications, nor to
keep them up-to-date as the system evolves. We pose that, with the recent
advances in machine learning, such models may be learned by observing the
system. Moreover, we argue that artificial immune systems (AISs) are
particularly well-suited for building self-healing systems, because of their
anomaly detection and diagnosis capabilities. We present the state-of-the-art
in self-healing systems and in AISs, surveying some of the research directions
that have been considered up to now. To help advance the state-of-the-art, we
develop a research agenda for building self-healing software systems using
AISs, identifying required foundations, and promising research directions.
