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