Fundamentals 8 min read

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.

Thought Artisan
Thought Artisan
Thought Artisan
Software Architecture Fundamentals: Key Insights from Shaw & Garlan (1996)

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?

Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

software architecturearchitectural stylestrade-off analysiscomponents and connectorsdesign layersShaw and Garlansoftware engineering fundamentals
Thought Artisan
Written by

Thought Artisan

I think, therefore I am; recording insights from daily life and technology.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.