Software, Heal Thyself!
Traditional software engineering is predicated on the distinction between development time (when a software system is designed, built, and tested) and run time (when a software system is deployed and executed). However, increasingly software systems are expected to run continuously, adapting as they execute to changes in environment and even user requirements. For such systems the traditional distinctions break down. In this talk I explore the role of development-time models in making it possible for systems to adapt at run time. In particular, I will argue that architectural models of software systems have a pivotal part to play as an enabler for self-adaptive and self-healing systems.