  One of the primary drivers for self-adaptation is ensuring that systems
achieve their goals regardless of the uncertainties they face during operation.
Nevertheless, the concept of uncertainty in self-adaptive systems is still
insufficiently understood. Several taxonomies of uncertainty have been
proposed, and a substantial body of work exists on methods to tame uncertainty.
Yet, these taxonomies and methods do not fully convey the research community's
perception on what constitutes uncertainty in self-adaptive systems and how to
tackle it. To understand this perception and learn from it, we conducted a
survey comprising two complementary stages. In the first stage, we focused on
current research and development. In the second stage, we focused on directions
for future research. The key findings of the first stage are: a) an overview of
uncertainty sources considered in self-adaptive systems, b) an overview of
existing methods used to tackle uncertainty in concrete applications, c)
insights into the impact of uncertainty on non-functional requirements, d)
insights into different opinions in the perception of uncertainty within the
community, and the need for standardised uncertainty-handling processes to
facilitate uncertainty management in self-adaptive systems. The key findings of
the second stage are: a) the insight that over 70% of the participants believe
that self-adaptive systems can be engineered to cope with unanticipated change,
b) a set of potential approaches for dealing with unanticipated change, c) a
set of open challenges in mitigating uncertainty in self-adaptive systems, in
particular in those with safety-critical requirements. From these findings, we
outline an initial reference process to manage uncertainty in self-adaptive
systems.
