作者围绕着软件构架影响周期的概念对本书前一版进行了重构。每个周期都表明了软件构架是如何产生影响的,同时它又受哪些因素的影响,软件构架在特定的背景下发挥着关键性的作用。这些背景包括技术环境、项目的生命周期、组织的业务概况和架构师的专业实践。作者还进一步延展了质量属性,仍然以构架理念为中心(用单独一章内容来专门介绍每个属性),拓宽了软件构架模式。如果要参与或者负责大型软件系统的设计、开发和管理,你会发现这本书是很有价值的参考资源,可以帮助你紧跟技术潮流。本书特色主题l 软件构架的背景:技术角度、项目角度、业务角度和职业角度l 软件构架的竞争力:对于个人和组织的意义l 业务目标的依据及其如何影响软件构架l 软件构架层面的重要需求及其确定方式l 软件生命周期中的构架,包括以设计思维为前提的生成-测试;实现期间的软件构架一致性;构架与测试;构架与敏捷开发l 构架与当前技术潮流,比如云计算,社交网络和终端用户设备作者简介l Len Bass,澳大利亚国家信息通信技术研究院(NICTA)的高级主任研究员。在此之前,他在卡内基·梅隆大学软件工程研究所(SEI)工作了二十五年。l Paul Clements,BigLever Software公司的副总裁,其职责是帮助客户获得成功。他在SEI的时候,主持的项目主要涉及软件产品线工程和软件构架编档与分析。l Rick Kazman,夏威夷大学的教授和SEI的访问科学家。样章试读:前 言
本书第2版出版以来,弹指之间已过十年。在此期间,软件构架领域的关注点在拓宽和延展,从主要面向内部——人们是如何对软件进行设计、评估和编档的——到关注影响软件的外部因素——更深入地理解这些因素对软件构架的影响,更透彻地理解架构对软件生命周期、组织和管理的影响。过去的十年中,我们也看到软件系统的类型也发生了巨大的变化。十年前,大数据、社交媒体和云计算都还处于萌芽期,但现在,成熟已经足以形容它们的发展,而应该说它们已经相当具有影响力了。我们听取了读者对前两版的一些批评建议,在新版中包含了更多与模式相关的素材,重新组织了与质量属性相关的素材,并单独用一章的篇幅来介绍作为质量属性之一的互操作性。我们还向读者提供了如何为自己喜欢的质量属性生成场景和策略。为了能包含如此丰富的新鲜素材,我们不得不做出一个艰难的选择。具体说来,本书的这一版再也不像前两个版本一样包含扩充性的案例学习。这个决定也体现了软件构架这一领域已走向成熟,从某种意义上来讲,为软件构架提供案例学习已经不如十年前那样流行,而且对读者而言,这样的案例学习对帮助他们认识到软件构架的重要性已经没有多大必要了。然而,前两个版本的案例学习还是有的,可以从本书配套网站获得,网址为www.informit.com/title/9780321815736。此外,在这个配套网站上,我们还提供了幻灯片以便老师们在教学中使用这些案例。在第3版中,我们对所涉及的主题进行了全面和彻底的修订。具体说来,我们意识到我们所呈现的方法——对于构架设计、分析和文档——只是通过一种方式来说明如何达成特定的目标,但其他还有好多种方式。考虑到这一点,我们从底层的理论出发,单独详细介绍书中提及的每一种方法。在第3版的新增主题中,包括以构架为中心的项目管理;构架能力;需求建模与分析;敏捷方法;实现与测试;云计算和技术前沿。与前面两个版本一样,我们可以担保,书中介绍的主题都经过读书小组或者课堂的充分讨论,最后,我们在每章最后都提供了一些讨论题。这些讨论题大部分是开放式的,没有任何答案是绝对正确或者绝对错误的,所以,作为读者,重点在于如何判断你的答案,而不是只管回答完问题。
Table of ContentsPreface xvReader’s Guide xviiAcknowledgments xixPart One: Introduction 1Chapter 1: What Is Software Architecture? 31.1 What Software Architecture Is and What It Isn’t 41.2 Architectural Structures and Views 91.3 Architectural Patterns 181.4 What Makes a “Good” Architecture? 191.5 Summary 211.6 For Further Reading 221.7 Discussion Questions 23Chapter 2: Why Is Software Architecture Important? 252.1 Inhibiting or Enabling a System’s Quality Attributes 262.2 Reasoning About and Managing Change 272.3 Predicting System Qualities 282.4 Enhancing Communication among Stakeholders 292.5 Carrying Early Design Decisions 312.6 Defining Constraints on an Implementation 322.7 Influencing the Organizational Structure 332.8 Enabling Evolutionary Prototyping 332.9 Improving Cost and Schedule Estimates 342.10 Supplying a Transferable, Reusable Model 352.11 Allowing Incorporation of Independently Developed Components 352.12 Restricting the Vocabulary of Design Alternatives 362.13 Providing a Basis for Training 372.14 Summary 372.15 For Further Reading 382.16 Discussion Questions 38Chapter 3: The Many Contexts of Software Architecture 393.1 Architecture in a Technical Context 403.2 Architecture in a Project Life-Cycle Context 443.3 Architecture in a Business Context 493.4 Architecture in a Professional Context 513.5 Stakeholders 523.6 How Is Architecture Influenced? 563.7 What Do Architectures Influence? 573.8 Summary 593.9 For Further Reading 593.10 Discussion Questions 60Part Two: Quality Attributes 61Chapter 4: Understanding Quality Attributes 634.1 Architecture and Requirements 644.2 Functionality 654.3 Quality Attribute Considerations 654.4 Specifying Quality Attribute Requirements 684.5 Achieving Quality Attributes through Tactics 704.6 Guiding Quality Design Decisions 724.7 Summary 764.8 For Further Reading 774.9 Discussion Questions 77Chapter 5: Availability 795.1 Availability General Scenario 855.2 Tactics for Availability 875.3 A Design Checklist for Availability 965.4 Summary 985.5 For Further Reading 995.6 Discussion Questions 100Chapter 6: Interoperability 1036.1 Interoperability General Scenario 1076.2 Tactics for Interoperability 1106.3 A Design Checklist for Interoperability 1146.4 Summary 1156.5 For Further Reading 1166.6 Discussion Questions 116Chapter 7: Modifiability 1177.1 Modifiability General Scenario 1197.2 Tactics for Modifiability 1217.3 A Design Checklist for Modifiability 1257.4 Summary 1287.5 For Further Reading 1287.6 Discussion Questions 128Chapter 8: Performance 1318.1 Performance General Scenario 1328.2 Tactics for Performance 1358.3 A Design Checklist for Performance 1428.4 Summary 1458.5 For Further Reading 1458.6 Discussion Questions 145Chapter 9: Security 1479.1 Security General Scenario 1489.2 Tactics for Security 1509.3 A Design Checklist for Security 1549.4 Summary 1569.5 For Further Reading 1579.6 Discussion Questions 158Chapter 10: Testability 15910.1 Testability General Scenario 16210.2 Tactics for Testability 16410.3 A Design Checklist for Testability 16910.4 Summary 17210.5 For Further Reading 17210.6 Discussion Questions 173Chapter 11: Usability 17511.1 Usability General Scenario 17611.2 Tactics for Usability 17711.3 A Design Checklist for Usability 18111.4 Summary 18311.5 For Further Reading 18311.6 Discussion Questions 183Chapter 12: Other Quality Attributes 18512.1 Other Important Quality Attributes 18512.2 Other Categories of Quality Attributes 18912.3 Software Quality Attributes and System Quality Attributes 19012.4 Using Standard Lists of Quality Attributes–or Not 19312.5 Dealing with “X-ability”: Bringing a New Quality Attribute into the Fold 19612.6 For Further Reading 20012.7 Discussion Questions 201Chapter 13: Architectural Tactics and Patterns 20313.1 Architectural Patterns 20413.2 Overview of the Patterns Catalog 20513.3 Relationships between Tactics and Patterns 23813.4 Using Tactics Together 24213.5 Summary 24713.6 For Further Reading 24813.7 Discussion Questions 249Chapter 14: Quality Attribute Modeling and Analysis 25114.1 Modeling Architectures to Enable Quality Attribute Analysis 25214.2 Quality Attribute Checklists 26014.3 Thought Experiments and Back-of-the-Envelope Analysis 26214.4 Experiments, Simulations, and Prototypes 26414.5 Analysis at Different Stages of the Life Cycle 26514.6 Summary 26614.7 For Further Reading 26714.8 Discussion Questions 269Part Three: Architecture in the Life Cycle 271Chapter 15: Architecture in Agile Projects 27515.1 How Much Architecture? 27715.2 Agility and Architecture Methods 28115.3 A Brief Example of Agile Architecting 28315.4 Guidelines for the Agile Architect 28615.5 Summary 28715.6 For Further Reading 28815.7 Discussion Questions 289Chapter 16: Architecture and Requirements 29116.1 Gathering ASRs from Requirements Documents 29216.2 Gathering ASRs by Interviewing Stakeholders 29416.3 Gathering ASRs by Understanding the Business Goals 29616.4 Capturing ASRs in a Utility Tree 30416.5 Tying the Methods Together 30816.6 Summary 30816.7 For Further Reading 30916.8 Discussion Questions 309Chapter 17: Designing an Architecture 31117.1 Design Strategy 31117.2 The Attribute-Driven Design Method 31617.3 The Steps of ADD 31817.4 Summary 32517.5 For Further Reading 32517.6 Discussion Questions 326Chapter 18: Documenting Software Architectures 32718.1 Uses and Audiences for Architecture Documentation 32818.2 Notations for Architecture Documentation 32918.3 Views 33118.4 Choosing the Views 34118.5 Combining Views 34318.6 Building the Documentation Package 34518.7 Documenting Behavior 35118.8 Architecture Documentation and Quality Attributes 35418.9 Documenting Architectures That Change Faster Than You Can Document Them 35518.10 Documenting Architecture in an Agile Development Project 35618.11 Summary 35918.12 For Further Reading 36018.13 Discussion Questions 360Chapter 19: Architecture, Implementation, and Testing 36319.1 Architecture and Implementation 36319.2 Architecture and Testing 37019.3 Summary 37619.4 For Further Reading 37619.5 Discussion Questions 377Chapter 20: Architecture Reconstruction and Conformance 37920.1 Architecture Reconstruction Process 38120.2 Raw View Extraction 38220.3 Database Construction 38620.4 View Fusion 38820.5 Architecture Analysis: Finding Violations 38920.6 Guidelines 39220.7 Summary 39320.8 For Further Reading 39420.9 Discussion Questions 395Chapter 21: Architecture Evaluation 39721.1 Evaluation Factors 39721.2 The Architecture Tradeoff Analysis Method 40021.3 Lightweight Architecture Evaluation 41521.4 Summary 41721.5 For Further Reading 41721.6 Discussion Questions 418Chapter 22: Management and Governance 41922.1 Planning 42022.2 Organizing 42222.3 Implementing 42722.4 Measuring 42922.5 Governance 43022.6 Summary 43222.7 For Further Reading 43222.8 Discussion Questions 433Part Four: Architecture and Business 435Chapter 23: Economic Analysis of Architectures 43723.1 Decision-Making Context 43823.2 The Basis for the Economic Analyses 43923.3 Putting Theory into Practice: The CBAM 44223.4 Case Study: The NASA ECS Project 45023.5 Summary 45723.6 For Further Reading 45823.7 Discussion Questions 458Chapter 24: Architecture Competence 45924.1 Competence of Individuals: Duties, Skills, and Knowledge of Architects 46024.2 Competence of a Software Architecture Organization 46724.3 Summary 47524.4 For Further Reading 47524.5 Discussion Questions 477Chapter 25: Architecture and Software Product Lines 47925.1 An Example of Product Line Variability 48225.2 What Makes a Software Product Line Work? 48325.3 Product Line Scope 48625.4 The Quality Attribute of Variability 48825.5 The Role of a Product Line Architecture 48825.6 Variation Mechanisms 49025.7 Evaluating a Product Line Architecture 49325.8 Key Software Product Line Issues 49425.9 Summary 49725.10 For Further Reading 49825.11 Discussion Questions 498Part Five: The Brave New World 501Chapter 26: Architecture in the Cloud 50326.1 Basic Cloud Definitions 50426.2 Service Models and Deployment Options 50526.3 Economic Justification 50626.4 Base Mechanisms 50926.5 Sample Technologies 51426.6 Architecting in a Cloud Environment 52026.7 Summary 52426.8 For Further Reading 52426.9 Discussion Questions 525Chapter 27: Architectures for the Edge 52727.1 The Ecosystem of Edge-Dominant Systems 52827.2 Changes to the Software Development Life Cycle 53027.3 Implications for Architecture 53127.4 Implications of the Metropolis Model 53327.5 Summary 53727.6 For Further Reading 53827.7 Discussion Questions 538Chapter 28: Epilogue 541References 547About the Authors 561Index 563读者指南
本书分为五个部分。第一部分介绍软件构架和各种不同的上下文视角,具体如下所示。l 技术角度。软件构架在一个系统或子系统中所扮演扮演的是什么技术角色?l 项目角度。软件构架是如何与软件开发生命周期中的其他阶段发生关系的?l 业务角度。软件构架的出现是如何影响组织的商业环境的?l 职业角度。软件架构师在一个组织或一个开发项目中扮演的是什么角色?第二部分聚焦于技术背景。这部分描述了决策的制定过程。决策的依据是一个系统的预期质量属性,第5章~第11章描述了七大不同的质量属性以及达成这些质量属性所需要的技术。这七大属性分别是可得性(availability)、互操作性( interoperability)、可维护性(maintainability)、性能(performance)、安全(security)、可测试性(testability)和易用性(usability),第12章描述如何在此七大属性上再添加额外的质量属性,第13章讨论模式和策略,第14章讨论各种类型的建模与分析方法。第三部分专门探讨软件构架与软件生命周期的其他部分是如何发生关系的。特别要说明软件构架如何应用与敏捷项目。我们单独讨论了软件生命周期的其他方面:需求;设计;实现和测试;恢复与一致性;评估。第四部分分别从经济角度、组织角度和类似软件系统系列的构造这三大角度来阐述软件架构。第五部分要讨论几个重要的新技术,阐述软件构架是如何与这些技术关联的。致 谢
我们的这个新版本有很多了不起的评审人员,在他们的帮助下,这本书得以进一步完善。他们是Muhammad Ali Babar,Felix Bachmann,Joe Batman,Phil Bianco,Jeromy Carriere,Roger Champagne,Steve Chenoweth,Viktor Clerc,Andres Diaz Pace,George Fairbanks,Rik Farenhorst,Ian Gorton,Greg Hartman,Rich Hilliard,James Ivers,John Klein,PhilippeKruchten,Phil Laplante,George Leih,Grace Lewis,John McGregor,Tommi Mikkonen,Linda Northrop,Ipek Ozkaya,Eltjo Poort,Eelco Rommes,Nick Rozanski,Jungwoo Ryoo,James Scott,Antony Tang,Arjen Uittenbogaard,Hans van Vliet,Hiroshi Wada,Rob Wojcik,Eoin Woods,and Liming Zhu.此外,本书新版本还得到了以下人员的参与和贡献,他们是Liming Zhu,Hong-Mei Chen,Jungwoo Ryoo,Phil Laplante,James Scott,Grace Lewis和Nick Rozanski,在他们的帮助下,我们这本书变得更符合大众的口味(相对于我们三个作者所写的东西而言)。第12章中,“构建效率”这个议题来自Raytheon的Rolf Siegers和John McDonald。John Klein和Eltjo Poort分别为可测试性贡献了两个策略:抽象系统时钟(abstract system clock)和沙盒模式(sandbox mode)。第3章的项目干系人清单来源于《软件构架编档(第2版)》。第28章中的一些素材,灵感来源于Anthony Lattanze在2011年发表的一次演讲,演讲主题为“组织设计思维”(Organizational Design Thinking)。Joe Batman帮助我们创立了第4章所描述的七大设计决策类别。此外,在第18章中,围绕着安全视角、沟通视角和非常规视角来展开的描述,都基于Joe在进行真实系统体系结构之文档规划时所写的一些素材。与可修改性策略相关的大部分新素材都基于Felix Bachmann和Rod Nord的工作成果。James Ivers在安全策略方面为我们提供了帮助。自本书第2版出版以后,Paul Clements和Len Bass都有了新的职位,我们感谢他们各自的新的管理层(对Paul而言,是BigLever Software;对Len而言,是NICTA)无怨无悔地支持我们完成新版本。我们还要感谢我们在软件工程研究所(SEI)的(前)同事,感谢他们积极为新版本贡献的写作构想。最后,我们一如既往地感谢我们的编辑,Addison-Wesley的Peter Gordon,感谢他们在写作和制作过程中所提供的指导和支持。