Engineering modern software systems is a challenging task as these systems are subject to different types of uncertainties. Examples of such uncertainties are disturbances in the environment that are difficult to predict and goals that may change during operation. The idea of self-adaptation is to handle these uncertainties at runtime, when the knowledge becomes available to resolve them. As more software systems with strict requirements are designed to be self-adaptive, the need for adaptation guarantees is becoming a high-priority concern. Providing such guarantees with traditional architecture-based approaches has shown to be challenging, calling for new approaches to engineer self-adaptive systems. To tackle this challenge, this thesis studies control-based software adaptation (CBSA). CBSA applies principles from control theory to design self-adaptive software systems. More specifically, we address the following research problem using CBSA: how to realize self-adaptive software systems that satisfy multiple stakeholder requirements with guarantees in the presence of uncertainties.
The thesis addresses the research problem in two subsequent stages. The first stage focuses on satisfying multiple stakeholder requirements of different types, and providing adaptation guarantees. This stage starts with a systematic literature review of CBSA, which provides a comprehensive overview of the field, including existing CBSA approaches, applied models and controllers, and analyzed guarantees. From the review, we identify a number of gaps in the existing research and concrete challenges in addressing the research problem. Then, we devise SimCA, a control-theoretic approach to realize self-adaptive software systems that satisfy multiple requirements with guarantees. SimCA combines mathematical models of software system, a control-based adaptation mechanism, and formal analysis of the required guarantees. SimCA is also reusable, meaning that it can be applied to a family of cooperative software systems with strict requirements. The second research stage focuses on handling different types of uncertainty.We first discuss the types of uncertainty and study whether existing CBSA approaches try to deal with these types. We then introduce an enhanced approach called SimCA* that includes components to deal with uncertainty in software parameters, addition or removal of requirements at runtime and software component interactions. In order to obtain evidence about the applicability and reusability of SimCA and SimCA*, we apply informal exploratory case studies with three software systems with strict requirements from different domains.