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