Software Architecture Fundamentals: A Study Guide for the Certified Professional for Software Architecture® – Foundation Level – iSAQB compliant
5/5
()
About this ebook
This book gives you all the basic know-how you need to begin designing scalable system software architectures. It goes into detail on all the most important terms and concepts and how they relate to other IT practices.
Following on from the basics, it describes the techniques and methods required for the planning, documentation, and quality management of software architectures. It details the role, the tasks, and the work environment of a software architect, as well as looking at how the job itself is embedded in company and project structures. The book also addresses the tools required for the job.
This edition has been updated to conform to the ISO/IEC 25010 and ISO/IEC/IEEE 42010 standards. It also puts increased emphasis on domain-driven design, and looks at contemporary architectures such as microservices.
The book is based on the International Software Architecture Qualification Board’s Certified Professional for Software Architecture – Foundation Level (CPSA-F) syllabus, version 4.1.1. (July 2017).
Mahbouba Gharbi
Mahbouba Gharbi is managing director and Chief Architect at ITech Progress GmbH, and chairman of the board at the International Software Architecture Qualification Board (iSAQB). She is a self-confessed software architecture enthusiast and the author of many expert articles. She is a welcome guest speaker at numerous international conferences.
Related to Software Architecture Fundamentals
Related ebooks
Software Engineering: Architecture-driven Software Development Rating: 4 out of 5 stars4/5JavaScript Domain-Driven Design Rating: 3 out of 5 stars3/5Fundamentals of Software Engineering: Designed to provide an insight into the software engineering concepts Rating: 0 out of 5 stars0 ratingsSoftware Development Fundamentals Rating: 0 out of 5 stars0 ratings.NET Design Patterns Rating: 3 out of 5 stars3/5Software Engineering for Embedded Systems: Methods, Practical Techniques, and Applications Rating: 3 out of 5 stars3/5Hands-On Parallel Programming with C# 8 and .NET Core 3: Build solid enterprise software using task parallelism and multithreading Rating: 0 out of 5 stars0 ratingsDevops in Practice: Reliable and automated software delivery Rating: 1 out of 5 stars1/5Learning .NET High-performance Programming Rating: 0 out of 5 stars0 ratingsDeveloping Cloud Native Applications in Azure using .NET Core: A Practitioner’s Guide to Design, Develop and Deploy Apps Rating: 0 out of 5 stars0 ratingsMastering JavaScript Design Patterns Rating: 4 out of 5 stars4/5DynamoDB Applied Design Patterns Rating: 3 out of 5 stars3/5Hands-On Microservices with Kubernetes: Build, deploy, and manage scalable microservices on Kubernetes Rating: 5 out of 5 stars5/5Software Design Methodology: From Principles to Architectural Styles Rating: 5 out of 5 stars5/5Incremental Software Architecture: A Method for Saving Failing IT Implementations Rating: 5 out of 5 stars5/5Integration Architecture Rating: 5 out of 5 stars5/5Mastering Non-Functional Requirements Rating: 5 out of 5 stars5/5Refactoring for Software Design Smells: Managing Technical Debt Rating: 4 out of 5 stars4/5Cracking the IT Architect Interview Rating: 5 out of 5 stars5/5Microservices Architecture Handbook: Non-Programmer's Guide for Building Microservices Rating: 5 out of 5 stars5/5RESTful API Design - Best Practices in API Design with REST: API-University Series, #3 Rating: 5 out of 5 stars5/5Agile Software Architecture: Aligning Agile Processes and Software Architectures Rating: 4 out of 5 stars4/5API Design Patterns Rating: 5 out of 5 stars5/5UML 2.0 in Action: A project-based tutorial Rating: 0 out of 5 stars0 ratingsDomain Driven Design : How to Easily Implement Domain Driven Design - A Quick & Simple Guide Rating: 2 out of 5 stars2/5Microservices Deployment Cookbook Rating: 0 out of 5 stars0 ratingsMicroservices Patterns: With examples in Java Rating: 5 out of 5 stars5/5
Computers For You
SQL QuickStart Guide: The Simplified Beginner's Guide to Managing, Analyzing, and Manipulating Data With SQL Rating: 4 out of 5 stars4/5Elon Musk Rating: 4 out of 5 stars4/5The Invisible Rainbow: A History of Electricity and Life Rating: 4 out of 5 stars4/5Slenderman: Online Obsession, Mental Illness, and the Violent Crime of Two Midwestern Girls Rating: 4 out of 5 stars4/5Standard Deviations: Flawed Assumptions, Tortured Data, and Other Ways to Lie with Statistics Rating: 4 out of 5 stars4/5Mastering ChatGPT: 21 Prompts Templates for Effortless Writing Rating: 5 out of 5 stars5/5Everybody Lies: Big Data, New Data, and What the Internet Can Tell Us About Who We Really Are Rating: 4 out of 5 stars4/5101 Awesome Builds: Minecraft® Secrets from the World's Greatest Crafters Rating: 4 out of 5 stars4/5CompTIA IT Fundamentals (ITF+) Study Guide: Exam FC0-U61 Rating: 0 out of 5 stars0 ratingsAlan Turing: The Enigma: The Book That Inspired the Film The Imitation Game - Updated Edition Rating: 4 out of 5 stars4/5Procreate for Beginners: Introduction to Procreate for Drawing and Illustrating on the iPad Rating: 0 out of 5 stars0 ratingsThe Hacker Crackdown: Law and Disorder on the Electronic Frontier Rating: 4 out of 5 stars4/5Dark Aeon: Transhumanism and the War Against Humanity Rating: 5 out of 5 stars5/5The ChatGPT Millionaire Handbook: Make Money Online With the Power of AI Technology Rating: 0 out of 5 stars0 ratingsCreating Online Courses with ChatGPT | A Step-by-Step Guide with Prompt Templates Rating: 4 out of 5 stars4/5Childhood Unplugged: Practical Advice to Get Kids Off Screens and Find Balance Rating: 0 out of 5 stars0 ratingsAP Computer Science Principles Premium, 2024: 6 Practice Tests + Comprehensive Review + Online Practice Rating: 0 out of 5 stars0 ratingsCompTIA Security+ Practice Questions Rating: 2 out of 5 stars2/5Grokking Algorithms: An illustrated guide for programmers and other curious people Rating: 4 out of 5 stars4/5Going Text: Mastering the Command Line Rating: 4 out of 5 stars4/5The Professional Voiceover Handbook: Voiceover training, #1 Rating: 5 out of 5 stars5/5People Skills for Analytical Thinkers Rating: 5 out of 5 stars5/5Remote/WebCam Notarization : Basic Understanding Rating: 3 out of 5 stars3/5How to Create Cpn Numbers the Right way: A Step by Step Guide to Creating cpn Numbers Legally Rating: 4 out of 5 stars4/5
Reviews for Software Architecture Fundamentals
2 ratings0 reviews
Book preview
Software Architecture Fundamentals - Mahbouba Gharbi
Preface
In addition to motivated teams and great management, software architecture is an important factor for the success of any software project. In the context of systematic design and construction, solid software architecture ensures the fulfilment of quality requirements such as extensibility, flexibility, performance, and time-to-market.
Software architects reconcile customer requirements with the available technical options and the prevailing conditions and constraints. They ensure the creation of appropriate structures and smooth interaction of all system components. As team players, they work closely with software developers and other parties involved in the project.
The International Software Architecture Qualification Board (iSAQB) is an independent international body that defines standards for training, examination, and certification of software architects. Software Architecture Fundamentals is based on the curriculum for the iSAQB’s Certified Professional for Software Architecture – Foundation Level (CPSA-F) course.
The text is based on the revised version 4.1.1 of the curriculum, which has been expanded to cover new aspects of domain-driven design (DDD). DDD enables software architects to design large-scale functional structures and gain a better understanding of the overall interaction of functional components. The current curriculum also covers numerous new architectural patterns such as microservices.
CPSA-F certification ensures that software architects have sound levels of knowledge and expertise for the design of small and medium-sized systems. Based on a detailed requirements specification, they can then design and document appropriate software architectures. CPSA-F graduates have the requisite skills for making problem-specific design decisions that build on their previous practical experience.
This self-study book enables you to prepare for the certification examination. It assumes that you have practical experience designing and developing software systems, command of a high-level programming language, and an understanding of the basics of UML. Because lectures alone cannot replace interaction with other software architects, we also recommend participation at iSAQB attendance-based events.
Benefit from our many years of experience in software and systems engineering, and in the design and construction of medium- and large-scale IT systems.
We hope you enjoy reading our book and wish you every success with your CPSA-F training and certification!
Mahbouba Gharbi, Arne Koschel, Andreas Rausch
December 2018
Content
1Introduction
1.1Software architecture as an aspect of software engineering
1.2iSAQB: The International Software Architecture Qualification Board
1.3Certified Professional for Software Architecture – Foundation and Advanced Level
1.4The aim of this book
1.5Prerequisites
1.6Reader’s guide
1.7Target audience
1.8Acknowledgements
2Software Architecture Fundamentals
2.1Integration with the iSAQB curriculum
2.2Software-intensive systems and software architectures
2.3Fundamental software architecture concepts
2.4A bird’s-eye view of software architecture design
2.5Test your knowledge
3Designing Software Architectures
3.1Integration with the iSAQB curriculum
3.2Overview of the architecture design process
3.3Design principles and heuristics
3.4Architecture-centric development approaches
3.5Techniques for a good design
3.6Architectural patterns
3.7Design patterns
3.8Test your knowledge
4Description and Communication of Software Architectures
4.1Integration with the iSAQB curriculum
4.2The CoCoME example
4.3Views and templates
4.4Technical/cross-cutting concepts in software architectures
4.5Architecture and implementation
4.6Common document types for software architectures
4.7Best-practice rules for documentation
4.8Examples of alternative architecture frameworks
4.9Test your knowledge
5Software Architectures and Quality
5.1Integration with the iSAQB curriculum
5.2Evaluating software architectures
5.3Prototypes and technical proof of concept
5.4Architecture analysis
5.5Test your knowledge
6Tools for Software Architects
6.1Integration with the iSAQB curriculum
6.2General information
6.3Requirements management tools
6.4Modeling tools
6.5Generation tools
6.6Static code analysis tools
6.7Dynamic analysis tools
6.8Build management tools
6.9Configuration and version management tools
6.10Code management tools
6.11Testing tools
6.12Documentation tools
6.13Test your knowledge
Appendix
ASample Questions
A.1Excerpts from the examination regulations
A.2Sample Questions
BList of Abbreviations
CGlossary
DReferences
Table of Contents
1Introduction
1.1Software architecture as an aspect of software engineering
1.2iSAQB: The International Software Architecture Qualification Board
1.3Certified Professional for Software Architecture – Foundation and Advanced Level
1.4The aim of this book
1.5Prerequisites
1.6Reader’s guide
1.7Target audience
1.8Acknowledgements
2Software Architecture Fundamentals
2.1Integration with the iSAQB curriculum
2.1.1Learning goals
2.2Software-intensive systems and software architectures
2.2.1What is a software-intensive system?
2.2.2Types of software-intensive systems
2.2.3The importance of software architecture for a software-intensive system
2.3Fundamental software architecture concepts
2.3.1What is a software architecture?
2.3.2Building blocks, interfaces, and configurations
2.3.3Concepts for describing software architectures
2.3.4Architectural description and architectural levels
2.3.5Interactions between software architecture and environment
2.3.6Quality and value of a software architecture
2.4A bird’s-eye view of software architecture design
2.4.1Objectives and functions of software architecture design
2.4.2Overview of software architecture design
2.4.3Interplay between activities and abstraction levels within the design
2.4.4A software architect’s tasks and relationships with other roles
2.5Test your knowledge
3Designing Software Architectures
3.1Integration with the iSAQB curriculum
3.1.1Learning goals
3.2Overview of the architecture design process
3.3Design principles and heuristics
3.3.1Top-down and bottom-up
3.3.2Hierarchical (de)composition
3.3.2.1Divide and conquer
3.3.2.2Decomposition principles
3.3.2.3The as-simple-as-possible
principle
3.3.2.4Separation of concerns
3.3.3Lean interfaces and information hiding
3.3.3.1Information hiding
3.3.3.2Use of interfaces
3.3.4Regular refactoring and redesign
3.4Architecture-centric development approaches
3.4.1Domain-driven design
3.4.1.1Functional models as the basis for a design
3.4.1.2Systematic management of domain objects
3.4.1.3Structuring of the functional domain
3.4.1.4Types of domains
3.4.1.5Integration of domains
3.4.2MDA
3.4.3Reference architectures
3.4.3.1Generative creation of system building blocks
3.4.3.2Aspect orientation
3.4.3.3Object orientation
3.4.3.4Procedural approaches
3.5Techniques for a good design
3.5.1Degenerated design
3.5.2Loose coupling
3.5.3High cohesion
3.5.4The open/closed principle
3.5.5Dependency inversion
3.5.6Separation of interfaces
3.5.7Resolving cyclic dependencies
3.5.8Liskov’s substitution principle
3.6Architectural patterns
3.6.1Adaptable systems
3.6.1.1Dependency Injection
3.6.2Interactive systems
3.6.2.1Model-view-controller pattern
3.6.2.2Model-view-presenter pattern
3.6.2.3Presentation-abstraction-control
3.6.3From chaos to structure
3.6.3.1Layered architecture
3.6.3.2Pipes and filters
3.6.3.3Blackboard
3.6.4Distributed systems
3.6.4.1Broker
3.6.4.2Service orientation
3.6.4.3Modularization
3.6.4.4Microservices
3.7Design patterns
3.7.1Adapter
3.7.2Observer
3.7.3Decorator
3.7.4Proxy
3.7.5Facade
3.7.6Bridge
3.7.7State
3.7.8Mediator
3.8Test your knowledge
4Description and Communication of Software Architectures
4.1Integration with the iSAQB curriculum
4.1.1Learning goals
4.2The CoCoME example
4.2.1Use cases in the CoCoME system
4.2.2Overview of the structure of the CoCoME system
4.3Views and templates
4.3.1Well-established views as defined by the iSAQB
4.3.2UML diagrams as a notation tool in view descriptions
4.3.3View description: high-level structure and an example
4.3.3.1High-level structure: template-type view description
4.3.3.2Example: Excerpt from a view description for a building block view
4.3.4Context view (or context diagram)
4.3.5Building block view
4.3.6Runtime view
4.3.7Deployment/infrastructure view
4.3.8Interdependencies of architecture views
4.3.9Hierarchical refinement of architecture views
4.4Technical/cross-cutting concepts in software architectures
4.4.1Technical/cross-cutting concepts - sample dimensions
4.4.2Error handling
4.4.3Security
4.5Architecture and implementation
4.5.1Sample implementation
4.6Common document types for software architectures
4.6.1Central architecture description
4.6.2Architecture overview
4.6.3Document overview
4.6.4Overview presentation
4.6.5Architecture wallpaper
4.6.6Documentation handbook
4.6.7Technical Information
4.6.8Documentation of external interfaces
4.6.9Template
4.7Best-practice rules for documentation
4.7.1Rule 1: Write from the readers’ perspective
4.7.2Rule 2: Avoid unnecessary repetition
4.7.3Rule 3: Avoid ambiguity
4.7.4Rule 4: Standardized organizational structure or templates
4.7.5Rule 5: Justify important decisions in writing
4.7.6Rule 6: Check the documentation’s suitability for use
4.7.7Rule 7: Uncluttered diagrams
4.7.8Rule 8: Regular updates
4.8Examples of alternative architecture frameworks
4.8.1The 4+1 framework
4.8.2RM-ODP
4.8.3SAGA
4.9Test your knowledge
5Software Architectures and Quality
5.1Integration with the iSAQB curriculum
5.1.1Learning goals
5.2Evaluating software architectures
5.2.1Qualitative evaluation
5.2.1.1DIN ISO/IEC 25010
5.2.1.2Quality characteristics
5.2.1.3Additional quality characteristics
5.2.1.4Effects of specific quality characteristics
5.2.1.5Tactics and practices for fulfilling quality requirements
5.2.2Quantitative evaluation
5.2.2.1Checking architecture compliance
5.2.2.2Metrics
5.2.2.3Cyclomatic complexity
5.3Prototypes and technical proof of concept
5.3.1Technical proof of concept
5.3.2Prototype
5.3.2.1Benefits and disadvantages of software prototypes
5.3.2.2Types of software prototypes
5.4Architecture analysis
5.4.1The ATAM method
5.5Test your knowledge
6Tools for Software Architects
6.1Integration with the iSAQB curriculum
6.1.1Learning goals
6.2General information
6.2.1Costs
6.2.2Licenses and licensing conditions
6.3Requirements management tools
6.3.1Requirements and decision criteria
6.3.2Challenges faced by requirements management tools
6.3.3Examples
6.4Modeling tools
6.4.1Requirements and decision criteria
6.4.2Challenges faced by modeling tools
6.4.3Examples
6.5Generation tools
6.5.1Requirements and decision criteria
6.5.2Challenges faced by code generators
6.5.3Examples
6.6Static code analysis tools
6.6.1Requirements and decision criteria
6.6.2Challenges faced by static code analysis tools
6.6.3Examples
6.7Dynamic analysis tools
6.7.1Requirements and decision criteria
6.7.2Challenges faced by dynamic analysis tools
6.7.3Examples
6.8Build management tools
6.8.1Requirements and decision criteria
6.8.2Challenges faced by build management tools
6.8.3Examples
6.9Configuration and version management tools
6.9.1Requirements and decision criteria
6.9.2Challenges faced by configuration and version management tools
6.9.3Examples
6.10Code management tools
6.10.1Challenges faced by code management tools
6.10.2Examples
6.11Testing tools
6.11.1Requirements and decision criteria
6.11.2Challenges faced by test tools
6.11.3Examples
6.12Documentation tools
6.12.1Requirements and decision criteria
6.12.2Challenges faced by documentation tools
6.12.3Examples
6.13Test your knowledge
Appendix
ASample Questions
A.1Excerpts from the examination regulations
A.2Sample Questions
BList of Abbreviations
CGlossary
DReferences
1Introduction
Nowadays, software is everywhere, from commercial enterprises to virtually all areas of our day-to-day professional, public, and private lives. Air travel, phone calls, bank transfers, or driving would all be next to impossible without software. Software-controlled components can be found in every home and in many everyday devices, from washing machines to cars [BJ+06]. Software is not usually autonomous, but is instead embedded along with hardware and electronics, or as part of the business processes that companies use to generate value [TT+00].
The value and commercial success of companies and products is increasingly determined by software and software quality (see [BM00], [SV99], [TT+00]). Software engineers are thus faced with the challenge of implementing increasingly complex requirements at ever-increasing speed using ever-decreasing budgets while maintaining a high level of software quality.
Continual increase in the size and complexity of software systems has made them some of the most complex human-made systems ever created. The best example is the Internet, which is a truly global software-based system. Internet is now available beyond the bounds of our home planet on the International Space Station (ISS).
A structured and systematic approach to design is essential for the success of software-based systems. Despite the use of established software development methods, the number of unsuccessful software projects remains alarmingly large. To counter this, we need to avoid as many errors as possible, or identify and eliminate them during the early phases of software engineering. Requirements engineering and software architecture are two of these phases. In the words of Ernst Denert, one of the fathers of methodical software development, software architecture is the Ultimate software engineering discipline
(taken from Denert’s foreword in [Sie04]).
1.1Software architecture as an aspect of software engineering
Problems with software projects were identified as early as the 1960s, and were referred to then as the software crisis
. From 7–11 October 1968, the NATO Science Committee invited 62 internationally renowned researchers and experts to a conference in Garmisch, Germany, to address the future of software development. This conference is now regarded as the birth of modern software engineering [Dij72].
Figure 1-1Publications on the subject of software architecture since 1973 [Reu12]
Compared to traditional engineering disciplines (such as construction) that can fall back on several thousand years of experience, software engineering is still an extremely young discipline. It is therefore no surprise that the sub-discipline of software architecture is even younger. Figure 1-1 shows an increasing number of publications on the subject of software architecture from the 1990s onward [Reu12]. These figures are taken from The Web of Knowledge—one of the largest and most renowned publication databases.
With a view to the long history of construction architecture, Marcus Vitruvius Pollio (a Roman architect from the first century BC) was an architectural pioneer. In De architecture—nowadays known as Ten Books on Architecture [Vit60]—he argued that good architecture can be achieved using a clever combination of the following elements:
Utilitas (usefulness):
The building performs its function.
Firmitas (solidity):
The building is stable and long-lasting.
Venustas (elegance):
The building is aesthetically pleasing.
Figure 1-2Architecture in ancient Rome
This hypothesis can be directly applied to the discipline of software architecture. The objective of software architecture (and thus a software architect’s primary task) is to construct a system that balances the following three attributes:
Utilitas (usefulness):
The software fulfills the functional and non-functional requirements of the customer and its users.
Firmitas (solidity):
The software is stable in terms of the specified quality requirements (for example, the number of simultaneously supported users). It also has to allow future enhancements without having to completely rebuild the system.
Venustas (elegance):
The software’s structure makes it intuitive to use, but also easy to maintain and develop.
1.2iSAQB: The International Software Architecture Qualification Board
Software architecture is an extremely young discipline and, despite many publications on the subject, various opinions still exist regarding its precise scope and design in the context of computer science and information technology. The tasks and responsibilities of software architects are defined in very different ways and are subject to continual renegotiation during a project.
In contrast, software engineering disciplines such as project management, requirements engineering, and testing have a more mature knowledge base. Various independent organizations offer training curricula that clearly define the knowledge and skills required by these disciplines (for testing, visit www.istqb.org; for requirements engineering, visit www.ireb.org; for project management, visit www.pmi.org).
In 2008, a group of software architecture experts from business, industry, and scientific communities formed the International Software Architecture Qualification Board as a registered association under German law (iSAQB e.V., www.isaqb.org). The goal of the iSAQB is to define product- and manufacturer-independent standards for the training and certification of software architects. Certifications at Foundation, Advanced, and Expert levels allow software architects to certify their knowledge, experience, and skills using a recognized procedure (see figure 1-3).
Because it eliminates the terminological uncertainty referred to earlier, standardized training benefits established and aspiring software architects, companies, and training organizations. Precise training curricula are essential for the examination and certification of aspiring software, and ensure that high-quality training is available on the basis of an accepted canon of knowledge.
Certification as a Certified Professional for Software Architecture (CPSA) is carried out by independent bodies. CPSA Foundation Level certification is based on a subset of a non-public catalogue of demanding questions developed by the iSAQB and matched to the curriculum. Advanced Level certification also requires practical certification and participation in licensed training courses (or acknowledgement of equivalent non-iSAQB qualifications). Expert Level certification is currently in development.
Figure 1-3iSAQB certification levels (www.isaqb.org)
Various licensed training institutions offer multi-day courses designed to refresh and deepen candidates’ existing knowledge in these subject areas. Participation in a course is recommended, but is not a prerequisite for registration for the certification examination.
1.3Certified Professional for Software Architecture – Foundation and Advanced Level
The iSAQB