The ABLE Group, headed by Prof. David Garlan, carries out research into software architectural approaches to:

  • Improve the quality of software systems with new software architecture design tools, notations, and methods.
  • Increase system resiliency, availability, and security through architecture-based self-adaptive systems.
  • Reason about the design and implementation of cyber-physical systems and the internet-of-things.

Software architecture has a long history of research at Carnegie Mellon with strong groups in both the School of Computer Science and the Software Engineering Institute. Read more about the impact of software architecture research from Carnegie Mellon here.

Software Architecture

Successful design of complex software systems requires the ability to describe, evaluate, and create systems at an architectural level of abstraction. Software architecture allows designers to reason about quality attributes and their tradeoffs to navigate the design space and develop appropriate designs. We are investigating formalisms to describe and analyze software architecture and their evolution over time, algorithms and techniques for analyzing quality attributes, such as performance and privacy, and tools to support software architects.


To reduce the cost and improve the quality of complex systems, we are developing new technology supporting automated, dynamic system adaptation via architectural models and fault-localization and diagnosis. Fundamental to our approach are techniques for formal reasoning about such systems, particularly in the presence of uncertainty, and harness it as an integral part of the adaptation architecture

Cyber-Physical & IoT

Software is now an intimate part of many everyday systems. From power plants and other critical infrastructure, to smart homes, cars, and mobile devices, the software for these systems needs to be co-designed with software, physical, and human components in mind. We are investigating how to design software for these systems, to analyze their designs to identify errors early in the development process, and to relate the body of knowledge in software architecture to the body of knowledge in designing more traditional, isolated, control systems.