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章。
可以在学习小组中使用各章末的讨论题,并把各基于策略的问卷用在你熟悉的系统上。
