软件架构概念
1.1 软件架构定义
软件架构(Software Architecture)= 软件体系结构
指系统的一个或多个结构,包括软件的构件、构件的外部可见属性,以及构件之间的相互关系。
体系结构设计包含两部分:
- 数据库设计
- 软件结构设计 — 关注构件的结构、属性和交互作用,通过多种视图全面描述
软件架构三要素 = 构件 + 外部可见属性 + 相互关系
1.2 软件架构设计与生命周期
| 阶段 | 核心关注点 | 关键产出 / 技术 |
| 需求分析 | 关注问题空间(架构关注解空间) | 需求模型→架构模型的转换、可追踪性 |
| 设计 | SA 模型描述、设计与分析、SA 设计 | ADL、多视图、4+1 模型 |
| 实现 | 基于 SA 的开发、向实现过渡、测试 | 从 SA 到代码 |
| 构件组装 | 支持可复用构件互联 | 失配问题的检测与消除 |
| 部署 | 部署阶段软硬件高层视图 | 基于 SA 分析部署方案质量属性 |
| 后开发 | 维护、演化、复用 | 动态软件体系结构、体系结构恢复与重建 |
设计阶段三大要点(必背)
① SA 模型描述
- ADL:UniCon、Rapide、Darwin、Wright、C2 SADL、Acme、xADL、XYZ/ADL、ABC/ADL
- 多视图:4+1 模型、Hofmeister 4 视图、CMU-SEI Views and Beyond
- 视图标准:IEEE 1471-2000、RM-ODP、UML、IBM Zachman
② SA 模型设计与分析方法
③ SA 设计
6 阶段口诀:需求 → 设计 → 实现 → 组装 → 部署 → 后开发
1.3 软件架构的重要性(8 点)
口诀:品质 · 目标 · 计划 · 指导 · 复杂 · 复用 · 维护 · 冲突
| # | 重要性 |
| 1 | 架构设计能够满足系统的品质 |
| 2 | 使受益人达成一致的目标 |
| 3 | 支持计划编制过程 |
| 4 | 对系统开发的指导性 |
| 5 | 有效管理复杂性 |
| 6 | 为复用奠定基础 |
| 7 | 降低维护费用 |
| 8 | 支持冲突分析 |
基于架构的软件开发方法(ABSD)
2.1 ABSD 方法概述
ABSD(Architecture-Based Software Design)= 基于体系结构的软件设计
ABSD 由构成体系结构的商业、质量和功能需求的组合驱动。三大驱动是高频考点:商业需求 + 质量需求 + 功能需求。
三大设计工具
| 工具 | 描述对象 |
| 视角与视图 | 软件架构 |
| 用例(Use Case) | 功能需求 |
| 质量场景(Quality Scenario) | 质量需求 |
ABSD 三大基础
- 功能的分解
- 通过选择体系结构风格实现质量和商业需求
- 软件模板的使用
ABSD 是自顶向下、递归细化的、迭代的,每一步都有清晰的定义 → 有助于降低体系结构设计的随意性
2.2 基于体系结构的开发模型(6 步骤)
需求→
设计→
文档化→
复审→
实现→
演化
① 体系结构需求
需求获取:质量目标 + 系统的商业目标 + 系统开发人员的商业目标
标识构件三步法:
生成类图→
对类进行分组→
把类打包成构件
架构需求评审重点:
- 需求是否真实反映了用户的要求
- 类的分组是否合理
- 构件合并是否合理
② 体系结构设计(5 步)
- 提出软件体系结构模型
- 把已标识的构件映射到软件体系结构中
- 分析构件之间的相互作用
- 产生软件体系结构
- 设计评审
体系结构设计是一个迭代过程。若要开发的系统能够从已有的系统中导出大部分,则可以使用已有系统的设计过程。
③ 体系结构文档化 — 主要输出
- 体系结构规格说明书
- 测试体系结构需求的质量设计说明书
④ 体系结构复审
- 设计、文档化、复审是一个迭代过程
- 目的:标识潜在风险,及早发现体系结构设计中的缺陷和错误
⑤ 体系结构实现(4 步)
分析与设计→
构件实现→
构件组装→
系统测试
实现过程以复审后的文档化的体系结构说明书为基础,每个构件必须满足软件体系结构中说明的对其他构件的责任。
⑥ 体系结构演化(7 步)
- 需求变化归类
- 体系结构演化计划
- 构件变动
- 更新构件的相互作用
- 构件组装与测试
- 技术评审
- 演化后的体系结构
软件架构风格 重中之重
3.1 架构风格概述
软件体系结构设计的核心目标是重复的体系结构模式(软件复用/重用)。
架构风格 = 描述某一特定应用领域中系统组织方式的惯用模式。
体系结构风格定义一个系统家族,即定义一个词汇表和一组约束:
3.2 五大架构风格分类(必背框架)
| 大类 | 子风格 |
| 数据流 | 批处理、管道-过滤器 |
| 调用 / 返回 | 主程序/子程序、面向对象、层次型、C/S、B/S |
| 以数据为中心 | 仓库、黑板 |
| 虚拟机 | 解释器、规则系统 |
| 独立构件 | 进程通信、事件系统 |
| 其他 | C2 风格 |
3.3 数据流体系架构风格
批处理(Batch Sequential)
- 每个处理步骤是独立程序
- 每一步必须在前一步结束后才能开始
- 数据必须完整,以整体方式传递
管道-过滤器(Pipe and Filter)
- 系统分为序贯处理步骤
- 步骤间通过数据流连接
- 一步的输出 = 另一步的输入
- 每个步骤都有输入和输出
高频对比:批处理 vs 管道过滤器
| 维度 | 批处理 | 管道-过滤器 |
| 数据传递 | 整体传递 | 流式传递 |
| 步骤启动 | 串行(前完后启) | 可并发 |
| 数据完整性 | 必须完整 | 增量处理 |
3.4 调用 / 返回体系结构风格
① 主程序/子程序
- 单线程控制
- 问题划分为若干处理步骤
- 构件 = 主程序 + 子程序
② 面向对象(OO)
③ 层次型
- 每一层为上层服务,作为下层的接口
- 仅相邻层间具有层接口
④ 客户端/服务端(C/S)
两层 C/S — 主要组成:数据库服务器 + 客户应用程序 + 网络
❌ 缺点
- 开发成本高
- 客户端设计复杂
- 信息内容和形式单一
- 不利于推广
- 软件移植困难
- 软件维护和升级困难
三层 C/S — 在两层基础上增加应用服务器
- 整个应用逻辑在应用服务器上
- 只有表示层在客户机上 → 称为"瘦客户机"
- 三层划分:表示层 / 功能层 / 数据层
⑤ 浏览器/服务器(B/S)
B/S 风格是三层应用结构的实现方式:
浏览器→
Web 服务器→
数据库服务器
B/S 相比 C/S 的不足(高频 5 点):
- 动态页面的支持能力弱
- 系统拓展能力差
- 安全性难以控制
- 响应速度不足
- 数据交互性不强
3.5 以数据为中心的体系结构风格
① 仓库(Repository)
- 存储和维护数据的中心场所
- 由中央数据结构和一组独立构件组成
② 黑板(Blackboard)
- 一种问题求解模型
- 组织:推理步骤、控制状态数据、问题求解
- 由黑板、知识源、控制模块构件组成
黑板风格典型应用:信号处理领域,如语音识别和模式识别。
3.6 虚拟机体系结构风格
核心思想:人为构建一个运行环境,可以解析与运行自定义的一些语言 → 增加架构的灵活性。
① 解释器(Interpreter)
- 建立虚拟机以弥合程序语义与硬件语义之间的差异
- ❌ 缺点:执行效率低
解释器风格典型应用:专家系统。
② 规则系统(Rule-Based System)
四大组成:知识库 + 规则解释器 + 规则/数据选择器 + 工作内存
3.7 独立构件体系结构风格
核心思想:每个构件相对独立,构件之间不直接通信 → 降低耦合度,提升灵活度。
3.8 C2 风格
C2 风格通过连接件连接构件或某个构件组,构件与构件之间无连接(必考点)。
软件架构复用
4.1 定义
软件复用是系统化的软件开发过程:开发一组基本的软件构件模块,以覆盖不同的需求/体系结构之间的相似性,提高系统开发的效率、质量和性能。
4.2 复用的原因(6 点)
口诀:少工作 · 少时间 · 低成本 · 高生产力 · 高质量 · 好互操作
- 减少开发工作
- 减少开发时间
- 降低开发成本
- 提高生产力
- 提高产品质量
- 更好的互操作性
4.3 复用的对象与形式
可复用资产(10 项):
需求 · 架构设计 · 元素 · 建模分析 · 测试 · 项目规划 · 过程+方法+工具 · 人员 · 样本系统 · 缺陷消除
一般形式:函数、库、面向对象开发中的类、接口、包。
4.4 复用的基本过程(3 步)
构建/获取可复用资产→
管理可复用资产→
使用可复用资产
特定领域软件体系结构(DSSA)
5.1 DSSA 定义
DSSA(Domain Specific Software Architecture)是在一个特定应用领域中为一组应用提供组织结构参考的标准软件体系结构,即用于某一类特定应用领域的标准软件构件集合。
5.2 四大特征
口诀:领普抽复(领域性、普遍性、抽象性、可复用性)
| 特征 | 含义 |
| 领域性 | 限定在特定应用领域 |
| 普遍性 | 适用于领域内的所有应用 |
| 抽象性 | 抽象出共性的标准结构 |
| 可复用性 | 用于复用 |
5.3 DSSA 三大基本活动
| 活动 | 内容 |
| 领域分析 | 通过分析领域中系统的共性需求,建立领域模型 |
| 领域设计 | 设计 DSSA,且需具备对领域需求变化的适应性 |
| 领域实现 | 获取可重用信息 |
5.4 参与人员(4 类)
口诀:专家 · 分析师 · 设计员 · 实现员
5.5 DSSA 建立过程
DSSA 的建立过程是并发的、递归的、反复的螺旋模型(高频考点)。
五个阶段:
- 定义领域范围
- 定义领域特定元素
- 定义领域特定的设计和实现约束
- 定义领域模型和体系结构
- 产生、搜集可重用的单元
高频考点速查 必背
| 考点 | 答案要点 |
| 软件架构三要素 | 构件、外部可见属性、相互关系 |
| 软件架构生命周期 | 需求-设计-实现-组装-部署-后开发 |
| ABSD 三大驱动 | 商业、质量、功能需求 |
| ABSD 三大工具 | 视图、用例、质量场景 |
| ABSD 三大基础 | 功能分解、选择架构风格、软件模板 |
| 标识构件三步 | 生成类图 → 类分组 → 打包成构件 |
| 架构开发模型 6 步 | 需求-设计-文档化-复审-实现-演化 |
| 架构风格定义 | 词汇表(构件+连接件)+ 约束 |
| C2 风格特点 | 构件之间无连接,通过连接件 |
| 黑板典型应用 | 信号处理(语音识别、模式识别) |
| 解释器典型应用 | 专家系统 |
| 解释器缺点 | 执行效率低 |
| 规则系统四组成 | 知识库、规则解释器、规则/数据选择器、工作内存 |
| B/S 三层 | 浏览器、Web 服务器、数据库服务器 |
| 三层 C/S 划分 | 表示层、功能层、数据层(瘦客户机) |
| 层次型架构特征 | 仅相邻层间具有层接口 |
| 仓库风格组成 | 中央数据结构 + 一组独立构件 |
| 事件系统特征 | 不直接调用,触发/广播事件 |
| DSSA 四特征 | 领域性、普遍性、抽象性、可复用性 |
| DSSA 建立模型 | 并发、递归、反复的螺旋模型 |
| DSSA 三大活动 | 领域分析、领域设计、领域实现 |
| DSSA 五阶段 | 范围→元素→约束→模型与架构→搜集 |
| 失配问题 | 出现在构件组装阶段 |
| 后开发阶段研究方向 | 动态软件体系结构、架构恢复与重建 |