Danny Weyns, KU Leuven Belgium & Linnaeus University Sweden, email@example.com
Modern software systems—such as Cyber-Physical Systems and Internet-of-Things—are realized by means of dynamic composition of autonomous and heterogeneous resources that interact with each other to provide users with rich functionalities. Since these systems are subject to uncertainties and continuous change, traditional assumptions made on systems’ design are no longer valid. Ensuring the required qualities of these systems requires the software to handle change during operation through dynamic adaptation. As such adaptations are often too complex or too costly to be performed by human operators, its automation has been the subject of intense research. Self-adaptation is one prominent approach in which a software system is extended with one or more external feedback loops that monitor the system and adapt its configuration or architecture to ensure that its qualities are met under continuous changes. In this tutorial, we provide a particular perspective on the evolution of the field of self-adaptation in six waves. These waves put complementary aspects of engineering self-adaptive systems in focus that synergistically have contributed to the current body of knowledge in the field. The first two waves—Automating Tasks and Architecture-Based Adaptation—put the focus on the primary drivers for self-adaptation and the fundamental principles to engineer self-adaptive systems. The third and fourth waves— Runtime Models and Goal Driven Adaptation—direct the focus on key elements for the concrete realization of self-adaptive systems. The last two waves— Guarantees Under Uncertainties and Control-Based Approaches to Software Adaptation—put the focus on uncertainties as key drivers of self-adaptive systems and how to tame them. Throughout the tutorial, we use concrete examples from different domains to illustrate the material. From the presented perspective on the field, we outline a number of challenges for future research in self-adaptation, both in a short and long term.