We are concerned with the study of how software artifacts evolve, and with techniques to facilitate software evolution.
Our aim is to understand and describe how software is changed over time and to provide guidelines and techniques to facilitate further software maintenance. We have studied the evolution of the size, coupling, quality, interfaces, and folder structure of open source and proprietary software, for which we have had access to repositories of past releases. We have also studied the productivity over time of teams developing proprietary software, and developed models for effort estimation for evolving software. We have developed tool-supported approaches to facilitate changes to existing applications, such as intensional views to detect design violations when changing the source code, and coordination contracts to adapt at run-time the interaction among objects to new business rules. We have also developed formal reasoning techniques and tools to analyse evolving software specifications.