Software architecture is often defined as the structure or structures of a system. There’s been a lot of attempts to define architecture from a software perspective and lots of debates over the years. Rather than start from scratch, I thought it would be more helpful to highlight some of the more useful definitions that I’ve come across.
Kruchten, Booch, Bittner, and Reitman on Architecture
Philippe Kruchten, Grady Booch, Kurt Bittner, and Rich Reitman derived and refined a definition of architecture based on work by Mary Shaw and David Garlan (Shaw and Garlan 1996). Their definition is:
“Software architecture encompasses the set of significant decisions about the organization of a software system including:
- Selection of the structural elements and their interfaces by which the system is composed.
- Behavior as specified in collaboration among those elements.
- Composition of these structural and behavioral elements into larger subsystems.
- Architectural style that guides this organization.
Software architecture also involves functionality, usability, resilience, performance, reuse, comprehensibility, economic, and technology constraints, tradeoffs and aesthetic concerns.”
Fowler on Architecture
In Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series) , Martin Fowler outlines some common recurring themes when explaining architecture:
- The highest-level breakdown of a system into its parts.
- The decisions that are hard to change.
- There are multiple architectures in a system.
- What is architecturally significant can change over a system’s lifetime.
- In the end, architecture breaks down to whatever the important stuff is.
Bass, Clements, Kazman on Architecture
In Software Architecture in Practice (2nd Edition) (SEI Series in Software Engineering) , Bass, Clements, and Kazman define architecture like this:
The software architecture of a program or computing system is the structure or structures of the system, which comprise software elements, the externally visible properties of those elements, and the relationships among them. Architecture is concerned with the public side of interfaces; private details of elements – details having to do solely with internal implementation – are not architectural.
My Related Posts