What do you think?
Rate this book
This award-winning book, substantially updated to reflect the latest developments in the field, introduces the concepts and best practices of software architecture—how a software system is structured and how that system's elements are meant to interact. Distinct from the details of implementation, algorithm, and data representation, an architecture holds the key to achieving system quality, is a reusable asset that can be applied to subsequent systems, and is crucial to a software organization's business strategy.
Drawing on their own extensive experience, the authors cover the essential technical topics for designing, specifying, and validating a system. They also emphasize the importance of the business context in which large systems are designed. Their aim is to present software architecture in a real-world setting, reflecting both the opportunities and constraints that companies encounter. To that end, case studies that describe successful architectures illustrate key points of both technical and organizational discussions.
Topics new to this edition include:
Architecture design and analysis, including the Architecture Tradeoff Analysis Method (ATAM) Capturing quality requirements and achieving them through quality scenarios and tactics Using architecture reconstruction to recover undocumented architectures Documenting architectures using the Unified Modeling Language (UML) New case studies, including Web-based examples and a wireless Enterprise JavaBeans™ (EJB) system designed to support wearable computers The financial aspects of architectures, including use of the Cost Benefit Analysis Method (CBAM) to make decisionsIf you design, develop, or manage the building of large software systems (or plan to do so), or if you are interested in acquiring such systems for your corporation or government agency, use Software Architecture in Practice, Second Edition, to get up to speed on the current state of software architecture.
512 pages, Hardcover
First published January 1, 2021
By the time I’m writing this, I have about eight years of experience in software engineering. For a big part of it, software architecture has been a major concern for me. One of the earliest questions I pondered was the difference between software architecture as it’s practiced by the community and described in the canon and just developing some proper OOP. This distinction, although it started to clear early on, remained a bit vague for me. One of the longest-standing questions was the relationship between agile development and software architecture.
This book, as far as I can tell, is an acknowledged reference on the subject. It covers a lot of the related topics of software architecture and investigates the mutual interactions between them. The book covers a lot of theory and delves deeply into methods. I regard this as my official introduction to the field.
For several reasons, I’ll not dive into analysis. Instead, I’ll list some key takeaways:
Software architecture is the first step in guaranteeing the quality attributes of a system. It’s not alone, and the details of implementation have a significant part to play here, but the software architecture lays out the big directions.
Software architecture, if properly done, can play a great part in easing and guaranteeing many functions on the lifecycle of a software project. Starting from requirements gathering and elicitation, to testing and deployment. It operates within many contexts, such as the organizational context and the business context.
The software architecture is an abstraction. A single architecture can lead to different implementations.
Although it’s hard to draw a defining line between them, quality attributes and functional attributes are two different things. A some-what basic definition is that the functional requirements define what needs to be done, and quality attributes define how this is done.
The elicitation of most quality attributes is the job of the software architect.
Agile and software architecture can co-exist. In fact, software architecture can contribute many capabilities that are crucial for agile development, mainly quick prototyping and predictability about the system.
Documentation is just like any other kind of writing, it has to have its intended audience and expected uses while it’s being written.
The architecture is a set of views, where each view is concerned with a certain aspect and describes a set of elements and the connections between them. This approach is important while developing an architecture and while documenting it.
While explaining the software product lines, it was explained that the best cost-effective way for code reuse is sharing the full artifacts of a software, starting from the requirements, to the architecture and implementation and down to the testing artifacts. It means that quality concerns, deployment environment, organizational structures, and more, have a lot of effects on any developed software. Using any such software means adopting all these factors. That’s why the compromise is made during requirements elicitation between the expected economic gain from reusing a product line (or reusing an architecture) with the possible feature or requirements to drop that can’t be supported by this architecture.
Speak the right language. We, engineers, when we transform into hardcore nerds, tend to forget that a lot of other factors affect the project, and some factors that play a bigger role than technical aestheticism into the success of a project. The architecture’s main strong arguments are its economic and life cycle gains. Speaking about these effects is what’s likely to change the organization’s directions towards adopting a software architecture.