章节概述
软件架构是软件系统的高层结构,是系统在其生命周期中最早的设计决策体现。本章是系统架构设计师考试中最核心的章节之一,涵盖了软件架构从定义、风格、设计方法到评估的完整知识体系。软件架构设计就是软件系统的"布局谋篇",旨在站在较高的层面上整体地解决好软件的设计、复用、质量和维护等方面的实际问题。
本章内容极为丰富,涉及软件架构概述(定义、生命周期模型)、软件质量属性及其实现战术、五大架构风格分类(数据流、调用/返回、独立构件、虚拟机、仓库)、层次系统架构(C/S、B/S、MVC、MVP)、面向服务的架构(SOA、微服务)、架构设计方法(属性驱动设计ADD)、架构文档化、软件架构评估(ATAM、SAAM、CBAM)、构件及其复用、产品线及系统演化、特定领域软件架构DSSA、软件架构视图(4+1视图、模块/C&C/分配视图类型)等。在考试中,架构风格分类、质量属性、架构评估方法是高频考点。
从软件开发过程来看,软件架构的建立位于需求分析之后、概要设计之前。基于架构的软件开发模型将整个软件过程划分为架构需求、设计、文档化、评审(评估)、实现、演化等6个子过程。架构设计师需要深刻理解各种架构风格的适用场景、优缺点,掌握架构评估方法以预见和保证系统的质量属性。
知识结构框架
- 9.1 软件架构概述 — 架构定义(3种权威定义)、架构重要性、架构5种模型(结构/框架/动态/过程/功能)、"4+1"视图模型(逻辑/开发/进程/物理/场景)
- 9.2 架构需求与软件质量属性 — 运行期质量属性(性能/安全性/易用性/可伸缩性/互操作性/可靠性/鲁棒性等)、开发期质量属性(可扩展性/可重用性/可测试性/可维护性/可移植性)、6大质量属性战术(可用性/可修改性/性能/安全性/可测试性/易用性)
- 9.3 软件架构风格 — 5大类:数据流风格(批处理/管道-过滤器)、调用/返回风格(主程序子程序/面向对象/层次结构)、独立构件风格(进程通信/事件系统)、虚拟机风格(解释器/基于规则)、仓库风格(数据库/超文本/黑板)
- 9.4 层次系统架构风格 — 二层/三层C/S、B/S架构、MVC架构、MVP架构
- 9.5 面向服务的架构 — SOA概述与设计原则、关键技术(UDDI/WSDL/SOAP/REST)、实现方法(Web Service/服务注册表/ESB)、微服务架构
- 9.6 架构设计 — 演变交付生命周期模型、属性驱动设计法(ADD)、按架构组织开发团队、开发骨架系统
- 9.7 软件架构文档化 — 视图编档(7部分结构)、跨视图文档、UML表示、架构重构(反向工程)
- 9.8 软件架构评估 — 评估方法分类(调查问卷/场景/度量)、ATAM架构权衡分析法(9步骤)、CBAM成本效益分析法
- 9.9 构件及其复用 — 商用构件标准(CORBA/J2EE/DNA 2000)、应用系统簇与构件系统、基于复用开发的组织结构
- 9.10 产品线及系统演化 — 复用与产品线、基于产品线的架构、产品线开发模型(前瞻性/反应性)、DSSA特定领域软件架构、架构演化7步骤
- 9.11 软件架构视图 — 视图3大类型(模块视图/C&C视图/分配视图)、各类型下的风格、视图间映射关系
核心概念
软件架构定义
系统的一个(或多个)结构,由软件元素、元素的外部可见属性及它们之间的关系组成。强调"外部可见"属性,架构是对系统的抽象,具有"基础"性,隐含"决策"。
架构风格
描述某一特定应用领域中系统组织方式的惯用模式,定义了一个系统家族。包含词汇表(构件和连接件类型)和一组约束(组合规则),反映领域共有的结构和语义特性。
数据流风格
包括批处理序列和管道-过滤器。数据按流的形式前进,不存在反复重构。批处理数据整体传递;管道-过滤器支持增量处理,典型应用为Unix Shell和传统编译器。
调用/返回风格
采用调用-返回机制,分而治之策略。包括主程序/子程序(结构化经典)、面向对象风格(数据抽象与封装)、层次结构(每层为上层服务、作下层客户)。
独立构件风格
构件相对独立,不直接通信,降低耦合度。包括进程通信(消息传递连接件)和事件系统(隐式调用,触发/广播事件,注册过程自动调用)。
虚拟机风格
构建运行环境以解析和运行自定义语言,增加架构灵活性。包括解释器(解释引擎+代码存储区+状态结构)和基于规则的系统(规则集+规则解释器+工作内存)。
仓库风格
中央数据结构说明当前状态,独立构件在其上执行。包括数据库系统(中央共享数据源+独立处理元素)、超文本系统(早期静态网页)、黑板系统(知识源+黑板数据+控制)。
DSSA
特定领域软件架构,支持在特定领域中有多个应用的生成。必备特征:严格定义的问题域/解决域、普遍性、合适抽象、可复用元素。活动阶段:领域分析→领域设计→领域实现。
产品线架构
针对一系列产品设计的通用架构,将共用模块事先实现供直接重用。三要点:必须考虑一系列明确许可的变化、必须文档化、必须提供"产品创建者指南"。开发模型分前瞻性和反应性。
中间件
构件标准规范包括CORBA(ORB软总线+公共对象服务+公共设施)、J2EE(RMI/IIOP+EJB业务逻辑层)、DNA 2000(COM/DCOM/COM+构件模型)。ESB企业服务总线是SOA的核心基础设施。
架构评估(ATAM)
架构权衡分析法,基于场景的评估方法。揭示架构如何满足质量需求及需求间交互作用。输出:架构表述、业务目标、场景集合、决策映射、敏感点/权衡点、风险/无风险决策、风险主题。
质量属性
运行期:性能、安全性、易用性、可伸缩性、互操作性、可靠性、鲁棒性;开发期:易理解性、可扩展性、可重用性、可测试性、可维护性、可移植性。架构重点关注6种:可用性、可修改性、性能、安全性、可测试性、易用性。
关键公式与规则
架构风格5大类分类表
质量属性分类
质量属性场景6要素
ATAM评估核心概念
架构评估方法对比
SOA关键技术
考试要点
- 架构风格5大类及代表实例:管道-过滤器=Unix Shell、传统编译器(词法→语法→语义→代码生成);黑板系统=AI/语音识别(HEARSAY-II);解释器=专家系统;层次结构=操作系统分层通信协议(如OSI七层模型);事件系统=编程环境工具集成、Debugger断点。
- DSSA三要素/三阶段:领域分析(获得领域模型,是基础和关键)→领域设计(获得DSSA)→领域实现(开发可复用信息)。DSSA领域分垂直域(特定系统族)和水平域(多系统族共有功能)。
- 产品线 vs 单产品架构:产品线架构必须考虑一系列明确许可的变化、必须文档化、必须提供"产品创建者指南"。开发模型分"前瞻性"(自上而下,战略决策)和"反应性"(自下而上,根据已有产品构建)。
- 中间件/构件标准分类:CORBA(ORB软总线+公共对象服务+公共设施,CCM构件模型)、J2EE(RMI/IIOP,EJB=会话Bean+实体Bean,业务逻辑层中间件)、DNA 2000(COM/DCOM/COM+,负载均衡+对象池)。
- 架构评估方法区别:ATAM=多场景质量属性分析+权衡(输出敏感点/权衡点/风险点/非风险点);SAAM=最早方法,侧重可修改性场景分析;ARID=架构适宜性评估(部分架构不完整时);CBAM=在ATAM基础上从经济角度计算ROI选择策略。
- 质量属性六大类及战术:可用性(错误检测/恢复/预防)、可修改性(局部化修改/防止连锁反应/推迟绑定时间)、性能(资源需求/资源管理/资源仲裁)、安全性(抵抗攻击/检测攻击/从攻击恢复)、可测试性(输入输出/内部监控)、易用性(运行时/设计时/用户主动操作)。
- ATAM输出四要素:敏感点、权衡点、风险点、非风险点。备份数据库是经典权衡点例子(可靠性↑性能↓)。
- 4+1视图模型:逻辑视图(功能需求,面向对象)、开发视图(模块组织管理)、进程视图(运行特性,并发/分布/容错)、物理视图(软件映射到硬件)、场景视图(将四视图联系起来,最重要需求抽象)。逻辑+开发=静态结构;进程+物理=动态结构。
- 架构视图3大类型:模块视图类型(分解/使用/分层/泛化风格)、C&C视图类型(管道过滤器/共享数据/发布订阅/客户机服务器/对等/通信进程风格)、分配视图类型(部署/实现/工作任务风格)。
- 架构演化7步骤:需求变动归类→制订架构演化计划→修改/增加/删除构件→更新构件相互作用→构件组装与测试→技术评审→产生演化后的架构。
- MVC vs MVP区别:MVC中View可直接从Model读取数据;MVP中View不直接使用Model,所有交互通过Presenter进行,Presenter依赖抽象化的IView接口,使UI逻辑易于测试。
- 微服务核心特点:小且专注做一件事、轻量级通信(RESTful API)、松耦合、独立部署。优势:技术异构性、弹性、独立扩展、简化部署。挑战:分布式复杂度、运维成本、部署自动化、DevOps。
关键图示
图9-1 "4+1"视图模型
从逻辑视图、开发视图、进程视图、物理视图和场景视图5个视角描述软件架构,每个视图只关心系统的一个侧面,5个视图结合才能反映架构全部内容。场景视图将其他四个视图有机联系起来。
图9-5 管道/过滤器风格示意图
管道/过滤器风格中每个构件(过滤器)读输入数据流,经内部处理后产生输出数据流,连接件(管道)将一个过滤器的输出传到另一过滤器的输入。典型应用:Unix Shell程序、传统编译器(词法分析→语法分析→语义分析→代码生成)。
图9-19 视图编档中的接口文档内容
视图编档组织结构中的元素目录部分需要对接口进行编档,包括接口标识、语法(参数与返回类型)、语义(前置/后置条件)等内容,是架构文档化的重要组成部分。
图9-20 软件架构重构活动
架构重构是反向工程之一,以迭代方式进行4个活动:信息提取(View Extraction)→数据库构造(Database Construction)→视图融合(View Fusion)→重构(Reconstruction),最终生成架构文档。