Self-adaptive software evaluates its own behavior and changes its behavior when the evaluation indicates that the software does not accomplish what it is intended to do or when better functionality or better performance is possible. The self-adaptive approach in software engineering builds on well-known features like the use of errors and the handling of exceptions in languages like Lisp or Java and aims at improving the robustness of software systems...