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.