Our aim is to understand and describe how software systems can monitor their operating environment to dynamically adapt their behavior, as well as the ways in which software evolves over time.

We are concerned with how software can be engineered to adapt and evolve over their lifetime to ensure the effective operation of the ubiquitous computing systems that have become an integral part of our world. This includes the adaptation of service-based systems.

Through this research, we have developed new frameworks, tools and processes for engineering adaptive software systems, together with guidelines and techniques to facilitate further software maintenance.