By the end of this chapter, the reader must be able to:
- Identify what architectural decisions are;
- Categorize architectural decisions;
- Understand that architectural decisions relate to each other and how they relate to each other;
- Understand what architectural views are;
- Understand the benefits of exhibiting a software architecture many views;
- Understand what architectural viewpoints are;
- Identify basic architectural viewpoints;
- Categorize architectural views according to architectural viewpoints;
- Relate the stakeholders' interests to architectural views;
- Understand what architectural patterns are and what are their benefits;
- Understand the relation between fulfilling non-functional requirements and applying architectural patterns;
- Recognize fundamental architectural patterns; and
- Apply architectural patterns in order to fulfill basic non-functional requirements.
After understanding the core concepts on software architecture, the reader is ready to learn how to document it. Concepts of views and viewtypes are introduced. This chapter may be notation agnostic, since languages come and go. However, examples using current languages may be wanted. The chapter's messages are:
- Each piece of information placed on an architecture is an architectural decision [4], [3].
- An architectural decision can be an existence decision.
- An architectural decision can be a property decision.
- An architectural decision can be an executive decision.
- An architectural decision can constrain another decision.
- An architectural decision can forbid another decision.
- An architectural decision can enable another decision.
- An architectural decision can subsume another decision.
- An architectural decision can conflict with another decision.
- An architectural decision can override another decision.
- An architectural decision can comprise another decision.
- An architectural decision can be and alternative to another decision.
- An architectural decision can be bound to another decision.
- An architectural decision can depend on another decision.
- A single diagram may not suffice the amount of information intended to be shown by an architect. So, it is essential the use of multiple views of the information [5], [2].
- There are three basic viewtypes: modules, component-and-connectors, and allocation, each of which with their own elements, relations, and styles [1].
- Modules viewtype is used for construction, since it can be considered the blueprint for the source code.
- Modules viewtype is used for analysis, specifically for requirement traceability and for impact analysis.
- Modules viewtype is used for communication, since it explains functionality by its parts.
- Component-and-connectors viewtype is used for reasoning about runtime system quality attributes.
- Allocation viewtype is used for analysis of performance, reliability, security and cost estimation.




