A representation that enables a software engineer to:
Analyze how effectively the design meets its Functional and non-functional requirements.
Consider architectural alternatives at a stage when making design changes is still easy
Reduce risks with constructing the software
Why is Software Architecture Important?
It provides a representation that helps communication between stakeholders interested in developing a system.
Architecture points out design decisions that will have a big impact on all software engineering work that follows.
Architecture makes up a small, easy to understand way of how the system is structured and how its components work together.
Architectural Descriptions
Describes the use of architecture viewpoints, architecture frameworks, and architecture description languages as a way to codify the conventions and common practices for architectural description
“a collection of products to document an architecture."
identifies the system stakeholders having concerns considered fundamental to the architecture of the system-of-interest
Architecture Decision Documentation
Determine informationitems needed for each decision
Define links between each decision and appropriate requirements
Provide ways to change status when alternative decisions need to be evaluated
Define prerequisite relationships between decisions to support traceability
Link significant decisions to architectural views resulting from decisions
Document and communicate all decisions as they are made.
Agility and Architecture
To avoid rework, user stories are used to create and evolve an architectural model (walking skeleton) before any coding
Use models (allow software architects to add user stories to the evolving storyboard and works with the product owner to prioritize the architectural stories as “sprints” (work units)) are planned
Well run agile projects include delivery of architectural documentation during each sprint.
After the sprint is completed, the architect reviews the working prototype for quality before the team present sit to the stakeholders in a formal sprint review.
Architectural Styles
Set of Components
Set of Connectors
Constraints
Semantic Models
set of components
ex- for example: a database or computational modules
Task: perform a function required by a system.
Set of connectors
Task: enable “communication, coordination and cooperation” among components.
Constraints
Task: define how components can be integrated to form the system.
Semantic Models
Task: enable a designer to understand the overall properties of a system by analyzing the known properties of its constituent parts.
Architectural Organization and Refinement: Control
How is control managed within the architecture?
Is control synchronized, or do components operate asynchronously?
What is the control topology (the geometric form that the control takes)?
How is control shared among components?
How do components transfer control in the system?
Is there a specific control hierarchy, if yes, what is the role of components in this control hierarchy?
Architectural Organization and Refinement: Data.
How are data communicated between components?
Is the flow of data continuous, or are data objects passed to the system sporadically?
What is the mode of data transfer?
Do data components exist, if so, what is their role?
How do functional components interact with data components?
Are data components passive or active?
How do data and control interact within the system?
Architectural Considerations
Economy – software is uncluttered and relies on abstraction to reduce unnecessary detail
Visibility – Architectural decisions and their justifications should be obvious to software engineers who review
Spacing – Separation of concerns in a design without introducing hidden dependencies
Symmetry – System is consistent and balanced in its attributes
Emergence – Emergent, self-organized behavior and control are key to creating scalable, efficient, and economic software architectures.
Architectural Design
The software must be placed into context- The design should define the external entities (other systems, devices, people) that the software interacts with and the nature of the interaction
A set of architectural archetypes should be identified- An archetype is an abstraction (similar to a class) that represents one element of system behavior
The designer specifies the structure of the system by defining and refining software components that implement each archetype.
Describe the architectural styles/patterns that have been chosen to address the scenarios and requirements using one of these views: module, process, dataflow
Evaluate quality attributes by considering each one in isolation.
Identify the sensitivity of quality attributes to various architectural attributes for a specific architectural style.
Critique candidate architectures (developed in step 3) using the sensitivityanalysis (conducted in step 5)
Architectural Reviews
Assess the ability of the software architecture to meet the systems quality requirements and identify potential risks
Have the potential to reduce project costs by detecting design problems early.
Often make use of experience-based reviews, prototype evaluation, and scenario reviews, and checklists
Pattern-based Architectural Reviews
Identify and discuss the quality attributes by walking through the use cases.
Discuss a diagram of system’s architecture in relation to its requirements
Identify the architecture patterns used and match the system’s structure to the patterns’ structure.
Use existing documentation and use cases to determine each pattern’s effect on quality attributes
Identify all quality issues raised by architecture patterns used in the design.
Develop a short summary of issues uncovered during the meeting and make revisions to the walking skeleton.