When asked about software architecture, people think frequently about models—that is, the representations of the structures that constitute the architecture. Less frequently, people think about the thought processes that produce these structures—that is, the process of design. Design is a complex activity to perform and a complex topic to write about, as it involves making a myriad of decisions that take into account many aspects of a system. These aspects are oftentimes hard to express, particularly when they originate from experience and knowledge that is hard-earned in the “battlefield” of previous software development projects. Nevertheless, the activity of design is the basis of software architecture and, as such, it begs to be explained. Although experience can hardly be communicated through a book, what can be shared is a method that can help you perform the process of design in a systematic way. This book is about that design process and about one particular design method, called Attribute-Driven Design (ADD). We believe that this method is a powerful tool that will help you perform design in a principled, disciplined, and repeatable way. In this book, employing ADD and several examples of ADD’s use in the real world, we show you how to perform architectural design. Even though you may not currently possess sufficient design experience, we illustrate how the method promotes reusing design concepts—that is, proven solutions that embody the experience of others. Although ADD has existed for more than a decade, relatively little has been written about it and few examples have been provided to explain how it is performed. This lack of published information has made it difficult for people to adopt the method or to teach others about it. Furthermore, the documentation that has been published about ADD is somewhat “high level” and can be hard to relate to the concepts, practices, and technologies that architects use in their day-to-day activities. We have been working with practicing architects for several years, coaching them on how to perform design, and learning in the process. We have learned, for example, that practicing architects take technologies into consideration early in the design process and this is something that was not part of the original version of ADD. For this reason, the method felt “disconnected” from reality for many practitioners. In this book, we provide a revised version of ADD in which we have tried to bridge the gap between theory and practice. We have also been teaching software architecture and software design for many years. Along the way, we realized how hard it is for people without any experience to perform design. This understanding motivated us to create a roadmap for design that, we believe, is helpful in guiding people to perform the design process. We also created a game that is useful in teaching about software design; it can be considered a companion to this book. The target audience for this book is anyone interested in the design of software architectures. We believe it will be particularly useful for practitioners who must perform this task but who currently perform it in an ad hoc way. Experienced practitioners who already perform design following an established method will also find new ideas—for example, how to track design progress using a Kanban board, how to analyze a design using tactics-based questionnaires, and how to incorporate a design method for early estimation. Finally, people who are already familiar with the other architecture methods from the Software Engineering Institute will find information about the ways to connect ADD to methods such as the Quality Attribute Workshop (QAW), the Architecture Tradeoff Analysis Method (ATAM), and the Cost Benefit Analysis Method (CBAM). This book will also be useful to students and teachers of computer science or software engineering programs. We believe that the case studies included here will help them understand how to perform the design process more easily. Certainly, we have been using similar examples in our courses with great success. As Albert Einstein said, “Example isn’t another way to teach; it is the only way to teach.”
Table of Contents
CHAPTER 1 Introduction
CHAPTER 2 Architectural Design
CHAPTER 3 The Architecture Design Process
CHAPTER 4 Case Study: FCAPS System
CHAPTER 5 Case Study: Big Data System
CHAPTER 6 Case Study: Banking System
CHAPTER 7 Other Design Methods
CHAPTER 8 Analysis in the Design Process
CHAPTER 9 The Architecture Design Process in the Organization
CHAPTER 10 Final Words
APPENDIX A A Design Concepts Catalog
APPENDIX B Tactics-Based Questionnaires
Excerpt from the eBook
Our hope is that this book will help you in understanding that design can be performed following a method, and that this realization will help you produce better software systems in the future. The book is structured as follows.
In Chapter 1, we briefly introduce software architecture and the Attribute-Driven Design method.
In Chapter 2, we discuss architecture design in more detail, along with the main inputs to the design process—what we call architectural drivers, plus the design concepts that will help you satisfy these drivers using proven solutions.
Chapter 3 presents the ADD method in detail. We discuss each of the steps of the method along with various techniques that can be used to perform these steps appropriately.
Chapter 4 is our first case study, which illustrates the development of a greenfield system. For this case study, we have made an effort to show how a majority of the concepts described in Chapter 3 are used in the design process, so you can think of this case study as being more “academic” in nature (although it is derived from a real-world system).
Chapter 5 presents our second case study, which was co-written with practicing software architects and as such is much more technical and detailed in nature. It will show you the nitty-gritty details of how ADD is used in the design of a Big Data system that involves many different technologies. This example illustrates the development of a system in what we consider to be a “novel” domain, as opposed to the more traditional domain used in Chapter 4.
Chapter 6 is a shorter case study that illustrates the use of ADD in the design of an extension of a legacy (or brownfield) system, which is a common situation. This example demonstrates that architectural design is not something that is performed only once, when the first version of the system is developed, but rather is an activity that can be performed at different moments of the development process.
Chapter 7 presents other design methods. In our revision of ADD, we adopted ideas from other authors who have also investigated the process of design, and here we briefly summarize their approaches both as an homage to their work and as a means to compare ADD to these methods.
Chapter 8 discusses the topic of analysis in depth, even though this is a book on design. Analysis is naturally performed as part of design, so here we describe techniques that can be used both during the design process or after a portion of the design has been completed. In particular, we introduce the use of tactics-based questionnaires, which are helpful in understanding, in a time-efficient and simple manner, the decisions made in the design process.
Chapter 9 describes how the design process fits at an organizational level. For instance, performing some amount of architectural design at the earliest moments of the project’s life is useful for estimation purposes. We also show how ADD can be associated with different software development approaches.
Chapter 10 concludes the book.
Humberto Cervantes; Rick Kazman. Designing Software Architectures: A Practical Approach (SEI Series in Software Engineering) (Kindle Locations 291-305). Pearson Education. Kindle Edition.
This service has no ratings - order and leave the first!