Software Architecture

Learned in SE464.

What is Software Architecture?

The conceptual fabric that defines a system. All architecture is design but not all design is architecture.

Codebases are exploding in size (1M to 1B lines of code). Software Architecture is the key ingredient in managing complexity and risk.

Terminology

System Architecture

  • Structure: several computers, networks, databases, etc. connected together
  • Analogy: plan of a city

Conceptual (prescriptive) Software Architecture

  • Abstract structure: large piece of software with many parts and interconnections
  • Analogy: blueprint of a house

Concrete (descriptive) Software Architecture

  • Actual structure: large piece of software with many parts and interconnections
  • Analogy: actual structure of the house

Architecture vs Design

Architecture

  • Structure of system (components and connectors)
  • High level, hard to change (better get it right!)
  • Concerned with technical and non-technical requirements (security, legal, outsourcing)
  • Makes sense for systems with MLOCs (millions of lines of code)
  • Very early in the life cycle

Design

  • Inner structure of components
  • Low level (information hiding and interfaces help it change)
  • Mostly technical concerns
  • Makes sense for systems with KLOCs
  • Late in the life cycle