Software Architecture and Design

Software Design

  • Software design and documentation takes place during the Design phase of the SDLC
  • Software architecture is the organisation of the system
  • SA serves as a blueprint for developers
  • SA comprises of fundamental structures and behaviours

Early design decisions

  • How components interact
  • The operating environment
  • Design principles
  • Addresses non-functional aspects
  • Costly to change once implemented

Importance of Software Architecture

  • Well designed SA balances needs of separate stakeholders, improves communication among team
  • Represents the earliest design decisions, impacts future decisions
  • Allows flexibility for changing requirements
  • Increases lifespan of a system, even when implementation details change

Tech stacks

  • Guides technology stack choice
  • Tech stacks must address non-functional capabilities
  • Tech stacks include: 1. Software 2. Programming languages 3. Libraries 4. Frameworks
  • Architects must weigh the advantages and disadvantages of the tech stack choices

Artifacts

There are several artifacts produced during the architectural design phase

  • Software design document (SDD): Its a collection of technical specifications regarding design implementation. Provides design considerations such as assumptions, dependencies, constraints, requirements, objectives and methodologies
  • Architectural diagrams: Displays components, interactions, constraints, confines and architectural patterns
  • Unified Modelling Language (UML): Visually communicate structures and behaviours. Not constrained by any programming language.

Deployment considerations

  • Architecture drives production environment choices
  • Examples: Servers, Load balancers, Databases etc

Software Design and Modelling

Software design is a process to document:

  • Structural components
  • Behavioural attributes

Models express software design using:

  • Diagrams and flowcharts
  • Unified Modelling Language (UML)

Characteristics of structured design 

  • Structural elements: modules & sub-modules
  • Cohesive
  • Loosely coupled

Behavioural models

  • Describe what a system does but does not explain how it does it
  • Communicate the behaviour of the system
  • Many types of behavioural UML diagrams
  • State transition
  • Interaction

UML Diagrams

  • Visual representations to communicate architecture, design, and implementation
  • Two types: structural and behavioural
  • Programming language agnostic

Advantages of UML

  • Plan behaviors and structures in advance
  • Facilitates communication
  • Saves time and money
  • Bring team members up to speed quickly
  • Navigate source code

Recap

  • Structured design breaks down a software problem into well organised solution elements
  • Behavioural models describe the behaviour of a system
  • UML diagrams acclimate developers to the project, plan features, navigate source code
  • A state transition diagram describes different states of a system and triggering events
  • An interaction diagram describes how interacting objects communicate