Review and summary of course material covered by the midterm
Format |
---|
|
(in order of appearance)
- Introduction: What is Software Architecture?
- Software Architecture Overview
- Reading Code
- Architecture Stakeholders and Requirements
- Views on Architecture - Modules
- Views on Architecture - Component and Connector
- Architecture and Design
- Documenting Behaviour
- Textbook Chapter 1
- Textbook Chapter 2
- Textbook Chapter 3
- Textbook Chapter 16
- Textbook Chapter 18
- Textbook Chapter 4
- Textbook Chapter 17
(notes go here)
Every system has an architecture.
"The software architecture of a system is the set of structures needed to reason about the system, which comprise the software elements, relations among them, and properties of both."
Why do we care?
We identify 7 main benefits of a clearly defined software architecture:
- Divide and conquer the problem - Architecture shows us how to transition up and down the abstraction hierarchy (system purposes down to individual lines of code).
- Help manage tasks and facilitate collaboration - The architecture helps us figure out who does what.
- A common language for the system - We establish and reuse styles, patterns, and syntax (like UML)
- Force us to look beyond "function" and into qualities.
- Connect business goals to actual software implementation.
- Avoid high-cost mistakes - by focusing on the "difficult" decisions.
- The best architectures create options - The "Architectural Runway" consists of the existing code, components, and technical infrastructure needed to implement near-term features without excessive redesign and delay. It provides the necessary technical foundation for developing business initiatives and implementing new Features and/or Capabilities.
(notes go here)
-
Software models are useful abstractions for reasoning about the system when the real world system is too complex to be easily reasoned with.
-
Implications of documentation:
- Systems have many (many) structures. We need to filter the ones we really care about.
- No single structure is the architecture.
- Every system has an architecture, which may be more or less visible in the documentation.
- We can only define whether an architecture (i.e. set of structures) is "good" or not by understanding how well it meets its quality requirements and ultimate business goals.
There are three main modes for creating a software model:
-
Diagram as Sketch - Sketches are usually only useful in a specific context. Often, sketches alone will not contain enough information/context to accurately and meaningfully portray a system or some aspect thereof. Sketches are typically short-term communication tools.
-
Diagram as Blueprint - Blueprints are built specifically to be handed off to downstream users (analogous with civil engineer handing off building blueprints to general contractor). Blueprints are meant to be precise and unambiguous.
-
Diagram as Executable - This is most common where there are tight constraints on safety or security, such as in automotive software. In this mode we may use a code-generation tool like Simulink to draw block diagrams which a built-in compiler can then translate into C code.
(notes go here)
(notes go here)
(notes go here)
Software in itself is not important, and cannot be measured for quality/satisfiability without recognizing who the system is for - these are the stakeholders.
The following table will serve as our template for identifying and describing stakeholders:
Role | Concerns | Instances |
---|---|---|
Acquirers | Oversee the procurement of the system or product | |
Assessors | Oversee the system’s conformance to standards and legal regulation | |
Communicators | Explain the system to other stakeholders via its documentation and training materials | |
Developers | Construct and deploy the system from specifications (or lead the teams that do this) | |
Maintainers | Manage the evolution of the system once it is operational | |
Production Engineers | Design, deploy, and manage the hardware and software environments in which the system will be built, tested, and run | |
Suppliers | Build and/or supply the hardware, software, or infrastructure on which the system will run | |
Support Staff | Provide support to users for the product or system when it is running | |
System | Administrators Run the system once it has been deployed | |
Testers | Test the system to ensure that it is suitable for use | |
Users | Define the system’s functionality and ultimately make use of it |
(notes go here)
(notes go here)
(notes go here)
(notes go here)
(notes go here)
(notes go here)
(notes go here)
(notes go here)
(notes go here)
(notes go here)
(notes go here)
(notes go here)
(notes go here)
(notes go here)
(notes go here)