Atnaujinkite slapukų nuostatas

Designing Software Architectures: A Practical Approach [Kietas viršelis]

4.13/5 (127 ratings by Goodreads)
  • Formatas: Hardback, 320 pages, aukštis x plotis x storis: 164x240x24 mm, weight: 584 g
  • Serija: SEI Series in Software Engineering
  • Išleidimo metai: 24-May-2016
  • Leidėjas: Addison Wesley
  • ISBN-10: 0134390784
  • ISBN-13: 9780134390789
Kitos knygos pagal šią temą:
  • Formatas: Hardback, 320 pages, aukštis x plotis x storis: 164x240x24 mm, weight: 584 g
  • Serija: SEI Series in Software Engineering
  • Išleidimo metai: 24-May-2016
  • Leidėjas: Addison Wesley
  • ISBN-10: 0134390784
  • ISBN-13: 9780134390789
Kitos knygos pagal šią temą:

Designing Software Architectures is the first step-by-step guide to making the crucial design decisions that can make or break your software architecture. SEI expert Rick Kazman and Dr. Humberto Cervantes provide comprehensive guidance for ensuring that your architectural design decisions are consistently rational and evidence-based.

 

Drawing on their own extensive experience, they demonstrate how to craft designs that are practical and effective, and support all phases of architectural development, from requirements to documentation. You'll learn how to successfully integrate the design process in an organizational context, including designing systems that will be built with agile methods.

 

The authors begin with a general review of software architecture concepts and the software architecture lifecycle. Next, they explain what architecture design really means, introduce key design concepts and principles, and walk through both conventional and alternative design processes. Building on this foundation, they introduce the new Attribute-Driven Design (ADD) 3.0 process, walk the reader through two extended ADD 3.0 case studies, and demonstrate how ADD 3.0 can lead to more successful designs.

 

You'll learn how to scale design and analysis up and down - for example, to design for pre-sales processes and lightweight architecture reviews. Kazman and Cervantes illuminate the relationships between analysis and design, introduce a set of reusable design primitives, and identify issues and solutions for new domains, including cloud, mobile, and big data.

 

Design is the core activity for software designers and architects, but for most practitioners, it's been a black art. This book offers the systematic guidance you need to consistently do it rationally, and do it right.

Preface xiii
Acknowledgments xvii
Chapter 1 Introduction 1(10)
1.1 Motivations
1(2)
1.2 Software Architecture
3(4)
1.2.1 The Importance of Software Architecture
3(1)
1.2.2 Life-Cycle Activities
4(3)
1.3 The Role of the Architect
7(1)
1.4 A Brief History of ADD
8(1)
1.5 Summary
9(1)
1.6 Further Reading
10(1)
Chapter 2 Architectural Design 11(32)
2.1 Design in General
11(2)
2.2 Design in Software Architecture
13(3)
2.2.1 Architectural Design
14(1)
2.2.2 Element Interaction Design
14(1)
2.2.3 Element Internals Design
15(1)
2.3 Why Is Architectural Design So Important?
16(1)
2.4 Architectural Drivers
17(11)
2.4.1 Design Purpose
18(1)
2.4.2 Quality Attributes
19(6)
2.4.3 Primary Functionality
25(1)
2.4.4 Architectural Concerns
26(1)
2.4.5 Constraints
27(1)
2.5 Design Concepts: The Building Blocks for Creating Structures
28(10)
2.5.1 Reference Architectures
29(1)
2.5.2 Architectural Design Patterns
29(3)
2.5.3 Deployment Patterns
32(1)
2.5.4 Tactics
33(2)
2.5.5 Externally Developed Components
35(3)
2.6 Architecture Design Decisions
38(2)
2.7 Summary
40(1)
2.8 Further Reading
41(2)
Chapter 3 The Architecture Design Process 43(32)
3.1 The Need for a Principled Method
43(1)
3.2 Attribute-Driven Design 3.0
44(5)
3.2.1 Step 1: Review Inputs
44(2)
3.2.2 Step 2: Establish the Iteration Goal by Selecting Drivers
46(1)
3.2.3 Step 3: Choose One or More Elements of the System to Refine
46(1)
3.2.4 Step 4: Choose One or More Design Concepts That Satisfy the Selected Drivers
47(1)
3.2.5 Step 5: Instantiate Architectural Elements, Allocate Responsibilities, and Define Interfaces
47(1)
3.2.6 Step 6: Sketch Views and Record Design Decisions
48(1)
3.2.7 Step 7: Perform Analysis of Current Design and Review Iteration Goal and Achievement of Design Purpose
48(1)
3.2.8 Iterate If Necessary
49(1)
3.3 Following a Design Roadmap According to System Type
49(4)
3.3.1 Design of Greenfield Systems for Mature Domains
50(2)
3.3.2 Design of Greenfield Systems for Novel Domains
52(1)
3.3.3 Design for an Existing System (Brownfield)
53(1)
3.4 Identifying and Selecting Design Concepts
53(5)
3.4.1 Identification of Design Concepts
54(1)
3.4.2 Selection of Design Concepts
55(3)
3.5 Producing Structures
58(3)
3.5.1 Instantiating Elements
59(1)
3.5.2 Associating Responsibilities and Identifying Properties
60(1)
3.5.3 Establishing Relationships Between the Elements
61(1)
3.6 Defining Interfaces
61(4)
3.6.1 External Interfaces
61(1)
3.6.2 Internal Interfaces
61(4)
3.7 Creating Preliminary Documentation During Design
65(4)
3.7.1 Recording Sketches of the Views
65(3)
3.7.2 Recording Design Decisions
68(1)
3.8 Tracking Design Progress
69(3)
3.8.1 Use of an Architectural Backlog
69(1)
3.8.2 Use of a Design Kanban Board
70(2)
3.9 Summary
72(1)
3.10 Further Reading
72(3)
Chapter 4 Case Study: FCAPS System 75(32)
4.1 Business Case
75(2)
4.2 System Requirements
77(3)
4.2.1 Use Case Model
77(1)
4.2.2 Quality Attribute Scenarios
78(1)
4.2.3 Constraints
79(1)
4.2.4 Architectural Concerns
80(1)
4.3 The Design Process
80(25)
4.3.1 ADD Step 1: Review Inputs
80(1)
4.3.2 Iteration 1: Establishing an Overall System Structure
81(8)
4.3.3 Iteration 2: Identifying Structures to Support Primary Functionality
89(12)
4.3.4 Iteration 3: Addressing Quality Attribute Scenario Driver (QA-3)
101(4)
4.4 Summary
105(1)
4.5 Further Reading
105(2)
Chapter 5 Case Study: Big Data System 107(38)
5.1 Business Case
107(1)
5.2 System Requirements
108(3)
5.2.1 Use Case Model
108(1)
5.2.2 Quality Attribute Scenarios
109(1)
5.2.3 Constraints
110(1)
5.2.4 Architectural Concerns
110(1)
5.3 The Design Process
111(32)
5.3.1 ADD Step 1: Review Inputs
111(1)
5.3.2 Iteration 1: Reference Architecture and Overall System Structure
112(8)
5.3.3 Iteration 2: Selection of Technologies
120(11)
5.3.4 Iteration 3: Refinement of the Data Stream Element
131(7)
5.3.5 Iteration 4: Refinement of the Serving Layer
138(5)
5.4 Summary
143(1)
5.5 Further Reading
144(1)
Chapter 6 Case Study: Banking System 145(16)
6.1 Business Case
145(4)
6.1.1 Use Case Model
147(1)
6.1.2 Quality Attribute Scenarios
148(1)
6.1.3 Constraints
148(1)
6.1.4 Architectural Concerns
148(1)
6.2 Existing Architectural Documentation
149(2)
6.2.1 Module View
149(1)
6.2.2 Allocation View
150(1)
6.3 The Design Process
151(7)
6.3.1 ADD Step 1: Review Inputs
152(1)
6.3.2 Iteration 1: Supporting the New Drivers
152(6)
6.4 Summary
158(1)
6.5 Further Reading
159(2)
Chapter 7 Other Design Methods 161(14)
7.1 A General Model of Software Architecture Design
161(3)
7.2 Architecture-Centric Design Method
164(1)
7.3 Architecture Activities in the Rational Unified Process
165(2)
7.4 The Process of Software Architecting
167(2)
7.5 A Technique for Architecture and Design
169(2)
7.6 Viewpoints and Perspectives Method
171(2)
7.7 Summary
173(1)
7.8 Further Reading
174(1)
Chapter 8 Analysis in the Design Process 175(18)
8.1 Analysis and Design
175(3)
8.2 Why Analyze?
178(1)
8.3 Analysis Techniques
179(1)
8.4 Tactics-Based Analysis
180(6)
8.5 Reflective Questions
186(1)
8.6 Scenario-Based Design Reviews
187(3)
8.7 Architecture Description Languages
190(1)
8.8 Summary
191(1)
8.9 Further Reading
192(1)
Chapter 9 The Architecture Design Process in the Organization 193(14)
9.1 Architecture Design and the Development Life Cycle
193(9)
9.1.1 Architecture Design During Pre-Sales
194(3)
9.1.2 Architecture Design During Development and Operation
197(5)
9.2 Organizational Aspects
202(2)
9.2.1 Designing as an Individual or as a Team
202(1)
9.2.2 Using a Design Concepts Catalog in Your Organization
203(1)
9.3 Summary
204(1)
9.4 Further Reading
204(3)
Chapter 10 Final Words 207(4)
10.1 On the Need for Methods
207(2)
10.2 Next Steps
209(1)
10.3 Further Reading
210(1)
Appendix A A Design Concepts Catalog 211(36)
A.1 Reference Architectures
211(10)
A.1.1 Web Applications
212(2)
A.1.2 Rich Client Applications
214(1)
A.1.3 Rich Internet Applications
215(3)
A.1.4 Mobile Applications
218(1)
A.1.5 Service Applications
218(3)
A.2 Deployment Patterns
221(3)
A.2.1 Nondistributed Deployment
221(1)
A.2.2 Distributed Deployment
222(1)
A.2.3 Performance Patterns: Load-Balanced Cluster
223(1)
A.3 Architectural Design Patterns
224(6)
A.3.1 Structural Patterns
224(2)
A.3.2 Interface Partitioning
226(2)
A.3.3 Concurrency
228(1)
A.3.4 Database Access
229(1)
A.4 Tactics
230(11)
A.4.1 Availability Tactics
230(2)
A.4.2 Interoperability Tactics
232(1)
A.4.3 Modifiability Tactics
233(2)
A.4.4 Performance Tactics
235(1)
A.4.5 Security Tactics
236(2)
A.4.6 Testability Tactics
238(2)
A.4.7 Usability Tactics
240(1)
A.5 Externally Developed Components
241(4)
A.5.1 Spring Framework
241(2)
A.5.2 Swing Framework
243(1)
A.5.3 Hibernate Framework
244(1)
A.5.4 Java Web Start Framework
245(1)
A.6 Summary
245(1)
A.7 Further Reading
246(1)
Appendix B Tactics-Based Questionnaires 247(22)
B.1 Using the Questionnaires
247(1)
B.2 Availability
248(4)
B.3 Interoperability
252(1)
B.4 Modifiability
253(2)
B.5 Performance
255(2)
B.6 Security
257(3)
B.7 Testability
260(1)
B.8 Usability
261(2)
B.9 DevOps
263(4)
B.10 Further Reading
267(2)
Glossary 269(6)
About the Authors 275(2)
Index 277
Humberto Cervantes is a professor at Universidad Autónoma Metropolitana Iztapalapa in Mexico City. His primary research interest is software architecture and, more specifically, the development of methods and tools to aid in the design process. He is active in promoting the adoption of these methods and tools in the software industry. Since 2006, Cervantes has been a consultant for software development companies in topics related to software architecture. He has authored numerous research papers and popularization articles, and has also coauthored one of the few books in Spanish on the topic of software architecture. Cervantes received a masters degree and a Ph.D. from Université Joseph Fourier in Grenoble, France. He holds the Software Architecture Professional and ATAM Evaluator certificates from the SEI.

 

Rick Kazman is a professor at the University of Hawaii and a principal researcher at the Software Engineering Institute of Carnegie Mellon University. His primary research interests are software architecture, design and analysis tools, software visualization, and software engineering economics. Kazman has created several highly influential methods and tools for architecture analysis, including the SAAM (Software Architecture Analysis Method), the ATAM (Architecture Tradeoff Analysis Method), the CBAM (Cost-Benefit Analysis Method), and the Dali and Titan tools. He is the author of more than one hundred fifty peer-reviewed papers, and is coauthor of several books, including Software Architecture in Practice, Third Edition (Addison-Wesley, 2013), Evaluating Software Architectures (Addison-Wesley, 2002), and Ultra-Large-Scale Systems. Kazman received a B.A. (English/music) and M.Math (computer science) from the University of Waterloo, an M.A. (English) from York University, and a Ph.D. (computational linguistics) from Carnegie Mellon University.