Software Architecture – Definitions, Roles, and Analogies
John D. McGregor
Clemson University

Definition from SAP
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.

ANSI/IEEE Std 1471-2000
the fundamental organization of a system, embodied in its components, their relationships to each other and the environment, and the principles governing its design and evolution.

Building Architecture Analogy
Similarities
   Sense of aesthetics is present in both
Differences
   Physical laws don’t apply
   Software architecture still immature

Leonardo da Vinci – a basic principle

Leonardo da Vinci - observation

Leonardo da Vinci

At last a genuine Leonardo

FallingWater

Christopher Alexander

Grands Magasins du Bon Marche

Quality without a name

Realization hierarchy

Where do I start?

J2EE v. 1.4 architecture

Architecture as a blender of technologies

Block diagram

4+1 Views - Krutchen

Tactics – decomposition - 1

Tactics – decomposition - 2

Tactics – decomposition - 3

Reasoning - Latency attribute

Reasoning – statistical model

Architecture and People
Stakeholder – anyone having an interest in the architecture
Client
User
Designers
…

Influences on the architecture
Stakeholders
Developing Organization
Technical/Deployment environment
Background of architects

Architecture process
Understand the requirements
Create architectures that satisfy the requirements
Evaluate the trade-offs among the architectures
Select appropriate architecture
Repeat as requirements evolve

Architectural pattern
description of element and relation types and a set of constraints
Architectural style
Client/server – implies multiple clients seeking service from a resource

Reference model
Characteristic of the domain – in this case ecommerce

Reference architecture

Why architecture?
Communication among stakeholders
Early design decisions
Transferable abstraction of the system

Architectural Structures
Module structures
Which piece is responsible for what
Component-connector structures
how do the major pieces interact at runtime
Allocation structures
allocates pieces of the architecture to pieces of the external environment

Module structures

Layered example – OSI Protocol Stack

Component/Connector structures

Common Object Request Broker

Allocation structures

Thread architecture

Eclipse environment

Eclipse requirements
Edit multiple files
Select files
Bind files into a project
Build a project
See the individual attributes