Table of Contents

Open all
Close all
Preface to the 2nd Edition
15
1 Introduction
17
1.1 Software architecture as an aspect of software engineering
18
1.2 iSAQB: The International Software Architecture Qualification Board
19
1.3 Certified Professional for Software Architecture – Foundation and Advanced Level
21
1.4 The aim of this book
22
1.5 Prerequisites
23
1.6 Reader’s guide
23
1.7 Target audience
24
1.8 Acknowledgements
24
2 Software Architecture Fundamentals
25
2.1 Integration with the iSAQB curriculum
26
2.1.1 Learning goals
26
2.2 Software-intensive systems and software architectures
27
2.2.1 What is a software-intensive system?
27
2.2.2 Side Note: Types of software-intensive systems
28
2.2.3 The importance of software architecture for a software-intensive system
31
2.3 Fundamental software architecture concepts
33
2.3.1 What is software architecture?
33
2.3.2 Building blocks, interfaces, and configurations
34
2.3.3 Concepts for describing software architectures
41
2.3.4 Architectural description and architectural levels
44
2.3.5 Interactions between software architecture and the environment
46
2.3.6 Quality and value of a software architecture
47
2.4 A bird’s-eye view of software architecture design
49
2.4.1 Objectives and functions of software architecture design
50
2.4.2 Overview of software architecture design
51
2.4.3 Interplay between activities and abstraction levels within the design
53
2.4.4 Side Note: A software architect’s tasks and relationships with other roles
56
2.5 Test your knowledge
57
3 Designing Software Architectures
61
3.1 Integration with the iSAQB curriculum
62
3.1.1 Learning goals
62
3.2 Overview of the architecture design process
62
3.3 Working with boundary conditions and external influencing factors
68
3.3.1 Types of influencing factors
69
3.4 Design principles and heuristics
70
3.4.1 Top-down and bottom-up
71
3.4.2 Hierarchical (de)composition
72
3.4.3 Conceptual integrity
74
3.4.4 Expect errors
74
3.4.5 Lean interfaces and information hiding
75
3.4.6 Regular refactoring and redesign
76
3.5 Architecture-centric development approaches
77
3.5.1 Side Note: Domain-driven design
77
3.5.2 Side Note: Global analysis
80
3.5.3 Side Note: Evolutionary architecture
80
3.5.4 Side Note: Model-driven architecture
82
3.5.5 Reference architectures
83
3.6 Techniques for a good design
85
3.6.1 Initial situation and motivation: Degenerated design
85
3.6.2 Loose coupling
86
3.6.3 High cohesion
87
3.6.4 Single responsibility principle (SRP)
88
3.6.5 The open/closed principle
88
3.6.6 Dependency inversion
89
3.6.7 Interface segregation principle (ISP)
90
3.6.8 Resolving cyclic dependencies
90
3.6.9 Liskov’s substitution principle
90
3.7 Architectural patterns
91
3.7.1 Adaptable systems
92
3.7.2 Interactive systems
93
3.7.3 From chaos to structure
95
3.7.4 Distributed systems
98
3.8 Side Note: Design patterns
101
3.8.1 Adapter
102
3.8.2 Observer
102
3.8.3 Decorator
103
3.8.4 Proxy
104
3.8.5 Facade
105
3.8.6 Bridge
105
3.8.7 State
106
3.8.8 Mediator
107
3.8.9 Factory
107
3.8.10 Interpreter
108
3.8.11 Plugin
109
3.8.12 Combinator
109
3.9 Deployment and operations
109
3.9.1 Deployment
110
3.9.2 Operations
111
3.9.3 Side Note: DevOps
112
3.10 Test your knowledge
113
4 Description and Communication of Software Architectures
117
4.1 Integration with the iSAQB curriculum
117
4.1.1 Learning goals
118
4.2 The CoCoME example
118
4.2.1 Use cases in the CoCoME system
119
4.2.2 Overview of the CoCoME system structure
120
4.3 Views and templates
121
4.3.1 Well-established views as defined by the iSAQB
121
4.3.2 UML diagrams as a notation tool in view descriptions
122
4.3.3 View description: High-level structure and an example
125
4.3.4 Context view (or context diagram)
129
4.3.5 Building block view
132
4.3.6 Runtime view
135
4.3.7 Deployment/infrastructure view
139
4.3.8 Interdependencies of architecture views
142
4.3.9 Hierarchical refinement of architecture views
143
4.4 Technical/cross-cutting concepts in software architectures
146
4.4.1 Technical/cross-cutting concepts: Sample dimensions
146
4.4.2 Error handling
147
4.4.3 Security
147
4.5 Architecture and implementation
148
4.5.1 Sample implementation
149
4.6 Common document types for software architectures
150
4.6.1 Central architecture description
150
4.6.2 Architecture overview
151
4.6.3 Document overview
151
4.6.4 Overview presentation
151
4.6.5 Architecture wallpaper
151
4.6.6 Documentation handbook
151
4.6.7 Architecture Decision Record
152
4.6.8 Technical information
152
4.6.9 Documentation of external interfaces
152
4.6.10 Template
153
4.7 Best-practice rules for documentation
153
4.7.1 Rule 1: Write from the readers’ perspective
153
4.7.2 Rule 2: Avoid unnecessary repetition
154
4.7.3 Rule 3: Avoid ambiguity
154
4.7.4 Rule 4: Standardized organizational structure or templates
154
4.7.5 Rule 5: Justify important decisions in writing
155
4.7.6 Rule 6: Check the documentation’s suitability for use
155
4.7.7 Rule 7: Uncluttered diagrams
155
4.7.8 Rule 8: Regular updates
155
4.7.9 Side Note: Rule 9: Adapt the changeability of the documentation to the architecture
156
4.8 Examples of alternative architecture frameworks
156
4.8.1 The 4 + 1 framework
157
4.8.2 SAGA
157
4.9 Test your knowledge
158
5 Software Architectures and Quality
161
5.1 Integration with the iSAQB curriculum
162
5.1.1 Learning goals
162
5.2 Evaluating software architectures
163
5.2.1 Qualitative evaluation
163
5.2.2 Quantitative evaluation
167
5.3 Side Note: Prototypes and technical proof of concept
170
5.3.1 Technical proof of concept
170
5.3.2 Prototype
170
5.4 Architecture analysis
172
5.4.1 Side Note: The ATAM method
172
5.5 Test your knowledge
178
6 Side Note: Tools for software architects
181
6.1 General information on tools
181
6.1.1 Costs
181
6.1.2 Licenses and licensing conditions
181
6.2 Requirements management tools
182
6.2.1 Requirements and decision criteria
182
6.2.2 Challenges faced by requirements management tools
183
6.2.3 Examples
183
6.3 Modeling tools
183
6.3.1 Requirements and decision criteria
183
6.3.2 Challenges faced by modeling tools
184
6.3.3 Examples
184
6.4 Static code analysis tools
184
6.4.1 Requirements and decision criteria
185
6.4.2 Challenges faced by static code analysis tools
185
6.4.3 Examples
185
6.5 Dynamic analysis tools
186
6.5.1 Requirements and decision criteria
186
6.5.2 Challenges faced by dynamic analysis tools
186
6.5.3 Examples
186
6.6 Configuration and version management tools
187
6.6.1 Requirements and decision criteria
187
6.6.2 Challenges faced by configuration and version management tools
187
6.6.3 Examples
187
6.7 Code management tools
188
6.7.1 Challenges faced by code management tools
188
6.7.2 Examples
188
6.8 Testing tools
188
6.8.1 Requirements and decision criteria
189
6.8.2 Challenges faced by testing tools
189
6.8.3 Examples
189
6.9 Documentation tools
189
6.9.1 Requirements and decision criteria
190
6.9.2 Challenges faced by documentation tools
190
6.9.3 Examples
190
Appendices
191
A Sample Questions
193
A.1 Excerpts from the examination regulations
193
A.2 Sample questions
194
B Abbreviations
199
C Glossary
201
D References
213
D.1 Literature
213
D.2 Websites
217
D.3 Standards and Norms
217
About the Authors
219
Index
221