وبلاگ بلیان

Designing Software Architectures: A Practical Approach (SEI Series in Software Engineering)

جلد کتاب Designing Software Architectures: A Practical Approach (SEI Series in Software Engineering)

معرفی کتاب «Designing Software Architectures: A Practical Approach (SEI Series in Software Engineering)» نوشتهٔ Anthony Shaw و Cervantes, Humberto, Kazman, Rick، منتشرشده توسط نشر Addison-Wesley Professional در سال 2016. این کتاب در فرمت pdf، زبان انگلیسی ارائه شده است.

**__Designing Software Architectures__** will teach you how to design any software architecture in a systematic, predictable, repeatable, and cost-effective way. This book introduces a practical methodology for architecture design that any professional software engineer can use, provides structured methods supported by reusable chunks of design knowledge, and includes rich case studies that demonstrate how to use the methods. Using realistic examples, you’ll master the powerful new version of the proven Attribute-Driven Design (ADD) 3.0 method and will learn how to use it to address key drivers, including quality attributes, such as modifiability, usability, and availability, along with functional requirements and architectural concerns. Drawing on their extensive experience, Humberto Cervantes and Rick Kazman guide you through crafting practical designs that support the full software life cycle, from requirements to maintenance and evolution. You’ll learn how to successfully integrate design in your organizational context, and how to design systems that will be built with agile methods. Comprehensive coverage includes * Understanding what architecture design involves, and where it fits in the full software development life cycle * Mastering core design concepts, principles, and processes * Understanding how to perform the steps of the ADD method * Scaling design and analysis up or down, including design for pre-sale processes or lightweight architecture reviews * Recognizing and optimizing critical relationships between analysis and design * Utilizing proven, reusable design primitives and adapting them to specific problems and contexts * Solving design problems in new domains, such as cloud, mobile, or big data MuPDF error: syntax error: invalid key in dict MuPDF error: syntax error: invalid key in dict MuPDF error: syntax error: invalid key in dict MuPDF error: syntax error: invalid key in dict MuPDF error: syntax error: invalid key in dict MuPDF error: syntax error: invalid key in dict MuPDF error: syntax error: invalid key in dict MuPDF error: syntax error: invalid key in dict MuPDF error: syntax error: invalid key in dict Cover 1 Title Page 4 Copyright Page 5 Contents 6 Preface 14 Acknowledgments 18 CHAPTER 1 Introduction 20 1.1 Motivations 20 1.2 Software Architecture 22 1.2.1 The Importance of Software Architecture 22 1.2.2 Life-Cycle Activities 23 1.3 The Role of the Architect 26 1.4 A Brief History of ADD 27 1.5 Summary 28 1.6 Further Reading 29 CHAPTER 2 Architectural Design 30 2.1 Design in General 30 2.2 Design in Software Architecture 32 2.2.1 Architectural Design 33 2.2.2 Element Interaction Design 33 2.2.3 Element Internals Design 34 2.3 Why Is Architectural Design So Important? 35 2.4 Architectural Drivers 36 2.4.1 Design Purpose 37 2.4.2 Quality Attributes 38 2.4.3 Primary Functionality 44 2.4.4 Architectural Concerns 45 2.4.5 Constraints 46 2.5 Design Concepts: The Building Blocks for Creating Structures 47 2.5.1 Reference Architectures 48 2.5.2 Architectural Design Patterns 48 2.5.3 Deployment Patterns 51 2.5.4 Tactics 52 2.5.5 Externally Developed Components 54 2.6 Architecture Design Decisions 57 2.7 Summary 59 2.8 Further Reading 60 CHAPTER 3 The Architecture Design Process 62 3.1 The Need for a Principled Method 62 3.2 Attribute-Driven Design 3.0 63 3.2.1 Step 1: Review Inputs 63 3.2.2 Step 2: Establish the Iteration Goal by Selecting Drivers 65 3.2.3 Step 3: Choose One or More Elements of the System to Refine 65 3.2.4 Step 4: Choose One or More Design Concepts That Satisfy the Selected Drivers 66 3.2.5 Step 5: Instantiate Architectural Elements, Allocate Responsibilities, and Define Interfaces 66 3.2.6 Step 6: Sketch Views and Record Design Decisions 67 3.2.7 Step 7: Perform Analysis of Current Design and Review Iteration Goal and Achievement of Design Purpose 67 3.2.8 Iterate If Necessary 68 3.3 Following a Design Roadmap According to System Type 68 3.3.1 Design of Greenfield Systems for Mature Domains 69 3.3.2 Design of Greenfield Systems for Novel Domains 71 3.3.3 Design for an Existing System (Brownfield) 72 3.4 Identifying and Selecting Design Concepts 72 3.4.1 Identification of Design Concepts 73 3.4.2 Selection of Design Concepts 74 3.5 Producing Structures 77 3.5.1 Instantiating Elements 78 3.5.2 Associating Responsibilities and Identifying Properties 79 3.5.3 Establishing Relationships Between the Elements 80 3.6 Defining Interfaces 80 3.6.1 External Interfaces 80 3.6.2 Internal Interfaces 80 3.7 Creating Preliminary Documentation During Design 84 3.7.1 Recording Sketches of the Views 84 3.7.2 Recording Design Decisions 87 3.8 Tracking Design Progress 88 3.8.1 Use of an Architectural Backlog 88 3.8.2 Use of a Design Kanban Board 89 3.9 Summary 91 3.10 Further Reading 91 CHAPTER 4 Case Study: FCAPS System 94 4.1 Business Case 94 4.2 System Requirements 96 4.2.1 Use Case Model 96 4.2.2 Quality Attribute Scenarios 97 4.2.3 Constraints 98 4.2.4 Architectural Concerns 99 4.3 The Design Process 99 4.3.1 ADD Step 1: Review Inputs 99 4.3.2 Iteration 1: Establishing an Overall System Structure 100 4.3.3 Iteration 2: Identifying Structures to Support Primary Functionality 108 4.3.4 Iteration 3: Addressing Quality Attribute Scenario Driver (QA-3) 120 4.4 Summary 124 4.5 Further Reading 124 CHAPTER 5 Case Study: Big Data System 126 5.1 Business Case 126 5.2 System Requirements 127 5.2.1 Use Case Model 127 5.2.2 Quality Attribute Scenarios 128 5.2.3 Constraints 129 5.2.4 Architectural Concerns 129 5.3 The Design Process 130 5.3.1 ADD Step 1: Review Inputs 130 5.3.2 Iteration 1: Reference Architecture and Overall System Structure 131 5.3.3 Iteration 2: Selection of Technologies 139 5.3.4 Iteration 3: Refinement of the Data Stream Element 150 5.3.5 Iteration 4: Refinement of the Serving Layer 157 5.4 Summary 162 5.5 Further Reading 163 CHAPTER 6 Case Study: Banking System 164 6.1 Business Case 164 6.1.1 Use Case Model 166 6.1.2 Quality Attribute Scenarios 167 6.1.3 Constraints 167 6.1.4 Architectural Concerns 167 6.2 Existing Architectural Documentation 168 6.2.1 Module View 168 6.2.2 Allocation View 169 6.3 The Design Process 170 6.3.1 ADD Step 1: Review Inputs 171 6.3.2 Iteration 1: Supporting the New Drivers 171 6.4 Summary 177 6.5 Further Reading 178 CHAPTER 7 Other Design Methods 180 7.1 A General Model of Software Architecture Design 180 7.2 Architecture-Centric Design Method 183 7.3 Architecture Activities in the Rational Unified Process 184 7.4 The Process of Software Architecting 186 7.5 A Technique for Architecture and Design 188 7.6 Viewpoints and Perspectives Method 190 7.7 Summary 192 7.8 Further Reading 193 CHAPTER 8 Analysis in the Design Process 194 8.1 Analysis and Design 194 8.2 Why Analyze? 197 8.3 Analysis Techniques 198 8.4 Tactics-Based Analysis 199 8.5 Reflective Questions 204 8.6 Scenario-Based Design Reviews 206 8.7 Architecture Description Languages 209 8.8 Summary 210 8.9 Further Reading 211 CHAPTER 9 The Architecture Design Process in the Organization 212 9.1 Architecture Design and the Development Life Cycle 212 9.1.1 Architecture Design During Pre-Sales 213 9.1.2 Architecture Design During Development and Operation 216 9.2 Organizational Aspects 221 9.2.1 Designing as an Individual or as a Team 221 9.2.2 Using a Design Concepts Catalog in Your Organization 222 9.3 Summary 223 9.4 Further Reading 223 CHAPTER 10 Final Words 226 10.1 On the Need for Methods 226 10.2 Next Steps 228 10.3 Further Reading 229 APPENDIX A: A Design Concepts Catalog 230 A.1 Reference Architectures 230 A.1.1 Web Applications 231 A.1.2 Rich Client Applications 233 A.1.3 Rich Internet Applications 234 A.1.4 Mobile Applications 237 A.1.5 Service Applications 237 A.2 Deployment Patterns 240 A.2.1 Nondistributed Deployment 240 A.2.2 Distributed Deployment 241 A.2.3 Performance Patterns: Load-Balanced Cluster 242 A.3 Architectural Design Patterns 243 A.3.1 Structural Patterns 243 A.3.2 Interface Partitioning 245 A.3.3 Concurrency 247 A.3.4 Database Access 248 A.4 Tactics 249 A.4.1 Availability Tactics 249 A.4.2 Interoperability Tactics 251 A.4.3 Modifiability Tactics 252 A.4.4 Performance Tactics 254 A.4.5 Security Tactics 255 A.4.6 Testability Tactics 257 A.4.7 Usability Tactics 259 A.5 Externally Developed Components 260 A.5.1 Spring Framework 260 A.5.2 Swing Framework 262 A.5.3 Hibernate Framework 263 A.5.4 Java Web Start Framework 264 A.6 Summary 264 A.7 Further Reading 265 APPENDIX B: Tactics-Based Questionnaires 266 B.1 Using the Questionnaires 266 B.2 Availability 267 B.3 Interoperability 271 B.4 Modifiability 272 B.5 Performance 274 B.6 Security 276 B.7 Testability 279 B.8 Usability 280 B.9 DevOps 282 B.10 Further Reading 286 Glossary 288 About the Authors 294 Index 296 A 296 B 298 C 298 D 299 E 301 F 301 G 302 H 303 I 303 J 303 K 303 L 303 M 303 N 304 O 304 P 304 Q 305 R 305 S 306 T 307 U 308 V 308 W 308 Preface xiii Acknowledgments xvii Chapter 1: Introduction 1 1.1 Motivations 1 1.2 Software Architecture 3 1.3 The Role of the Architect 7 1.4 A Brief History of ADD 8 1.5 Summary 9 1.6 Further Reading 10 Chapter 2: Architectural Design 11 2.1 Design in General 11 2.2 Design in Software Architecture 13 2.3 Why Is Architectural Design So Important? 16 2.4 Architectural Drivers 17 2.5 Design Concepts: The Building Blocks for Creating Structures 28 2.6 Architecture Design Decisions 38 2.7 Summary 40 2.8 Further Reading 41 Chapter 3: The Architecture Design Process 43 3.1 The Need for a Principled Method 43 3.2 Attribute-Driven Design 3.0 44 3.3 Following a Design Roadmap According to System Type 49 3.4 Identifying and Selecting Design Concepts 53 3.5 Producing Structures 58 3.6 Defining Interfaces 61 3.7 Creating Preliminary Documentation During Design 65 3.8 Tracking Design Progress 69 3.9 Summary 72 3.10 Further Reading 72 Chapter 4: Case Study: FCAPS System 75 4.1 Business Case 75 4.2 System Requirements 77 4.3 The Design Process 80 4.4 Summary 105 4.5 Further Reading 105 Chapter 5: Case Study: Big Data System 107 5.1 Business Case 107 5.2 System Requirements 108 5.3 The Design Process 111 5.4 Summary 143 5.5 Further Reading 144 Chapter 6: Case Study: Banking System 145 6.1 Business Case 145 6.2 Existing Architectural Documentation 149 6.3 The Design Process 151 6.4 Summary 158 6.5 Further Reading 159 Chapter 7: Other Design Methods 161 7.1 A General Model of Software Architecture Design 161 7.2 Architecture-Centric Design Method 164 7.3 Architecture Activities in the Rational Unified Process 165 7.4 The Process of Software Architecting 167 7.5 A Technique for Architecture and Design 169 7.6 Viewpoints and Perspectives Method 171 7.7 Summary 173 7.8 Further Reading 174 Chapter 8: Analysis in the Design Process 175 8.1 Analysis and Design 175 8.2 Why Analyze? 178 8.3 Analysis Techniques 179 8.4 Tactics-Based Analysis 180 8.5 Reflective Questions 186 8.6 Scenario-Based Design Reviews 187 8.7 Architecture Description Languages 190 8.8 Summary 191 8.9 Further Reading 192 Chapter 9: The Architecture Design Process in the Organization 193 9.1 Architecture Design and the Development Life Cycle 193 9.2 Organizational Aspects 202 9.3 Summary 204 9.4 Further Reading 204 Chapter 10: Final Words 207 10.1 On the Need for Methods 207 10.2 Next Steps 209 10.3 Further Reading 210 Appendix A: A Design Concepts Catalog 211 A.1 Reference Architectures 211 A.2 Deployment Patterns 221 A.3 Architectural Design Patterns 224 A.4 Tactics 230 A.5 Externally Developed Components 241 A.6 Summary 245 A.7 Further Reading 246 Appendix B: Tactics-Based Questionnaires 247 B.1 Using the Questionnaires 247 B.2 Availability 248 B.3 Interoperability 252 B.4 Modifiability 253 B.5 Performance 255 B.6 Security 257 B.7 Testability 260 B.8 Usability 261 B.9 DevOps 263 B.10 Further Reading 267 Glossary 269 About the Authors 275 Index 277 "Designing Software Architectures" will teach you how to design any software architecture in a systematic, predictable, repeatable, and cost-effective way. This book introduces a practical methodology for architecture design that any professional software engineer can use, provides structured methods supported by reusable chunks of design knowledge, and includes rich case studies that demonstrate how to use the methods. Using realistic examples, you ll master the powerful new version of the proven Attribute-Driven Design (ADD) 3.0 method and will learn how to use it to address key drivers, including quality attributes, such as modifiability, usability, and availability, along with functional requirements and architectural concerns. Drawing on their extensive experience, Humberto Cervantes and Rick Kazman guide you through crafting practical designs that support the full software life cycle, from requirements to maintenance and evolution. You ll learn how to successfully integrate design in your organizational context, and how to design systems that will be built with agile methods. Comprehensive coverage includes Understanding what architecture design involves, and where it fits in the full software development life cycle Mastering core design concepts, principles, and processes Understanding how to perform the steps of the ADD method Scaling design and analysis up or down, including design for pre-sale processes or lightweight architecture reviews Recognizing and optimizing critical relationships between analysis and design Utilizing proven, reusable design primitives and adapting them to specific problems and contexts Solving design problems in new domains, such as cloud, mobile, or big data"--Provided by publisher Humberto Cervantes, Rick Kazman. Includes Bibliographical References And Index.
دانلود کتاب Designing Software Architectures: A Practical Approach (SEI Series in Software Engineering)