32
Chapter 2 Architectural Design

Designing Software Architectures: A Practical Approach - Chapter 2

Embed Size (px)

Citation preview

Page 1: Designing Software Architectures: A Practical Approach - Chapter 2

Chapter 2

Architectural Design

Page 2: Designing Software Architectures: A Practical Approach - Chapter 2

Outline

• Design in general• Design in software architecture• Importance of architectural design• Architectural Drivers• Design Concepts• Architecture design decisions• Summary

Page 3: Designing Software Architectures: A Practical Approach - Chapter 2

Design in general

• Design is both a verb and a noun. Design is a process, an activity, and hence a verb. The process results in the creation of a design—a description of a desired end state. Thus the output of the design process is the thing, the noun, the artifact that you will eventually implement. Designing means making decisions to achieve goals and satisfy requirements and constraints. The outputs of the design process are a direct reflection of those goals, requirements, and constraints.

Page 4: Designing Software Architectures: A Practical Approach - Chapter 2

Design in general

• Simple vs. Complex• Conventional vs. Novel

FallingwaterA lean-to

Image source: wikipedia

Page 5: Designing Software Architectures: A Practical Approach - Chapter 2

Design in Software Architecture

Page 6: Designing Software Architectures: A Practical Approach - Chapter 2

Levels of design

• Architectural design: design of structures that allow drivers to be satisfied

• Element interaction design: identification of additional elements and their interfaces

• Element internals design: interface implementation

Page 7: Designing Software Architectures: A Practical Approach - Chapter 2

Importance of architectural design• There is a very high cost to a project of not making certain design decisions, or

of not making them early enough. • Without doing some architectural thinking and some early design work, you

cannot confidently predict project cost, schedule, and quality. • In addition, architecture is a key enabler of agility, if you do not make some key

architectural decisions early and if you allow your architecture to degrade, you will be unable to maintain sprint velocity– We disagree with: “The best architectures, requirements, and designs emerge from

self-organizing teams” • Furthermore, the architecture will influence, but not determine, other decisions

that are not in and of themselves design decisions (e.g. Selection of tools, structuring of development environment)

• Finally, a well-designed, properly communicated architecture is key to achieving agreements that will guide the team. The most important kinds to make are agreements on interfaces and on shared resources.

Page 8: Designing Software Architectures: A Practical Approach - Chapter 2

Architectural Drivers

• Design purpose• Quality attributes• Primary functionality• Architectural concerns• Constraints

Page 9: Designing Software Architectures: A Practical Approach - Chapter 2

Design Purpose

• First, you need to be clear about the purpose of the design that you want to achieve.– When and why are you doing this architecture design? – Which business goals is the organization most

concerned about at this time? • Examples– Design for presales– Design for prototyping– Design for development

Page 10: Designing Software Architectures: A Practical Approach - Chapter 2

Quality Attributes

• Measurable or testable properties of a system that are used to indicate how well the system satisfies the needs of its stakeholders.

• Among the drivers, quality attributes are the ones that shape the architecture the most significantly.

• Given their importance, you must worry about eliciting, specifying, priori- tizing, and validating quality attributes. – QAW– Mission Thread Workshop– Utility Tree

Page 11: Designing Software Architectures: A Practical Approach - Chapter 2

Quality Attribute Scenarios• Describes the system’s response to some stimulus. • It is meaningless to say that a system will be “modifiable”,

because every system is modifiable with respect to some changes and not modifiable with respect to others. One can, how- ever, specify the modifiability response measure you would like to achieve (say, elapsed time or effort) in response to a specific change request.

• A quality attribute scenario is a short description of how a system is required to respond to some stimulus. – “The game shall change view modes in < 500 ms when the user

presses the <C> button”.

Page 12: Designing Software Architectures: A Practical Approach - Chapter 2

Quality Attribute Scenarios

• Six parts of a quality attribute scenario

Page 13: Designing Software Architectures: A Practical Approach - Chapter 2

Prioritizing scenarios• As with other requirements, scenarios should be prioritized. This can be

achieved by considering two dimensions that are associated with each scenario and that are assigned a rank of importance: – The first dimension corresponds to the importance of the scenario with re-

spect to the success of the system. This is ranked by the customer. – The second dimension corresponds to the degree of technical risk associ- ated

with the scenario. This is ranked by the architect. • A low/medium/high (L/M/H) scale is used to rank both dimensions. Once

the dimensions have been ranked, scenarios are prioritized by selecting those that have a combination of (H, H), (H, M), or (M, H) rankings.

• Do not start design without a prioritized list of measurable quality attributes!

Page 14: Designing Software Architectures: A Practical Approach - Chapter 2

Quality Attribute Workshop

• QAW Steps1. QAW Presentations and Introductions2. Business Goal Presentation3. Architectural Plan Presentation4. Identification of Architectural Drivers5. Scenario Brainstorming6. Scenario Consolidation7. Scenario Prioritization8. Scenario Refinement

Page 15: Designing Software Architectures: A Practical Approach - Chapter 2

Utility Tree

Page 16: Designing Software Architectures: A Practical Approach - Chapter 2

Primary Functionality

• Functionality is the ability of the system to do the work for which it was intended.

• As opposed to quality attributes, the way the system is structured does not normally influence functionality.

• In terms of architectural design, allocation of functionality to elements, rather than the functionality per se, is what matters. A good architecture is one in which the most common changes are localized in a single or a few elements, and hence easy to make.

Page 17: Designing Software Architectures: A Practical Approach - Chapter 2

Primary Functionality

• Primary functionality is usually defined as functionality that is critical to achieve the business goals that motivate the development of the system. It might also be that – it implies a high level of technical difficulty or that – it requires the interaction of many architectural elements.

• As a rule of thumb, approximately 10 percent of your use cases or user stories are likely to be primary.

• Some quality attribute scenarios are directly connected to the primary functionality in the system.

Page 18: Designing Software Architectures: A Practical Approach - Chapter 2

Architectural Concerns• Architectural concerns encompass additional aspects that need to

be considered as part of architectural design but that are not expressed as traditional require- ments. – General concerns. These are “broad” issues that one deals with in

creating the architecture, such as establishing an overall system structure – Specific concerns. These are more detailed system-internal issues such as

exception management, – Internal requirements. These requirements are usually not specified

explicitly in traditional requirement documents. They may address aspects that facilitate development, deployment, operation, or maintenance of the system.

– Issues. These result from analysis activities, such as a design review (see Section 8.6), so they may not be present initially

Page 19: Designing Software Architectures: A Practical Approach - Chapter 2

Constraints

• A constraint is a decision over which you have little or no control as an architect. – Mandated technologies– Other systems with which your system needs to

interoperate or integrate– Laws and standards that must be complied with,

the abilities and availability of your developers, – Deadlines that are non-negotiable, backward

compatibility with older versions of systems

Page 20: Designing Software Architectures: A Practical Approach - Chapter 2

Design Concepts

• They are the building blocks from which the structures that make up the architecture are created.

• Some of the most commonly used include– Reference architectures– Deployment patterns– Architectural patterns– Tactics– Externally developed components

Page 21: Designing Software Architectures: A Practical Approach - Chapter 2

Reference architectures

• Blueprints that provide an overall logical structure for particular types of applications. – Web application– Mobile application– Lambda architecture

Page 22: Designing Software Architectures: A Practical Approach - Chapter 2

Reference architectures

Example reference architecture for the development of web applications from the Microsoft Application Architecture Guide (Key: UML)

Page 23: Designing Software Architectures: A Practical Approach - Chapter 2

Architectural Design Patterns

• Design patterns are conceptual solutions to recurring design problems that exist in a defined context.

• There are catalogs with patterns that address – Decisions at varying levels of granularity. – Quality attributes such as security or integration.

Page 24: Designing Software Architectures: A Practical Approach - Chapter 2

Pattern example: Layers

Page 25: Designing Software Architectures: A Practical Approach - Chapter 2

Deployment Patterns

• They provide models on how to physically structure the system to deploy it.

Page 26: Designing Software Architectures: A Practical Approach - Chapter 2

Tactics

• They are techniques that architects have been using for years to manage quality attribute response goals.

• They are design decisions that influence the control of a quality attribute response.

Page 27: Designing Software Architectures: A Practical Approach - Chapter 2

Example: Performance Tactics

Page 28: Designing Software Architectures: A Practical Approach - Chapter 2

Externally Developed Components

• Patterns and tactics are abstract in nature, they need to be implemented. There are two ways to achieve this– code the elements obtained from tactics and patterns – associate technologies with one or more of these

elements in the architecture. • We consider technologies to be externally

developed components, because they are not created as part of the development project.

Page 29: Designing Software Architectures: A Practical Approach - Chapter 2

Externally Developed Components• Technology families. A technology family represents a group of spe-

cific technologies with common functional purposes. Example: ORM• Products. A product (or software package) refers to a self-contained

functional piece of software that can be integrated into the system that is being designed and that requires only minor configuration or coding. Exanple: MySQL

• Application frameworks. An application framework (or just framework) is a reusable software element, constructed out of patterns and tactics, that provides generic functionality addressing recurring domain and quality attribute concerns across a broad range of applications. Example: Hibernate

• Platforms. A platform provides a complete infrastructure upon which to build and execute applications. Example: Google Cloud

Page 30: Designing Software Architectures: A Practical Approach - Chapter 2

Selection of externally developed components

• This can be a challenging task because of their extensive number. Some criteria– Problem that it addresses. – Cost– Type of License– Support– Learning curve– Maturity– Popularity– Compatibility and Ease of Integration– Support for Critical Quality attributes– Size

Page 31: Designing Software Architectures: A Practical Approach - Chapter 2

Architecture Design Decisions

• Design is the process of making decisions • Experienced architects, when faced with a

design challenge, typically entertain a set of “candidate” decisions; from this set, they choose a best candidate and instantiate that.

• In the early stages of design, decisions focus on the biggest, most critical choices that will have substantial downstream consequences

Page 32: Designing Software Architectures: A Practical Approach - Chapter 2

Summary• Design as a set of decisions to satisfy requirements and

constraints • Architectural design addresses the satisfaction of architectural

drivers: the purpose, primary functionality, quality attribute requirements, architectural concerns, and constraints.

• Architectural design is so important because it is the embodiment of early, far-reaching, hard-to-change decisions.

• Architectural design is guided by certain principles. • Design concepts, such as reference architectures, deployment

patterns, architectural patterns, tactics, and externally developed components, are the building blocks of design.