作者圍繞著軟件構(gòu)架影響周期的概念對(duì)本書前一版進(jìn)行了重構(gòu)。每個(gè)周期都表明了軟件構(gòu)架是如何產(chǎn)生影響的,同時(shí)它又受哪些因素的影響,軟件構(gòu)架在特定的背景下發(fā)揮著關(guān)鍵性的作用。這些背景包括技術(shù)環(huán)境、項(xiàng)目的生命周期、組織的業(yè)務(wù)概況和架構(gòu)師的專業(yè)實(shí)踐。作者還進(jìn)一步延展了質(zhì)量屬性,仍然以構(gòu)架理念為中心(用單獨(dú)一章內(nèi)容來專門介紹每個(gè)屬性),拓寬了軟件構(gòu)架模式。如果要參與或者負(fù)責(zé)大型軟件系統(tǒng)的設(shè)計(jì)、開發(fā)和管理,你會(huì)發(fā)現(xiàn)這本書是很有價(jià)值的參考資源,可以幫助你緊跟技術(shù)潮流。本書特色主題l 軟件構(gòu)架的背景:技術(shù)角度、項(xiàng)目角度、業(yè)務(wù)角度和職業(yè)角度l 軟件構(gòu)架的競(jìng)爭(zhēng)力:對(duì)于個(gè)人和組織的意義l 業(yè)務(wù)目標(biāo)的依據(jù)及其如何影響軟件構(gòu)架l 軟件構(gòu)架層面的重要需求及其確定方式l 軟件生命周期中的構(gòu)架,包括以設(shè)計(jì)思維為前提的生成-測(cè)試;實(shí)現(xiàn)期間的軟件構(gòu)架一致性;構(gòu)架與測(cè)試;構(gòu)架與敏捷開發(fā)l 構(gòu)架與當(dāng)前技術(shù)潮流,比如云計(jì)算,社交網(wǎng)絡(luò)和終端用戶設(shè)備作者簡(jiǎn)介l Len Bass,澳大利亞國家信息通信技術(shù)研究院(NICTA)的高級(jí)主任研究員。在此之前,他在卡內(nèi)基·梅隆大學(xué)軟件工程研究所(SEI)工作了二十五年。l Paul Clements,BigLever Software公司的副總裁,其職責(zé)是幫助客戶獲得成功。他在SEI的時(shí)候,主持的項(xiàng)目主要涉及軟件產(chǎn)品線工程和軟件構(gòu)架編檔與分析。l Rick Kazman,夏威夷大學(xué)的教授和SEI的訪問科學(xué)家。樣章試讀:前 言
本書第2版出版以來,彈指之間已過十年。在此期間,軟件構(gòu)架領(lǐng)域的關(guān)注點(diǎn)在拓寬和延展,從主要面向內(nèi)部——人們是如何對(duì)軟件進(jìn)行設(shè)計(jì)、評(píng)估和編檔的——到關(guān)注影響軟件的外部因素——更深入地理解這些因素對(duì)軟件構(gòu)架的影響,更透徹地理解架構(gòu)對(duì)軟件生命周期、組織和管理的影響。過去的十年中,我們也看到軟件系統(tǒng)的類型也發(fā)生了巨大的變化。十年前,大數(shù)據(jù)、社交媒體和云計(jì)算都還處于萌芽期,但現(xiàn)在,成熟已經(jīng)足以形容它們的發(fā)展,而應(yīng)該說它們已經(jīng)相當(dāng)具有影響力了。我們聽取了讀者對(duì)前兩版的一些批評(píng)建議,在新版中包含了更多與模式相關(guān)的素材,重新組織了與質(zhì)量屬性相關(guān)的素材,并單獨(dú)用一章的篇幅來介紹作為質(zhì)量屬性之一的互操作性。我們還向讀者提供了如何為自己喜歡的質(zhì)量屬性生成場(chǎng)景和策略。為了能包含如此豐富的新鮮素材,我們不得不做出一個(gè)艱難的選擇。具體說來,本書的這一版再也不像前兩個(gè)版本一樣包含擴(kuò)充性的案例學(xué)習(xí)。這個(gè)決定也體現(xiàn)了軟件構(gòu)架這一領(lǐng)域已走向成熟,從某種意義上來講,為軟件構(gòu)架提供案例學(xué)習(xí)已經(jīng)不如十年前那樣流行,而且對(duì)讀者而言,這樣的案例學(xué)習(xí)對(duì)幫助他們認(rèn)識(shí)到軟件構(gòu)架的重要性已經(jīng)沒有多大必要了。然而,前兩個(gè)版本的案例學(xué)習(xí)還是有的,可以從本書配套網(wǎng)站獲得,網(wǎng)址為www.informit.com/title/9780321815736。此外,在這個(gè)配套網(wǎng)站上,我們還提供了幻燈片以便老師們?cè)诮虒W(xué)中使用這些案例。在第3版中,我們對(duì)所涉及的主題進(jìn)行了全面和徹底的修訂。具體說來,我們意識(shí)到我們所呈現(xiàn)的方法——對(duì)于構(gòu)架設(shè)計(jì)、分析和文檔——只是通過一種方式來說明如何達(dá)成特定的目標(biāo),但其他還有好多種方式。考慮到這一點(diǎn),我們從底層的理論出發(fā),單獨(dú)詳細(xì)介紹書中提及的每一種方法。在第3版的新增主題中,包括以構(gòu)架為中心的項(xiàng)目管理;構(gòu)架能力;需求建模與分析;敏捷方法;實(shí)現(xiàn)與測(cè)試;云計(jì)算和技術(shù)前沿。與前面兩個(gè)版本一樣,我們可以擔(dān)保,書中介紹的主題都經(jīng)過讀書小組或者課堂的充分討論,最后,我們?cè)诿空伦詈蠖继峁┝艘恍┯懻擃}。這些討論題大部分是開放式的,沒有任何答案是絕對(duì)正確或者絕對(duì)錯(cuò)誤的,所以,作為讀者,重點(diǎn)在于如何判斷你的答案,而不是只管回答完問題。
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讀者指南
本書分為五個(gè)部分。第一部分介紹軟件構(gòu)架和各種不同的上下文視角,具體如下所示。l 技術(shù)角度。軟件構(gòu)架在一個(gè)系統(tǒng)或子系統(tǒng)中所扮演扮演的是什么技術(shù)角色?l 項(xiàng)目角度。軟件構(gòu)架是如何與軟件開發(fā)生命周期中的其他階段發(fā)生關(guān)系的?l 業(yè)務(wù)角度。軟件構(gòu)架的出現(xiàn)是如何影響組織的商業(yè)環(huán)境的?l 職業(yè)角度。軟件架構(gòu)師在一個(gè)組織或一個(gè)開發(fā)項(xiàng)目中扮演的是什么角色?第二部分聚焦于技術(shù)背景。這部分描述了決策的制定過程。決策的依據(jù)是一個(gè)系統(tǒng)的預(yù)期質(zhì)量屬性,第5章~第11章描述了七大不同的質(zhì)量屬性以及達(dá)成這些質(zhì)量屬性所需要的技術(shù)。這七大屬性分別是可得性(availability)、互操作性( interoperability)、可維護(hù)性(maintainability)、性能(performance)、安全(security)、可測(cè)試性(testability)和易用性(usability),第12章描述如何在此七大屬性上再添加額外的質(zhì)量屬性,第13章討論模式和策略,第14章討論各種類型的建模與分析方法。第三部分專門探討軟件構(gòu)架與軟件生命周期的其他部分是如何發(fā)生關(guān)系的。特別要說明軟件構(gòu)架如何應(yīng)用與敏捷項(xiàng)目。我們單獨(dú)討論了軟件生命周期的其他方面:需求;設(shè)計(jì);實(shí)現(xiàn)和測(cè)試;恢復(fù)與一致性;評(píng)估。第四部分分別從經(jīng)濟(jì)角度、組織角度和類似軟件系統(tǒng)系列的構(gòu)造這三大角度來闡述軟件架構(gòu)。第五部分要討論幾個(gè)重要的新技術(shù),闡述軟件構(gòu)架是如何與這些技術(shù)關(guān)聯(lián)的。致 謝
我們的這個(gè)新版本有很多了不起的評(píng)審人員,在他們的幫助下,這本書得以進(jìn)一步完善。他們是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.此外,本書新版本還得到了以下人員的參與和貢獻(xiàn),他們是Liming Zhu,Hong-Mei Chen,Jungwoo Ryoo,Phil Laplante,James Scott,Grace Lewis和Nick Rozanski,在他們的幫助下,我們這本書變得更符合大眾的口味(相對(duì)于我們?nèi)齻(gè)作者所寫的東西而言)。第12章中,“構(gòu)建效率”這個(gè)議題來自Raytheon的Rolf Siegers和John McDonald。John Klein和Eltjo Poort分別為可測(cè)試性貢獻(xiàn)了兩個(gè)策略:抽象系統(tǒng)時(shí)鐘(abstract system clock)和沙盒模式(sandbox mode)。第3章的項(xiàng)目干系人清單來源于《軟件構(gòu)架編檔(第2版)》。第28章中的一些素材,靈感來源于Anthony Lattanze在2011年發(fā)表的一次演講,演講主題為“組織設(shè)計(jì)思維”(Organizational Design Thinking)。Joe Batman幫助我們創(chuàng)立了第4章所描述的七大設(shè)計(jì)決策類別。此外,在第18章中,圍繞著安全視角、溝通視角和非常規(guī)視角來展開的描述,都基于Joe在進(jìn)行真實(shí)系統(tǒng)體系結(jié)構(gòu)之文檔規(guī)劃時(shí)所寫的一些素材。與可修改性策略相關(guān)的大部分新素材都基于Felix Bachmann和Rod Nord的工作成果。James Ivers在安全策略方面為我們提供了幫助。自本書第2版出版以后,Paul Clements和Len Bass都有了新的職位,我們感謝他們各自的新的管理層(對(duì)Paul而言,是BigLever Software;對(duì)Len而言,是NICTA)無怨無悔地支持我們完成新版本。我們還要感謝我們?cè)谲浖こ萄芯克?/span>(SEI)的(前)同事,感謝他們積極為新版本貢獻(xiàn)的寫作構(gòu)想。最后,我們一如既往地感謝我們的編輯,Addison-Wesley的Peter Gordon,感謝他們?cè)趯懽骱椭谱鬟^程中所提供的指導(dǎo)和支持。