Software Engineering for Self-Adaptive Systems