Issues Addressed by Software Architecture

Software Architecture is a level of design that concentrates on specific features and is concerned with certain issues:

Architecture Defines Structure

  • Sensible partitioning into inter-related components --> dependency to be minimised --> loosely coupled architecture from highly cohesive components
  • Meet specific requirements and application constraints
  • Responsibility driven design technique --> Wires Brock: Object, Responsibility, Collaboration

Architecture Specifies Component Communication

  • How divided components communicate data and control
  • Some e.g. Method calls within same address space, if in different threads or processes-synchronization, multiple components to be simultaneously informed about an event occurrence
  • Rescue: Architectural Patterns/ Style
Architecture Addresses Non-Functional Requirements
  • Non-functional requirements don't appear in use cases - they focus on how application provides required functionality and not what
  • 3 Areas are addressed:
    • Technical Constraints: By technology, non-negotiable
    • Business Constraints: Business and not technical reasons
    • Quality Attributes: scalability, availability, ease of change, portability, performance. These are issues of concern to application users and stakeholders
Architecture is an Abstraction
  • Definition of system structure and interactions
  • Easy to understand by stakeholders and team members
  • Suppress or ignore unnecessary details
  • Focus is on salient features
  • Components as black boxes; only externally visible properties
  • Abstraction and hierarchical decomposition reduces complexity 
  • Architecture partitions team responsibilities and dependencies