Just Enough Software Architecture: A Risk-Driven Approach
โ Scribed by George H. Fairbanks
- Publisher
- Marshall & Brainerd
- Year
- 2010
- Tongue
- English
- Leaves
- 378
- Edition
- 1
- Category
- Library
No coin nor oath required. For personal study only.
โฆ Synopsis
This is a practical guide for software developers, and different than other software architecture books. Here's why: It teaches risk-driven architecting. There is no need for meticulous designs when risks are small, nor any excuse for sloppy designs when risks threaten your success. This book describes a way to do just enough architecture. It avoids the one-size-fits-all process tar pit with advice on how to tune your design effort based on the risks you face. It democratizes architecture. This book seeks to make architecture relevant to all software developers. Developers need to understand how to use constraints as guiderails that ensure desired outcomes, and how seemingly small changes can affect a system's properties. It cultivates declarative knowledge. There is a difference between being able to hit a ball and knowing why you are able to hit it, what psychologists refer to as procedural knowledge versus declarative knowledge. This book will make you more aware of what you have been doing and provide names for the concepts. It emphasizes the engineering. This book focuses on the technical parts of software development and what developers do to ensure the system works not job titles or processes. It shows you how to build models and analyze architectures so that you can make principled design tradeoffs. It describes the techniques software designers use to reason about medium to large sized problems and points out where you can learn specialized techniques in more detail. It provides practical advice. Software design decisions influence the architecture and vice versa. The approach in this book embraces drill-down/pop-up behavior by describing models that have various levels of abstraction, from architecture to data structure design.
โฆ Table of Contents
Foreword......Page 7
Preface......Page 9
Contents......Page 13
Introduction......Page 19
Partitioning, knowledge, and abstractions......Page 20
Three examples of software architecture......Page 21
Reflections......Page 23
Perspective shift......Page 24
Architects architecting architectures......Page 25
Risk-driven software architecture......Page 26
Architecture for agile developers......Page 27
About this book......Page 28
Risk-Driven Software Architecture......Page 31
Software Architecture......Page 33
What is software architecture?......Page 34
Why is software architecture important?......Page 36
When is architecture important?......Page 40
Presumptive architectures......Page 41
How should software architecture be used?......Page 42
Architecture-indifferent design......Page 43
Architecture-focused design......Page 44
Architecture hoisting......Page 45
Architecture in large organizations......Page 48
Conclusion......Page 49
Further reading......Page 50
Risk-Driven Model......Page 53
What is the risk-driven model?......Page 55
Are you risk-driven now?......Page 56
Risks......Page 57
Techniques......Page 60
Guidance on choosing techniques......Page 62
When to stop......Page 65
Planned and evolutionary design......Page 66
Software development process......Page 69
Understanding process variations......Page 71
The risk-driven model and software processes......Page 73
Application to an agile processes......Page 74
Alternatives to the risk-driven model......Page 76
Conclusion......Page 78
Further reading......Page 79
Example: Home Media Player......Page 83
Team communication......Page 85
Integration of COTS components......Page 93
Metadata consistency......Page 99
Conclusion......Page 104
Focus on risks......Page 107
Understand your architecture......Page 108
Distribute architecture skills......Page 109
Make rational architecture choices......Page 110
Avoid Big Design Up Front......Page 111
Remaining challenges......Page 113
Features and risk: a story......Page 115
Architecture Modeling......Page 119
Engineers Use Models......Page 121
Scale and complexity require abstraction......Page 122
Reasoning about system qualities......Page 123
Models elide details......Page 124
Models can amplify reasoning......Page 125
Conclusion......Page 126
Further reading......Page 127
Conceptual Model of Software Architecture......Page 129
Canonical model structure......Page 132
Domain, design, and code models......Page 133
Designation and refinement relationships......Page 134
Views of a master model......Page 136
Business modeling......Page 139
Use of UML......Page 140
Further reading......Page 141
The Domain Model......Page 145
How the domain relates to architecture......Page 146
Information model......Page 149
Navigation and invariants......Page 151
Snapshots......Page 152
Functionality scenarios......Page 153
Conclusion......Page 154
Further reading......Page 155
The Design Model......Page 157
Design model......Page 158
Internals model......Page 159
Quality attributes......Page 160
Walkthrough of Yinzer design......Page 161
Viewtypes......Page 175
Dynamic architecture models......Page 179
Architecture description languages......Page 180
Conclusion......Page 181
Further reading......Page 182
Model-code gap......Page 185
Managing consistency......Page 189
Architecturally-evident coding style......Page 192
Expressing design intent in code......Page 193
Model-in-code principle......Page 195
What to express......Page 196
Patterns for expressing design intent in code......Page 198
Walkthrough of an email processing system......Page 205
Conclusion......Page 211
Story at many levels......Page 213
Hierarchy and partitioning......Page 215
Decomposition strategies......Page 217
Effective encapsulation......Page 221
Building an encapsulated interface......Page 224
Further reading......Page 228
Model Elements......Page 231
Allocation elements......Page 232
Components......Page 233
Component assemblies......Page 237
Connectors......Page 241
Design decisions......Page 251
Functionality scenarios......Page 252
Modules......Page 257
Ports......Page 259
Quality attributes......Page 264
Quality attribute scenarios......Page 267
Responsibilities......Page 269
Tradeoffs......Page 270
Conclusion......Page 271
Model Relationships......Page 273
Projection (view) relationship......Page 274
Classification relationship......Page 279
Generalization relationship......Page 280
Designation relationship......Page 281
Refinement relationship......Page 282
Binding relationship......Page 286
Using the relationships......Page 287
Conclusion......Page 288
Further reading......Page 289
Architectural Styles......Page 291
Advantages......Page 292
Platonic vs. embodied styles......Page 293
Constraints and architecture-focused design......Page 294
Layered style......Page 295
Big ball of mud style......Page 298
Pipe-and-filter style......Page 299
Batch-sequential style......Page 301
Model-centered style......Page 303
Publish-subscribe style......Page 304
Client-server style & N-tier......Page 306
Peer-to-peer style......Page 308
Map-reduce style......Page 309
Mirrored, rack, and farm styles......Page 311
Conclusion......Page 312
Further reading......Page 313
Desirable model traits......Page 315
Working with views......Page 321
Improving view quality......Page 324
Improving diagram quality......Page 328
Analyzing architecture models......Page 330
Architectural mismatch......Page 336
Choose your abstraction level......Page 337
Modeling existing systems......Page 338
Conclusion......Page 340
Further reading......Page 341
Conclusion......Page 343
Challenges......Page 344
Focus on quality attributes......Page 348
Solve problems, not just model them......Page 349
Use constraints as guide rails......Page 350
Use standard architectural abstractions......Page 351
Glossary......Page 353
Bibliography......Page 365
Index......Page 373
๐ SIMILAR VOLUMES
This book teaches risk-driven architecting and describes a way to do just enough architecture. It avoids the one-size-fits all process tarp pit with advice on how to tune your design effort based on the risks you face. This book seeks to make architecture relevant to all software developers. Develop
<p><i>Software Engineering: Architecture-driven Software Development</i> is the first comprehensive guide to the underlying skills embodied in the IEEE's Software Engineering Body of Knowledge (SWEBOK) standard. Standards expert Richard Schmidt explains the traditional software engineering practices
Section 1. Software Engineering Foundations -- Introduction to Software Engineering -- Generic Software Development Framework -- The Software Architecture -- Coping with Project Complexity -- Integrated Product and Process Development -- Section 2. Specifying Software Requirements -- Understanding S
<p><i>Economics-driven Software Architecture</i> presents a guide for engineers and architects who need to understand the economic impact of architecture design decisions: the long term and strategic viability, cost-effectiveness, and sustainability of applications and systems. Economics-driven soft