索引 / 001 ZH-TW
Software Architecture in Practice(軟體架構實務) cover

電腦科學

電腦科學

Software Architecture in Practice(軟體架構實務)

Len Bass; Paul Clements; Rick Kazman

英文原名: Software Architecture in Practice

一本由軟體工程研究所(SEI)相關研究者撰寫、系統性論述軟體架構的專書。書中說明架構決策如何決定可用性、效能、安全性與可修改性等品質屬性,並介紹在實際專案中設計、記錄與評估架構所需的戰術、模式與方法。

需要的基礎: 修過軟體工程課程,並有開發多元件軟體的實務經驗,最好是團隊開發。

難度等級
高級
學術層次
高級
software architecturequality attributesarchitectural tacticsarchitecture evaluationsoftware design教科書

01 / 導讀

導讀

引用

Bass, L., Clements, P., & Kazman, R. (2022). Software Architecture in Practice (4th ed.). Addison-Wesley Professional.

章節概要

第四版共 464 頁、26 章、分六個部分,出版社稱其增加了十一個新章節。內容涵蓋:什麼是軟體架構及其為何重要;如何針對品質屬性做設計;面向當代平臺的架構方案;設計、評估和記錄架構的實踐;以及架構在組織中的角色。其框架是架構決策與可用性、效能、安全性、可修改性等品質屬性之間的關係。每章末尾都有延伸閱讀和討論題。

第一部分,第1–2章:什麼是軟體架構?為什麼軟體架構重要?

第1章界定軟體架構是什麼、不是什麼,介紹架構結構與檢視,並追問什麼樣的架構才是「好」架構。第2章給出架構之所以重要的十三條理由,包括抑制或促成品質屬性、推理和管理變更、預測系統品質、干係人之間的溝通、早期設計決策、對實現的約束、對組織結構的影響以及增量開發。

第3章:理解品質屬性

第二部分的基礎。本章討論功能性和品質屬性的考慮因素,說明如何把品質屬性需求寫成場景,並介紹通過架構模式和策略(tactics)達成品質、用策略進行設計,以及用基於策略的問卷分析設計決策。

第4–13章:品質屬性各章

這些章節採用相同的模式:該屬性的通用場景、策略、基於策略的問卷和模式。所涉及的屬性有:可用性(第4章)、可部署性,含持續部署(第5章)、能效(第6章)、可整合性(第7章)、可修改性(第8章)、效能(第9章)、安全性(safety,第10章)、安全性(security,第11章)、可測試性(第12章)和可用性(usability,第13章)。重複的結構使它們可以作為參考章節使用。

第14章:與其他品質屬性打交道

本章討論清單之外的屬性:其他種類的品質屬性、使用(或不使用)標準的屬性清單,以及如何把一個新的「某某性」納入進來。

第三部分,第15–18章:軟體介面;虛擬化;雲與分散式計算;移動系統

第15章講介面概念、設計介面和為介面編寫文件。第16章講共享資源、虛擬機器及其映象、容器、Pod 和無伺服器架構。第17章講雲的基礎、雲中的故障,以及使用多個例項提升效能和可用性。第18章講移動系統:能耗、網路連線、感測器與執行器、資源和生命週期。出版社提供一章關於移動系統架構的線上樣章。

第四部分,第19–23章:可擴充套件的架構實踐

第19章講架構上重要的需求(ASR):從需求文件、干係人訪談和業務目標中收集,並用效用樹記錄。第20章介紹屬性驅動設計及其步驟。第21章把評估架構視為降低風險的活動,包括架構權衡分析方法(ATAM)和輕量級評估。第22章講文件:用途與讀者、記號、檢視、檢視的組合、行為、理由和干係人。第23章講管理架構債:診斷、發現熱點、示例和自動化。

第五部分,第24–25章:架構師在專案中的角色;架構能力

第24章講架構師與專案經理、增量式架構、敏捷開發和分散式開發。第25章講個人架構師的職責、技能與知識,架構組織的能力,以及如何成為更好的架構師。

第六部分,第26章:未來一瞥:量子計算

簡短的結束章,涉及單個量子位元、量子隱形傳態、量子計算與加密、其他演算法和潛在應用。

核心概念

第1–3章:架構與品質屬性

  • 架構結構與檢視:觀察同一個架構的不同方式。
  • 品質屬性場景:陳述品質需求的結構化方式。
  • 策略與模式:影響某品質屬性的設計決策,以及把它們組合起來的成熟安排。

第4–14章:品質屬性

  • 基於策略的問卷:用來分析設計如何應對某屬性的一組問題。
  • 通用場景:各章針對一種屬性使用的模板。
  • 持續部署:可部署性一章背後的實踐。

第15–26章:方案與實踐

  • 架構上重要的需求與效用樹:如何發現並排定驅動設計的需求。
  • 屬性驅動設計:設計架構的逐步方法。
  • ATAM:用於評估的架構權衡分析方法。
  • 架構債與熱點:發現和管理結構性問題的方法。

評析

優點

  • 一致的框架。 品質屬性在結構平行的章節中講述,要素相同(通用場景、策略、問卷和模式),便於比較,也給設計者提供了檢查清單。
  • 覆蓋生命週期。 第四部分從收集架構上重要的需求,到設計、評估、文件和架構債;第五部分則觸及組織和架構師的角色。
  • 當代平臺主題。 如出版社所強調,第四版新增了能效、安全性(safety)、可部署性、虛擬化、容器、無伺服器架構、雲和移動系統。
  • 面向實踐。 書名和出版社都強調實用指導、專家方法和經過檢驗的模型;每章末尾提供討論題和延伸閱讀清單。

侷限

  • 廣而不深。 正文約 400 頁容納 26 章,每個主題的篇幅有限:品質屬性各章每章大約十幾頁到二十頁,平臺各章約十五頁。想深入某一屬性的讀者要順著延伸閱讀清單繼續。
  • 展望性的結束章。 最後一章被描述為對未來的一瞥,僅八頁;它並非對量子軟體架構的論述。
  • 方法以緊湊形式呈現。 第20章用約十八頁講屬性驅動設計及其七個步驟,21.5 節用約十一頁講 ATAM,因此這些有名字的方法是被介紹而非被詳盡講授;要用好它們需要專案實踐。

在課程中的定位

這是軟體工程書單中專講架構的一本。Sommerville 的《Software Engineering》是從需求到測試與演化跟隨系統全程的綜合入門,架構只是其中一個主題;需要了解整門學科時先讀它。《A Philosophy of Software Design》是一本講如何在模組內部管理複雜性的短書;《The Pragmatic Programmer》是個人習慣之書;《Software Engineering at Google》描述一個大型組織如何長期維持軟體;《Software Abstractions》展示如何對設計做形式化建模與分析。

Bass、Clements 和 Kazman 的書介於程式碼層面的建議與組織層面的實踐之間:它提供設計評審中使用的品質屬性、策略和檢視的詞彙,在你既想描述又想檢驗一個設計時,與《Software Abstractions》相配。

如何使用本書

本書適合已經構建或研究過由多個元件組成的軟體(最好是在團隊中),現在想要系統地掌握架構方法的學生和從業者。

實用安排:

  • 核心: 第1–3章學習詞彙,然後讀與你的系統相關的品質屬性章節(可用性、可修改性、效能和安全性是常見的起點)。
  • 過程: 第19–22章(需求、設計、評估、文件)是實踐的骨幹,適合課程專案:構建效用樹,進行一輪屬性驅動設計的迭代,並用多個檢視記錄結果。
  • 背景: 根據你工作的平臺讀第15–18章,並讀第23–25章瞭解架構債、敏捷專案和架構師的成長。
  • 選讀: 第14章和第26章。

可以在學習小組中使用各章末的討論題,並把各基於策略的問卷用在你熟悉的系統上。