Self-adaptive systems

To best characterize self-adaptive systems, we cite the recent roadmap in Software Engineering for Self-Adaptive Systems (SAS)[1]:
"SAS are systems that are able to adjust their behaviour in response to their perception of the environment and the system itself – has become an important research topic. It is important to emphasize that in all the many initiatives to explore self-adaptive behaviour, the common element that enables the provision of self-adaptability is usually software.(...) It also holds for many research fields, which have already investigated some aspects of self-adaptation from their own perspective, such as fault-tolerant computing, distributed systems, biologically inspired computing, distributed artificial intelligence, integrated management, robotics, knowledge-based systems, machine learning, control theory, etc. In all these case software’s flexibility allows such heterogeneous applications; however, the proper realization of the self-adaptation functionality still remains a significant intellectual challenge and only recently have the first attempts in building self-adaptive systems emerged within specific application domains."

[1] Cheng, B.H.C., Lemos, R. L., Giese, H., - Software Engineering for Self-Adaptive Systems: A Research Roadmap, In Software Engineering for Self-Adaptive Systems (2009), Springer, p, 1-26.

Security and Privacy

Experimental Software Engineering

Requirements Engineering

Our focus on RE research has been recently devoted mostly, not exclusively though, to GORE  (Goal-Oriented Requirements Engineering), which has been used as means to model and reason about the systems’ ability to adapt to changes in dynamic environments. Goals have been used as both design and runtime artifacts. Goal modeling has been used to customize software systems with respect to the characteristics of the organization they are deployed in, to derive high variability designs, and to maximize the resilience and adaptivity of deployed systems. It has also been used as runtime model to respond to dynamic changes — while maintaining dependability. For example, goals become live entities that can self-adapt according to the context, or are complemented with meta-requirements that refer to their success or failure and can recover from errors. Additionally, the Runtime Goal Model (RGM) augments goals and tasks with runtime specifications to verify whether their instances behave correctly, that is, they are dependable.


Modernizing a legacy system is a costly process that requires deep understanding of the system architecture and its components. Without an understanding of the software architecture that will be rewritten, the entire process of reengineering can fail. For this reason, semi-automatic and automatic techniques for architecture recovery have been active focuses of research. However, there are still important improvements that need to be addressed on this field of research w.r.t. achieving a more accurate architecture recovery process. In our research, we have proposed ways to use visualization and clustering techniques applied together to provide a higher accuracy on the software architecture recovery process and co-change clusters analysis. We have conducted experimental studies in a industrial environment and publicly available software repository to empirically evaluate our investigations.


Dependability is the property that defines the ability of computer systems to provide a service that can justifiably rely. Its major attributes are: reliability, safety, availability and maintainability. Currently this property is one of the focuses in virtually all areas of Computer Science. Because of its importance to the user and the software execution environment, interest in dependability has been the subject of quite a few research involving all software development cycles: from analysis (prior to implementation) to testing.

Besides its scope, importance and increasing relevance in the generation of software quality, few academic centers in the world offer the opportunity of Computer Science student to know better how to understand and analyze the software from the perspective of dependability. In our group, we are mostly interested on developing methods, processes and techniques that make dependability an inherent part of software engineering as an active discipline of research and practice. In particular, our current research interests are in dependability analysis and modeling in software systems, particularly probabilistic model checking, self-adaptive systems and goal-oriented requirements engineering.

We work with a very talented and engaged research group. If you are interested in one of our topics of interest and have a proactive attitude, let's talk!

Software Product Line

Software Product Line Engineering (SPLE) aims at developing a large number of software systems that share a common and managed set of features. In the past years, it has been an active area in both research and industry. SPLE aims at improving productivity and reducing the time, effort and cost required to develop a family of products (also called variants). The key point to achieve this goal is to manage the variability among various products of a Software Product Line (SPL). SPLE mainly relies on model-based techniques by which variable features and behaviours are specified. The models are then used to derive numerous products, each of which contains a specific set of features.