Flash cards quiz
Click the button to start the quiz
Software Architecture Documentation
The practice of documenting the structures
Module View
An architectural view that focuses on the static structure of the system
Component and Connector View
An architectural view that illustrates the runtime behavior of the system
Allocation View
An architectural view that maps software components to physical devices and deployment environments
Creational Patterns
Design patterns that abstract the instantiation process
Structural Patterns
Design patterns concerned with how classes and objects are composed to form larger structures. Examples include Composite and Adapter.
Behavioral Patterns
Design patterns that focus on algorithms
Monolith Architecture
A unified
Microservices Architecture
An architectural style where the application is composed of loosely coupled
Use Case Diagram
A UML diagram that represents the interactions between users (actors) and the system to capture functional requirements.
Sequence Diagram
A UML diagram that shows how objects interact in a particular sequence
State Machine Diagram
A UML diagram that illustrates the states of an object and the transitions between those states
Informal Documentation
Documentation using sketches
Semiformal Documentation
Documentation using standardized notations like UML or SysML
Formal Documentation
Documentation with precise
Quality Attributes
Characteristics that determine the non-functional properties of a system
Architecture Description Languages (ADLs)
Formal languages used to describe the architecture of a software system
Factory Method Pattern
A creational design pattern where a method in a class creates an object
Composite Pattern
A structural design pattern that allows you to compose objects into tree structures to represent part-whole hierarchies
State Pattern
A behavioral design pattern that allows an object to alter its behavior when its internal state changes
Modifiability
Ease of changing the system's structure or behavior.
Quality Attribute Scenario
Detailed
Use Case
Interaction description between users and system to achieve goals.
Pattern
Recurring design solution in a specific context.
Tactic
Design primitive for achieving a quality attribute response.
Client-Server Pattern
Separates clients and servers
Layers Pattern
Groups modules into layers
Publish-Subscribe Pattern
Publishers send events to subscribers via an event bus.
Increase Cohesion
Ensure module elements are closely related.
Reduce Coupling
Minimize dependencies between modules.
Defer Binding
Delay value assignment to increase flexibility.
Stimulus
Condition requiring a system response.
Stimulus Source
Entity generating the stimulus.
Response Measure
Criteria for evaluating the response.
Environment
Circumstances under which the scenario occurs.
Artifact
Part of the system targeted by the stimulus.
Plug-in (Microkernel) Pattern
Core with extensible plug-ins for added functionality.
Scalability
Ability to handle increased load by adding resources.
Variability
Capability to support system variants and features.
Portability
Ease of running software on different platforms.
Availability
Probability that a system will be operational when needed.
Performance
Ability of a system to meet timing requirements.
Fault Detection
Methods to identify system faults
Fault Tolerance
System's ability to continue operating despite faults.
Mean Time Between Failures (MTBF)
Average time between system failures.
Mean Time To Repair (MTTR)
Average time to repair a system after a failure.
Throughput
Amount of work done in a given time period.
Latency
Time taken to respond to a request.
Redundant Spare
Duplicate components to take over if primary fails.
Exception Handling
Dealing with errors by reporting or masking them.
Rollback
Revert to a previous state if a deployment fails.
Retry
Reattempting an operation after a transient failure.
Reconfiguration
Reassigning responsibilities to functioning resources.
Control Resource Demand
Reducing work requests to manage system load.
Increase Resources
Adding faster processors or more memory.
Introduce Concurrency
Processing requests in parallel to reduce wait time.
Maintain Multiple Copies
Reducing contention by having multiple data copies.
Load Balancer Pattern
Distributing load across multiple resources.
Circuit Breaker Pattern
Prevents repeated failed service calls.
Testability
Ease with which software can be tested to ensure it functions correctly.
Security
Protecting data from unauthorized access while ensuring authorized access.
Control System State
Using specialized interfaces to manage variable values during testing.
Record/Playback
Recording system state to recreate faults for testing.
Localize State Storage
Storing state in a single place to start components in an arbitrary state.
Abstract Data Sources
Controlling input data to facilitate easier testing.
Sandbox
Isolating system instances for experimentation without real-world consequences.
Executable Assertions
Hand-coded checks indicating faulty states in a program.
Limit Complexity
Reducing dependencies and nondeterminism in the system.
Intrusion Detection
Comparing network traffic to known malicious patterns.
Verify Message Integrity
Using checksums or hash values to ensure message integrity.
Identify Actors
Identifying sources of external input to the system.
Authenticate Actors
Ensuring actors are who they claim to be.
Authorize Actors
Ensuring authenticated actors have the right permissions.
Encrypt Data
Encoding information to protect it from unauthorized access.
Revoke Access
Locking access to resources during an attack.
Audit
Keeping records of user and system actions for tracing attacks.
Nonrepudiation
Ensuring message senders cannot deny sending messages.
Dependency Injection
Separating dependencies from behavior for better testability.
Reduce Duplication
Identify and refactor duplicated logic.
Externalize Configurations
Store configuration values outside of the source code.
Feature Toggle
Dynamically enable/disable features without redeployment.
Redundancy
Duplicate components to provide backup.
Failover
Switch to a standby system upon failure.
Load Balancing
Distribute workloads across multiple resources.
Deployment Pipeline
Sequence of tools/activities for code deployment.
Canary Release
Gradually roll out changes to a small user subset.
Version Control Systems
Tools like Git for managing code changes.
CI/CD Tools
Tools like Jenkins for automating build and deployment.
Containerization Tools
Tools like Docker for managing containerized environments.
Monitoring Tools
Tools like Prometheus for monitoring system performance.
Configuration Management
Tools like Ansible for managing deployments.
Feature Management Tools
Tools like LaunchDarkly for managing feature toggles.
Architecturally Significant Requirements (ASRs)
Requirements profoundly affecting the architecture.
Utility Tree
Top-down representation of ASRs
Quality Attribute Workshop (QAW)
Method to identify and prioritize quality attributes early.
Business Model
Describes how an organization creates
Business Scenario
Describes business problems
Scenario Brainstorming
Generating scenarios that address stakeholder concerns.
Scenario Consolidation
Merging similar scenarios to avoid redundancy.
Scenario Prioritization
Voting to determine the importance of scenarios.
Scenario Refinement
Developing detailed quality attribute scenarios.
Architectural Drivers
Key requirements influencing architectural decisions.
Business/Mission Presentation
Presenting business concerns and requirements.
Architectural Plan Presentation
Presenting system descriptions and current architecture.
Quality Attribute
A characteristic determining the system's performance.
Functional Requirements
Specific behaviors or functions a system must support.
Technical Risk
Potential technical issues affecting project success.
Business Value
The importance of a requirement to business success.
Stakeholder Engagement
Involving stakeholders in decision-making processes.
Requirement Management
Tracking and managing requirements throughout the project.
Draw.io
Tool for creating utility trees and diagrams.
SWOT Analysis
Tool for analyzing strengths
Attribute-Driven Design (ADD)
Systematic method for designing software architecture in iterations.
Review Inputs
Assessing initial requirements
Iteration Goal
Specific objective for a design iteration
Design Concepts
Architectural solutions or patterns addressing specific drivers and requirements.
Instantiate Elements
Creating architectural components
Sketching Views
Visual representations of architectural decisions and structures.
Analysis and Review
Evaluating design against iteration goal and overall design purpose.
Quality Attribute Scenarios
Detailed descriptions of quality attributes and their impacts.
Constraints
Limitations or restrictions affecting architectural decisions.
Drivers
Key factors guiding the architectural design process.
Refine Elements
Choosing system parts to improve based on drivers and goals.
Allocate Responsibilities
Assigning duties to architectural elements.
Define Interfaces
Specifying how components interact and exchange information.
Design Iteration
Repeated cycle of reviewing
Primary Functional Requirements
Essential system functionalities driving the design.
Concerns
Issues or considerations affecting architectural decisions.
Design Purpose
The main objective guiding a design iteration.
Prototype
An initial model used to test design concepts and decisions.
ATAM
Method for evaluating software architectures by identifying tradeoffs and risks.
ASRs
Requirements profoundly impacting the architecture.
Sensitivity Points
Architectural decisions significantly affecting a quality attribute.
Tradeoff Points
Improving one quality attribute degrades another.
Risks
Architectural decisions that may lead to undesirable outcomes.
Non-Risks
Architectural decisions deemed safe after analysis