Software Architecture
Definition
Software architecture is 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.
Importance of Software Architecture
- Inhibits/enables quality attributes
- Helps reasoning about/managing change
- Helps predict system qualities
- Allows communication among Stakeholders
- Carries early design decisions
- Defines constraints on implementation
- Influences the organizational structure
- Enables evolutionary prototyping
- Helps with cost and schedule estimates
- Transferable, reusable model
- Allows the assembly of independent components
- Channels the creativity of developers
- Foundation for training
Views
Modules View
- organization as modules and relations
- subsystems, layers, components, classes
- decomposition, use, inheritance
- develops, managers concerns
- modifiability, testability, schedule
- component, package, class diagrams
Concurrency View
- runtime view of the system
- processes, threads, services, peers, clients, servers, peers
- run with, preempt
- calls, messages, events, shared memory
- integrators, operators
- integrity, fault-tolerance, performance
- component, interaction, activity diagrams
Deployment View
- topology and Deployment
- physical/virtual nodes
- physical/virtual links
- system engineers, operators
- availability, reliability, performance, scalability
- deployment diagrams
Architecture Process
- Architectural Requirements Selection
- Architecture Structuring
- Architecture Validation
Architecture Requirements Selection
Design Context and Purpose
- Nature of development
- Business Goal
Quality Attributes
- Measurable properties
- Product Fitness
- Stakeholders needs
- Should be measureable
Primary Functionality
- Critical to Business Goals
- Main Motivation
- Core Use Cases/Features
- Architecture affects Changes
Constraints
- Predetermined Decisions
- Technologies
- Interoperating Systems
- Laws, Standards
- Developers abilities
- Strict deadlines
Architectural Concerns
- Need to be considered
- General concerns
- Specific concerns
- Internal Requirements
- Issues
Architectural Design Concepts
- Facilitate architecture design
- realizations of design principles
- reference architectures
- patterns
- frameworks
Reference architectures
- overall logical structure in a domain
- reference model
- patterns/styles
Architectural Patterns/Styles
- conceptual solutions to recurring design problems in a defined context
- influences satisfaction architectural drivers
- specify architectural structures
Sample categories
- data flow
- independent components
- virtual machines
- data centered
- layered
Architectural Tactics
- fundamental design technique
- controls a specific quality attribute
Frameworks
- concrete reusable realization of architecture elements
- from patterns, tactics, reference architectures
- full-stack framework
- covers whole reference architecture
- non-full-stack framework
- covers specific concerns
Architecture Validation
- to ensure correctness of an architecture
- architecture review
- scenario-based evaluation
- quantitative evaluation
- prototype development
Architectural Drift
- introduction of architectural design decisions in descriptive architecture that are:
- not included in, encompassed by, or implied by prescriptive architecture
- but do not violate any of the prescriptive architecture's design decisions
Architectural Erosion
- introduction of architectural design decisions in descriptive architecture that
- violate prescriptive architecture.