When the Requirements for Adaptation and High Integrity Meet
Software is increasingly used in applications characterized by change, and is expected to adapt to variations in its environment, requirements and internal state. Over the last decade, significant effort has been dedicated to developing self-adaptive software by applying the principles of autonomic computing to software development. This effort has delivered software capable of reconfiguring itself in response to sensor-detected changes, typically by employing a combination of heuristics, simulation and artificial intelligence techniques. While this is undoubtedly a major achievement, it is not enough for a growing range of applications in which software is bound to play a key role.