Software Architecture Fundamentals: Key Insights from Shaw & Garlan (1996)
This article summarizes core software architecture concepts from Shaw and Garlan's seminal 1996 book, detailing architectural concerns, component-connector definitions, three design layers, architectural style vocabulary, and systematic trade-off analysis questions.
Architectural-Level Concerns
The book identifies structural issues that belong at the software architecture level of design: organization of a system as a composition of components; global control structures; protocols for communication, synchronization, and data access; assignment of functionality to design elements; composition of design elements; physical distribution; scaling and performance; dimensions of evolution; and selection among design alternatives.
Definition of Software Architecture
Architecture defines a system in terms of computational components and interactions among those components . Components include clients, servers, databases, filters, and layers. Interactions range from simple procedure calls and shared variable access to complex client-server protocols, database-accessing protocols, asynchronous event multicast, and piped streams.
Beyond structure and topology, architecture shows the correspondence between system requirements and constructed elements, providing rationale for design decisions. System-level properties at this level include capacity, throughput, consistency, and component compatibility .
Abstractly, software architecture involves describing elements from which systems are built, interactions among these elements, patterns that guide their composition, and constraints on these patterns. A system is a collection of components and interactions; such a system may serve as a composite element in a larger design.
Why Architecture Matters
Architecture provides a shared vocabulary for software engineers. It offers a higher-level description relative to implementation details, giving a natural framework for understanding broader system-level concerns: global rates of flow, patterns of communication, execution control structure, scalability, and intended paths of system evolution.
System Design Is Layered
Each layer has components (primitive and composite), rules of composition for constructing nonprimitive components or systems, and rules of behavior providing semantics. The book identifies at least three design levels:
Architecture : Design issues involve overall association of system capability with components; components are modules; interconnections among modules are handled in various ways; operators guide composition of systems from subsystems.
Code : Design issues involve algorithms and data structures; components are programming language primitives (numbers, characters, pointers, control); primitive operators are arithmetic and data-manipulation primitives; composition mechanisms include records, arrays, and procedures.
Executable : Design issues involve memory maps, data layouts, call stacks, and register allocations; components are bit patterns supported by hardware; operations and compositions are described in machine code.
Sciences Supporting Software Engineering
Specifications (abstract models, algebraic axioms)
Software structure (bundling representation with algorithms)
Language issues (modules, scope, user-defined types)
Information hiding (protecting integrity of information not in specification)
Integrity constraints (invariants of data structures)
Rules for composition (declarations)
Module interconnection language (MIL) to support the connection effort
Four Aspects of Architecture Research
Architectural description languages
Codification of architectural expertise
Frameworks for specific domains
Formal underpinnings for architecture
What Is an Architectural Style?
An architecture of a specific system is a collection of computational components together with a description of the interactions among these components — the connectors . Examples of components: clients, servers, filters, layers, databases. Examples of connectors: procedure call, event broadcast, database protocols, pipes.
An architectural style defines a vocabulary of components and connector types, and a set of constraints on how they can be combined.
To approach specific architectural styles, answer these questions:
What is the design vocabulary — the types of components and connectors?
What are the allowable structural patterns?
What is the underlying computational model?
What are the essential invariants of the style?
What are some common examples of its use?
What are the advantages and disadvantages of using that style?
What are some of the common specializations?
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
Thought Artisan
I think, therefore I am; recording insights from daily life and technology.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
