Author: Len Bass, Dr. Paul Clements and Rick Kazman
Publisher: Addison-Wesley Professional
Audience: Software architects
Reviewer: Kay Ewbank
This is the fourth edition of a book widely regarded as a classic since its first publication over twenty years ago.
The authors set out to explain what what software architecture is, why it matters, and how to be a software architect.
The first part of the book goes through these questions one by one, asking what is software architecture, what makes for a ‘good’ architecture, and why is it important.
The second part of the book looks in detail at what the authors describe as ‘quality attributes’. They first explain what they mean by this in a chapter on understanding quality attributes in which they look at the factors that can be used to measure the ‘utility’ of a product.
They then look at each of those attributes in turn, with chapters on availability, deployability, energy efficiency, the ability to integrate, and modifiability. Chapters on performance, safety, security, testability, usability, and working with other quality attributes complete this section. In each chapter, the authors lay out the general scenario for the particular feature they’re exploring, then discuss tactics for how to achieve the topic – safety, say. Readers then get a questionnaire that they can work through to test whether they’ve met the requirements for that feature. A set of patterns for the topic is then explained, and each chapter finishes with a section on further reading and discussion questions.
As its title Architectural Solutions, suggests Part III looks at different options for applications – what interfaces you might use, virtualization, the cloud, distributed computing, and mobile systems. Each chapter looks in detail at the advantages and considerations to take into account, so the chapter on virtualization considers shared resources, containers, pods, virtual machines and VM images, while the chapter on mobile systems discusses energy use, network connectivity, sensors and actuators.
Part IV moves on to Scalable Architecture Practices. Specifically, the authors ask what the architecturally significant requirements are for a project to be successful, and look at how you can work out the requirements for your specific project. They then move on to how to design your architecture using the technique of attribute driven design. Chapters on evaluating an architecture and documenting it follow, and this part of the book ends with a chapter on managing architecture debt – in other words, the problems caused by choosing a particular architecture when you need to maintain and further develop the project over time.
The final part of the book looks at the role of software architects in projects and at their competence, and a concluding chapter looking at quantum computing as a glimpse of the future.
If you’ve already read a previous edition of the book, what this edition adds is more emphasis on project safety, on how to achieve energy efficiency, and how to make sure your projects are easy to integrate with other projects. There are new chapters on virtualization, interfaces, mobility and the cloud to reflect modern requirements.
This book became a classic for good reasons. It has a definite feel of a textbook, but the material is well written and the recommendations for further reading probably make it worth getting without the usefulness of the rest of the material. Recommended.
To be informed about new articles on I Programmer, sign up for our weekly newsletter, subscribe to the RSS feed and follow us on Twitter, Facebook or Linkedin.