Software architecture - alexanderteplov/computer-science GitHub Wiki

What is Software Architecture?

Definition

  1. Expert developers' shared understanding of the system design.
  2. The decisions that are hard to change.
  3. The important stuff. Software architecture forces us to recognize what is really important and how to deal with it.

© Martin Fowler

Components

  • software elements (modules)
  • relations among them (connections and communication protocols)
  • properties of both elements and relations (quality attributes)
  • constraints

Steps to define Architecture?

  • Identify Stakeholders (to communicate with)
  • Understand the Problem, Functional Requirements (solve a valid business problem or have a recognizable return on investment (ROI))
  • Identify Design Elements and their Relationships (boundaries and context of the system)
  • Evaluate the Architecture Design (Non-Functional Requirements, quality attributes, constraints)
  • Prioritize quality attributes (trade-off analysis, suffer ones for others)
  • Transform the Architecture Design (quality attributes oriented - optimization of solutions using various patterns)
  • Document the results (to facilitate communication between stakeholders)
⚠️ **GitHub.com Fallback** ⚠️