The Software Architecture research line investigates the decisions, models, and verification techniques that shape robust and adaptable software systems, spanning structural design, quality attributes, and large-scale complexity.
The Software Architecture research line addresses the challenges and opportunities associated with studying different aspects of software systems architecture. Recognizing that architecture is a fundamental pillar for ensuring the quality and adaptability of software systems in modern environments, our research spans a broad spectrum of key topics in the field. This line bridges theoretical research with real-world software development practices, combining conceptual and empirical research with the development of methods, models, and tools that support architects in making informed, well-founded design decisions. Through this line, we seek not only to advance theoretical knowledge in the field but also to generate a practical impact on the construction of more robust, efficient, and adaptable software systems.
Architectural styles and patterns, and the decisions involved in discovering, selecting and combining them, to shape the structural organization of software systems.
Architectural tactics and patterns, and the decisions involved in discovering, selecting and applying them, to achieve specific quality attributes (e.g., performance, scalability, security, availability, maintainability) and shape the non-functional behavior of software systems.
Architectural design principles for building software systems that handle high complexity in terms of structural size, concurrency and critical quality scenarios.
Use of architectural models and representations to design, analyze, and generate software architectures, enabling automation, consistency, and early verification of architectural design decisions.
Techniques and tools to analyze whether software architectures comply with functional and non-functional requirements, and to verify architectural conformance in the early stages of design, before system implementation.