
软件架构概述
架构背景与目的、定义、作用
- 在软件需求和设计之间存在一条很难逾越的鸿沟,从而很难有效的将需求转换为相应的设计,从而设计出软件架构,目的是在软件需求与设计之间建立桥梁,解决系统结构和需求想实现平摊过度的问题。
- 【口诀:"架构搭桥梁,需求到设计"】
- 软件架构定义:软件架构为系统提供了一个结构、行为和属性的高级抽象,由构件的描述,构
- 件的相互作用(连接件),指导构件集成的模式以及这些模式的约束组成。
- 【定义-口诀:结构行为属性高抽象、构件描述相作用、指导构件模式与约束。】
- 软件架构指定了系统的组织结构和拓扑结构,并且显示了系统需求和构件之间的对应关系,提供了一些设计决策的基本原理。
- 【作用-口诀:架构桥梁五作用:跨鸿沟、做抽象、定结构、对需求、给原理】

习题
1、模拟
1、简述软件架构在需求分析和设计之间起到的桥梁作用。
参考答案:
软件架构的桥梁作用主要体现在:
1) 解决了需求和设计之间的鸿沟问题
2) 提供了系统的高级抽象
3) 指定了系统的组织结构和拓扑结构
4) 显示了系统需求和构件之间的对应关系
5) 提供了设计决策的基本原理
口诀:"架构桥梁五作用:跨鸿沟、做抽象、定结构、对需求、给原理"
2、软件架构为系统提供了一个__的高级抽象,由_、_、指导构件集成的模式以及这些模式的约束组成。
答案:1、结构、行为和属性
2、构件的描述、构件的相互作用(连接件)
软件架构建模
4个阶段与5个模型
- 软件架构发展的4个阶段
- 无架构设计阶段:汇编语言
- 萌芽阶段:以控制流图、数据流图(结构化设计)构成软件结构的特征
- 初级阶段:不同侧面描述系统的结构模型,以UML为典型代表。
- 高级阶段:描述系统的高层抽象结构为中心,不关心具体的建模细节,划分了架构模型与传统结构的界限。以4+1模型为标志。
【口诀:无萌初高四阶段,汇编(控制、数据)流图UML,4+1走向高】
- 软件架构的5种模型
- 结构模型:直观且普遍的建模方法,以构件、连接件和其他干练刻画架构,通过架构反映系统的重要语义内容,包括系统的配置、约束、隐含的假设条件、风格和性质能,研究结构模型的核心是架构描述语言。
- 框架模型:与结构模型类似,但是他不太侧重描述结构的细节而是侧重整体结构。框架模型主要以一些特殊的问题为目标建立只针对特定问题的架构。
- 动态模型:对结构模型或框架模型的补充,研究系统的粗粒度行为性质。例如描述系统的重新配置,这类系统通常师激励性的,
- 过程模型:研究构建系统的步骤和过程。
- 功能模型:认为架构是一组功能构件按层次组成的,下层想上层提供服务。
【口诀:结构最普遍,框架重整体,细节不关心;动态看行为,过程重步骤,功能讲分层】

习题
1、软件架构发展的第二阶段(萌芽阶段)的主要特征是
A. 汇编语言
B. 以UML为典型代表
C. 以控制流图、数据流图构成软件结构
D. 以4+1模型为标志
答案: C
解析: 萌芽阶段以控制流图、数据流图(结构化设计)构成软件结构为特征。
口诀:"萌芽看流图,控制加数据"
2、下列关于框架模型的描述,错误的是
A. 与结构模型类似
B. 侧重描述结构细节
C. 针对特定问题建立架构
D. 侧重整体结构
答案: B
解析: 框架模型不太侧重描述结构细节而是侧重整体结构。
口诀:"框架重整体,细节不关心"
3、关于软件架构的5种模型,下列说法正确的有
A. 结构模型是最直观且普遍的建模方法
B. 动态模型研究系统的粗粒度行为特质
C. 过程模型研究构建系统的步骤和过程
D. 功能模型认为架构是一组功能构件按层次组成的
答案: ABCD
解析: 这些都是5种模型的正确特征。
口诀:"结构最普遍,动态看行为,过程重步骤,功能讲分层"
4、软件架构发展经历了从__、__、_到__四个阶段。
答案: 无架构设计阶段、萌芽阶段、初级阶段、高级阶段
记忆口诀:"无萌初高四阶段,从汇编到4+1"
5、某公司正在开发一个大型分布式系统,目前处于架构设计阶段。
问题1: 该系统处于软件架构发展的哪个阶段?为什么?
参考答案:
应该处于高级阶段,因为:
1) 需要描述系统的高层抽象结构
2) 不过分关注具体建模细节
3) 需要划分架构模型与传统结构的界限
4) 适合使用4+1视图模型来描述系统
问题2: 在进行架构建模时,应该如何运用5种模型?
参考答案:
应该综合运用5种模型:
1) 使用结构模型描述系统的基本构件和连接关系
2) 用框架模型把握整体架构
3) 通过动态模型描述系统的重构和演化
4) 采用过程模型规划系统构建步骤
5) 运用功能模型设计系统的分层服务
口诀:"五模型配合用,系统更完善"
高级阶段的4+1模型-【重要】
知识
【口诀:"四加一来记清:逻辑开发进物景"】
(1)逻辑视图。主要支持系统的功能需求,即系统提供给最终用户的服务。在0O技术中,用类图
来描述逻辑视图。使用的风格为面向对象的风格。
主要特点:功能需求为主
应用工具:OO技术类图
设计风格:面向对象
【口诀:"逻辑图中见功能,最终用户得其用,面向对象的风格"】
(2)开发视图。也称为模块视图,在UML中被称实现视图,它主要侧重于软件模块的组织和管理。开发视图要考虑软件内部的需求。通过系统VO 关系的模型图和子系统图来描述。
别名:模块视图
重点:软件模块组织管理
描述:通过VO关系模型
【口诀:"开发看模块,UML是实现,不忘软件管理与需求,VO子系统图来描述"】
(3)进程视图。侧重于系统的运行特性,主要关注一些非功能性需求。强调并发性、分布性、系统集成性和容错能力,定义了逻辑视图中的各个类的操作具体是在哪一个线程中被执行的。
关注点:系统集成人员(架构师)、运行特性
重点:非功能性需求
特征:并发性、分布性、系统集成性
【口诀:"进程重运行,非功能性强,并发分布集成忙"】
(4)物理视图。在UMIL中被称为部署视图,主要考虑如何把软件映射到硬件上,它通常要考虑到解决系统拓扑结构、系统安装和通信等问题。
UML称呼:系统工程人员(运维)、部署视图
主要任务:软件映射硬件
关注点:系统拓扑结构与通信
【口诀:"物理部署图,软硬要映射,拓扑通信记心上"】
(5)场景。可以看作是那些重要系统活动的抽象,它使4个视图有机联系起来,从某种意义上说场
景是最童要的需求抽象。对应UML中的用例视图。它可以帮助架构设计师找到构件及其相互关系。
作用:串联其他四视图
表现:用例图展示
价值:帮助架构师找构件关系
【口诀:"场景来串联,UML是用例,助力构件与相互关系"】
习题
1、模拟
一、单选题
1、在4+1视图模型中,主要支持系统功能需求、系统提供给最终用户服务的是:
A. 开发视图
B. 逻辑视图
C. 进程视图
D. 物理视图
答案: B
解析: 逻辑视图主要支持系统的功能需求,在OO技术中用类图来描述。
口诀:"逻辑图中见功能,最终用户得其用"
2、在UML中被称为部署视图,主要考虑如何把软件映射到硬件上的是:
A. 物理视图
B. 进程视图
C. 开发视图
D. 场景视图
答案: A
解析: 物理视图在UML中称为部署视图,关注软件到硬件的映射。
口诀:"物理即部署,软硬映射配"
二、多选题
- 关于进程视图的描述,正确的有:
A. 侧重于系统的运行特性
B. 主要关注非功能性需求
C. 强调并发性、分布性
D. 关注系统集成性和容错能力
答案: ABCD
解析: 这些都是进程视图的特征。
口诀:"进程四特性:运行非功能,并发又分布,集成保容错"
三、判断题
1、场景视图可以作为其他四个视图的驱动和黏合剂,通过用例图来表示。
答案: 对
解析: 场景视图(+1)确实起到连接其他四视图的作用。
口诀:"场景来串联,用例作黏合"
2、开发视图也称为实现视图,主要关注系统的性能需求。
答案: 错
解析: 开发视图(模块视图)主要关注软件模块的组织和管理。
口诀:"开发重模块,组织与管理"
四、案例分析题
案例: 某公司正在开发一个分布式电商系统,需要从不同视角来描述系统架构。
问题1: 如果需要描述系统的订单处理功能,应该使用哪个视图?为什么?
参考答案:
应该使用逻辑视图,因为:
1) 订单处理是系统的核心功能需求
2) 需要展示给最终用户的服务
3) 可以通过OO技术的类图来描述
4) 体现了面向对象的设计风格
问题2: 如果需要说明系统的并发处理能力,应该使用哪个视图?
参考答案:
应该使用进程视图,因为:
1) 关注系统的运行特性
2) 处理非功能性需求
3) 强调系统的并发性
4) 关注系统的性能表现
五、填空题
1、4+1视图模型中的开发视图在UML中也称为__视图,主要通过__关系的模型和子系统图来描述。
答案: 实现、VO(视图-对象)
2、场景视图通过__来表达,它可以帮助架构设计师找到__及其相互关系。
答案: 用例图、构件
软件架构风格-1-【重要】
基本介绍
架构风格描述系统组织方式和管用模式,是反映系统共有的结构和语义特性,看重对系统设计的重用。
架构设计的核心问题是是否到达结构级的软件复用。
架构风格定义了用于描述系统的术语表和一组知道构建系统的规则。

有以下5大类。
1、数据流风格
- 分为批处理、管道过滤器
- 批处理序列:构件只通过数据传递交互,每个处理步骤是独立的程序。前后构件不一定有关联,所以必须等前一步结束才能开始,数据必须完整,以整体的方式传递。
- 管道过滤器:流式传输,前一个构件的输出作为后一个构件输入,前面执行一部分也可以开始下一个执行。
1、批处理序列
【批处理:数据完整传递、独立的步骤、前一个结束才开始。应用:工资系统、数据仓库、日志系统】
2、管道过滤器
【管道过滤器:流式传输、输出作为输入。应用:linux命令行、音视频处理、编译器、】

2、调用/返回风格
调用/返回风格的主要特点:
- 程序控制流程清晰,遵循"调用-执行-返回"的模式
- 强调模块化和结构化设计
- 具有良好的可维护性和可理解性
- 支持层次化的系统设计
- 适合处理顺序性的业务逻辑
- 分为:主子程序、面向对象、层次结构
1、主程序/子程序
单线程控制,把问题分成若干处理步骤,构件即为主程序和子程序,子程序通常可合成为模块。过程调用作为交互机制,充当连接件的角色。
特点:
- 单一控制流
- 自顶向下的设计方法
- 模块化程序设计
- 清晰的调用层次
应用场景:
- 批处理程序
- 命令行工具
- 数据处理应用
- 计算密集型应用
- 简单的工具软件
应用:
文本处理工具:
主程序:文件处理
- 子程序1:文件读取
- 子程序2:文本解析
- 子程序3:结果输出
2、面向对象
构件是对象,对象是抽象数据类型的实力。连接件就是对象间交互的方式。对象是通过函数和过程调用来交互的。
特点:
- 数据和操作封装在一起
- 支持继承和多态
- 对象之间通过消息传递交互
- 更好的代码重用性
应用场景:
- 图形用户界面(GUI)应用
- 企业级应用系统
- 游戏开发
- Web应用程序
- 移动应用开发
实际应用例子:
电商系统:
- 订单对象
- 购物车对象
- 用户对象
- 支付对象
- 商品对象
3、层次结构
构件组成一个层次结构,连接件通过决定城建如何交互的协议来定义。每层为上一层提供服务,使用下一层的服务,只能剪刀与自己邻接的成。修改某一层,最多影响期相邻的两层(通常只影响上层。)
- 层次结构优点:允许将复杂问题分解成一步一步实现。越靠近底层,抽象级别越高;因为分层所以软件复用更好。
- 层次结构缺点:有些系统很难划分层。层越多性能越低
特点:
- 系统分层设计
- 每层只与相邻层交互
- 高内聚,低耦合
- 良好的可维护性和可扩展性
应用场景:
- 网络协议(如TCP/IP协议栈)
- 操作系统
- 企业应用架构
- 数据库管理系统
- 分布式系统
实际应用例子:
典型的Web应用三层架构:
表现层(UI Layer)
↓↑
业务逻辑层(Business Layer)
↓↑
数据访问层(Data Access Layer)

- 各风格的比较:
| 风格 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 主程序/子程序 | 简单直观,容易理解 | 灵活性较差,代码重用有限 | 简单的顺序处理程序 |
| 面向对象 | 重用性好,扩展性强 | 设计复杂,可能过度设计 | 复杂的交互系统 |
| 层次结构 | 关注点分离,易于维护 | 性能开销,可能过度分层 | 大型企业级应用 |
- 选择建议:
- 如果是简单的数据处理程序,选择主程序/子程序风格
- 如果是需要大量对象交互的系统,选择面向对象风格
- 如果是复杂的企业级应用,选择层次结构风格
- 在实际应用中,这三种风格常常会结合使用
3、独立构件风格
【大型复杂的分布式系统、良好的扩展和维护】
- 独立架构分为:进程通信、事件驱动系统
- 进程通信:构件是独立的进程,连接件是消息传递。消息传递有点对点,异步、同步、以及远程调用。
- 事件驱动:也就是消息队列,事件触发
- 独立架构的优点:软件复用提供强大支持,维护方便
- 缺点:放弃了对系统计算的控制。

独立构件风格的主要特点:
- 构件之间相互独立
- 松耦合设计
- 支持分布式部署
- 高度模块化
- 良好的可扩展性
优缺点分析:
优点:
- 强大的软件复用能力
- 维护和升级方便
- 系统扩展性好
- 支持分布式部署
- 故障隔离性好
缺点:
- 放弃了对系统计算的直接控制
- 系统行为预测较难
- 可能存在性能开销
- 调试和测试相对复杂
- 系统一致性维护困难
选择建议:
应选择独立构件风格的场景:
- 需要高度模块化的系统
- 大型复杂的分布式系统设计
- 需要良好扩展性的系统
- 对系统可维护性要求高
- 需要支持动态更新的系统
不建议使用的场景:
- 实时性要求极高的系统
- 资源受限的嵌入式系统
- 需要严格控制计算过程的场景
- 简单的单体应用
1、进程通信
特点:
- 构件是独立的进程
- 通过消息传递进行通信
- 支持多种通信模式
- 进程间相互独立运行
通信方式:
- 点对点通信
- 异步通信
- 同步通信
- 远程过程调用(RPC)
应用场景:
- 分布式系统
- 微服务架构
- 操作系统
- 并行计算系统
- 大型分布式应用
实际应用例子:
微服务系统:
- 用户服务进程
- 订单服务进程
- 支付服务进程
- 库存服务进程
它们通过消息队列或RPC相互通信
2、事件驱动系统
特点:
- 基于事件触发
- 构件通过事件注册和监听
- 支持异步处理
- 松散耦合
- 高度可扩展
事件处理机制:
- 事件发布/订阅
- 事件队列
- 事件处理器
- 事件总线
应用场景:
- GUI应用程序
- 实时监控系统
- 消息中间件
- 网络服务器
- IoT应用
实际应用例子:
股票交易系统:
- 价格变动事件
- 交易完成事件
- 市场状态事件
- 风险预警事件
各个组件订阅关注的事件并作出响应
4、虚拟机风格
虚拟机分格:
- 提供一个抽象层,模拟另一个计算环境
- 将平台相关的实现细节与应用逻辑分离
- 支持跨平台运行
- 提供统一的执行环境
- 解释器:包含一个解释引擎,解释代码的存储区,记录解释引擎状态的数据结构,记录解释进度的数据结构,内含一个虚拟机,仿真硬件的执行过程。缺点是效率低
- 基于规则的系统:包含规则集、规则解释器、规则/数据选择器和工作内存。一般用在人工智能和DSS(决策支持)中。

1、解释器
特点:
- 包含解释引擎
- 动态执行代码
- 逐条解释执行
- 提供运行时环境
组成部分:
- 解释引擎(执行核心)
- 代码存储区
- 状态数据结构
- 进度跟踪结构
- 虚拟机实现
应用场景:
- 编程语言虚拟机(如JVM、Python解释器)
- 脚本语言执行器
- 浏览器JavaScript引擎
- 模拟器和仿真器
实际例子:
Java虚拟机(JVM)架构:
- 类加载器
- 运行时数据区
- 执行引擎
- 本地接口
优缺点:
优点:
- 平台独立性好
- 灵活性高
- 安全性好
- 便于调试
缺点:
- 执行效率较低
- 资源消耗较大
- 启动时间较长
2、规则系统
特点:
- 规则驱动
- 知识与控制分离
- 支持动态决策
- 易于维护和扩展
核心组件:
- 规则集(Rule Base)
- 存储业务规则
- 定义处理逻辑
- 规则解释器(Rule Interpreter)
- 解释规则
- 执行规则逻辑
- 规则/数据选择器(Selector)
- 选择适用规则
- 处理规则冲突
- 工作内存(Working Memory)
- 存储当前状态
- 临时数据存储
应用场景:
- 决策支持系统(DSS)
- 专家系统
- 人工智能应用
- 业务规则引擎
- 智能推荐系统
实际应用例子:
保险理赔系统:
规则集:
- 理赔条件规则
- 金额计算规则
- 风险评估规则
工作内存:
- 客户信息
- 保单数据
- 理赔状态
架构特点比较
| 特性 | 解释器 | 基于规则的系统 |
|---|---|---|
| 执行方式 | 逐条解释 | 规则匹配驱动 |
| 适用场景 | 通用计算 | 决策逻辑 |
| 性能特点 | 较慢 | 依赖规则复杂度 |
| 灵活性 | 中等 | 很高 |
使用解释器风格当:
- 需要跨平台运行
- 需要动态执行代码
- 安全性要求高
- 开发灵活性重要
使用规则系统当:
- 业务规则频繁变化
- 需要复杂决策逻辑
- 需要知识工程支持
- 需要专家系统功能
5、数据中心风格
数据中心结构风格
- 仓库架构风格:仓库是存储和 维护数据的中心场所。两种构件:中央数据结构+一组对中央数据进行操作的独立构件。
- 黑板架构风格:解决复杂的非结构化问题,包括知识元、黑板、控制3部分;黑板是一个全局数据库
现在编译器的继承开发一般采用数据仓库架构风格。其中心数据就是程序的语法树。

数据中心风格的基本特点:
- 以数据为核心
- 数据与处理分离
- 支持多个处理组件并行操作
- 适合数据密集型应用
- 良好的数据一致性
1、仓库架构
特点:
- 中央数据存储
- 独立操作组件
- 数据持久化
- 组件间松耦合
组成部分:
- 中央数据结构
- 数据存储
- 数据模型
- 一致性控制
- 独立操作组件
- 数据处理单元
- 业务逻辑实现
- 数据访问接口
应用场景:
- 数据库管理系统
- 代码管理系统
- 配置管理系统
- 现代编译器(语法树处理)
实际应用例子:
编译器系统:
中央数据结构:
- 语法树
- 符号表
- 中间代码
操作组件:
- 词法分析器
- 语法分析器
- 语义分析器
- 代码生成器
2、黑板架构
特点:
- 适合复杂问题求解
- 支持多种解决策略
- 动态问题解决过程
- 知识源独立性
核心组件:
黑板(全局数据库)
- 问题状态
- 部分解决方案
- 中间结果
知识源
- 专门的问题解决模块
- 独立的专家系统
- 特定领域知识
控制组件
- 调度策略
- 知识源选择
- 解决过程控制
应用场景:
- 语音识别系统
- 图像理解
- 智能决策支持
- 复杂问题求解
实际应用例子:
智能诊断系统:
黑板:
- 患者症状数据
- 检查结果
- 诊断假设
知识源:
- 症状分析器
- 病因推理器
- 治疗方案生成器
控制器:
- 诊断策略选择
- 知识源调度
比较
- 比较分析:
| 特性 | 仓库架构 | 黑板架构 |
|---|---|---|
| 数据集中度 | 高 | 中 |
| 处理方式 | 独立处理 | 协作处理 |
| 适用场景 | 数据管理 | 问题求解 |
| 扩展性 | 好 | 很好 |
选择仓库架构当:
- 需要中央化数据管理
- 多个组件需要访问同一数据
- 需要保证数据一致性
- 组件相对独立
选择黑板架构当:
- 问题复杂且非结构化
- 需要多种解决策略
- 需要协作式问题解决
- 解决方案不确定
习题
1、视频

1、语义特性
设计
2、C,引入对象管理层会降低性能。
2、视频

1、结果作为输入,是管道过滤器 A
2、C,面向对象不够灵活,黑板支持动态组合和灵活配置、规则系统+解释器属于虚拟机
3、模拟
一、选择题
下列关于数据流风格的描述正确的是( )
A. 主要关注数据的存储
B. 批处理序列是其代表
C. 强调构件间的控制关系
D. 适合实时处理系统
答案:B
解析:数据流风格主要关注数据的传输和处理,批处理序列是其典型代表。
管道-过滤器风格的主要特点是( )
A. 每个过滤器都有固定的输入输出
B. 过滤器之间可以任意连接
C. 过滤器必须同步工作
D. 数据必须双向流动
答案:A
解析:管道-过滤器风格中,每个过滤器都有明确定义的输入和输出接口。
以下哪种架构风格最适合处理大量数据的离线分析任务?( )
A. 事件驱动架构
B. 批处理序列
C. 管道-过滤器
D. 虚拟机架构
答案:B
解析:批处理序列适合处理大量数据的离线分析,如数据仓库ETL过程。
某系统需要实现实时视频流处理,应该选择哪种架构风格?( )
A. 批处理序列
B. 管道-过滤器
C. 黑板架构
D. 主程序-子程序
答案:B
解析:管道-过滤器支持流式处理,适合视频流这类需要实时处理的场景。
操作系统的分层设计采用的是哪种架构风格?( )
A. 数据中心风格
B. 层次结构风格
C. 虚拟机风格
D. 独立构件风格
答案:B
解析:操作系统采用层次结构风格,每层为上层提供服务,使用下层服务。
Java虚拟机(JVM)采用的主要架构风格是( )
A. 解释器风格
B. 层次结构风格
C. 事件驱动风格
D. 管道-过滤器风格
答案:A
解析:JVM使用解释器风格,包含解释引擎和代码存储区等组件。
微服务架构主要采用的是哪种风格?( )
A. 主程序-子程序
B. 独立构件风格
C. 黑板架构
D. 批处理序列
答案:B
解析:微服务架构采用独立构件风格,服务间通过消息传递通信。
二、多选题
以下哪些属于调用-返回风格的特征( )
A. 主程序-子程序
B. 面向对象
C. 分层系统
D. 管道过滤
答案:ABC
解析:调用-返回风格包括主程序-子程序、面向对象和分层系统三种主要形式。
独立构件风格的特点包括( )
A. 构件之间通过数据共享通信
B. 构件可以独立添加或删除
C. 构件之间松耦合
D. 构件必须同步运行
答案:ABC
解析:独立构件风格强调构件的独立性和松耦合性。
下列哪些特征属于管道-过滤器风格?( )
A. 支持流式处理
B. 构件间通过数据流连接
C. 必须等待前一步骤完全结束
D. 支持并行处理
答案:ABD
解析:管道-过滤器支持流式处理、数据流连接和并行处理,但不要求等待前步骤完全结束。
层次结构风格的特点包括( )
A. 每层只能与相邻层交互
B. 修改某层最多影响相邻两层
C. 越底层抽象程度越高
D. 层数越多性能越好
答案:ABC
解析:层次结构的特点是层间交互限制、影响范围有限、抽象程度分布,但层数增加会影响性能。
三、判断题
虚拟机风格适合需要跨平台移植的系统。( )
事件驱动风格中,构件之间必须保持同步。( )
解释器风格只适用于特定领域的问题。( )
答案:
正确。虚拟机风格通过抽象层实现跨平台。
错误。事件驱动风格是异步的。
正确。解释器风格通常用于特定领域语言的解释执行。
事件驱动架构风格适合处理用户界面交互。( )
数据仓库架构中的构件必须同步执行。( )
黑板架构适合解决非结构化问题。( )
答案:
正确。事件驱动适合处理GUI交互。
错误。数据仓库架构的构件可以异步执行。
正确。黑板架构设计用于解决复杂的非结构化问题。
四、匹配题
将架构风格与其特征进行匹配:
A. 数据流风格 1. 异步消息传递
B. 调用返回风格 2. 批处理序列
C. 独立构件风格 3. 层次化结构
D. 虚拟机风格 4. 抽象机器
E. 事件系统风格 5. 松耦合
答案:A-2, B-3, C-5, D-4, E-1
五、简答题
1、请简述管道-过滤器风格的优缺点。
参考答案:
优点:
复用性好
可维护性强
支持并行处理
容易理解和实现
缺点:
可能存在性能开销
不适合交互式应用
数据传输格式要统一
2、比较事件驱动风格和调用-返回风格的区别。
参考答案:
事件驱动风格:
异步通信
松耦合
适合GUI应用
扩展性好
调用-返回风格:
同步通信
紧耦合
控制流清晰
易于理解
七、综合案例题
某在线购物系统需要设计,请:
选择合适的架构风格
说明选择理由
分析可能存在的问题
参考答案:
主要采用分层架构(调用-返回风格)和事件驱动风格相结合
选择理由:
分层架构便于功能划分和维护
事件驱动适合处理用户交互
两种风格结合提高系统灵活性
可能问题:
需要处理异步操作的复杂性
需要平衡层次划分的粒度
需要考虑性能问题
软件架构风格-2
2层cs架构风格
- C就是客户端,S就是服务端
- C/S :客户端和服务端都有处理功能,现在不常用了。原因是:开发成本高,客户端设计复杂,界面不统一,移植困难,安全问题,服务端压力大且难以复用。
- 只有表示层、数据层。

3层CS架构
常用
- 将处理功能独立出来,增加了一个功能层。
- 各层逻辑独立,可以并行开发。

3层BS架构
- 是3层cs结构的变种,将客户端变为用户客户端上的浏览器,将应用服务器变为web服务器,又称为0客户端架构。
- 缺点:动态页面弱、安全差、响应慢。

面相服务的架构风格-SOA
- SOA是一种粗粒度,松耦合的服务架构。服务之间通过接口进行通信,不涉及底层编程接口和通信模型。
- 在SOA中,服务是一种为了满足某项业务需求的操作、规则等的逻辑组合。
- SOA不仅是一种开发方法,管理上也有优点。管理员直接管理开发人员构建的相同服务,多个读物通过企业服务总线提出服务请求,有应用管理来进行处理。
- 服务总线进行转发。

SOA设计原则
- 明确定义的接口
- 自包含和模块化
- 粗粒度
- 松耦合
- 互操作性、兼容和策略声明
基于服务的构建与传统构建的区别:
- 服务构建粗粒度,传统构建细粒度。
- 服务构件的接口是标准的。传统构建以具体的API形式出现。
- 服务构建的实现与语言无关。
- 服务构件通过构建容器提供QOS服务。传统构件由程序代码直接控制

SOA相关的技术
- 与SOA相关的技术有:统一描述、发现和集成(UDDI)、web服务描述语言(WSDL)、简单对象访问协议(SOAP)、表述性状态转移(REST)。都是以XML基础发展起来的。
- UDDI:用于web服务注册和服务查找。
- WSDL:对服务进行描述的语言。描述的重点是服务。
- SOAP:定义服务请求者和服务提供者之间的消息传输规范。SOAP用XML来格式化消息。
- REST:用HTTP和XML进行通信的技术。降低开发的复杂性。


SOA实现的方法
web 服务
3个角色:
- 服务提供者
- 服务请求者
- 服务注册中心(可选)


服务注册表
有一个表,包含配置、依从性、约束文件。

企业服务ESB
有一个服务注册中心(事件总线),可以进一步解耦。
可以充当缓冲器。

软件架构标准-【不重要】

基于架构的软件开发
步骤
6个步骤,
- 需求
- 设计
- 文档化
- 复审:复审不通过就重写设计
- 实现
- 演化:演化完成有新的需求就可以开发下一轮。
【需设文,复实演,复审不过重设计】

详细【记忆】:
- 需求:
需求获取:架构需求分3部分:系统的质量目标、系统的商业目标、系统开发人员的商业目标。
标识构件:为系统生成初始逻辑结构,标识大致的构件。 - 设计:将需求阶段的标识构件映射成构件,进行分析。
- 文档化:产出两种文档:架构规格说明书、测试架构需求的质量设计说明书。
- 复审:由外部人员参与的复审。
- 实现:用实体来显示出架构。实现构件,构件组装成系统。
- 演化:对架构进行变化,按需求增删构件,使架构可以复用。
需求三目标,质量、商业、开发的商业
设计映射构件来分析,
文档两说明,
复审找外帮,
实现组装好,
演化增删构件促复用。


习题
1、模拟
选择题
基于架构的软件开发包含几个步骤?
A. 4步
B. 5步
C. 6步
D. 7步
答案: C
解析: 基于架构的软件开发包含6个步骤:需求、设计、文档化、复审、实现、优化。可以用口诀"需求设计文档化,复审实现再优化"来记忆。
在架构需求阶段,需求获取主要包含哪些方面?
A. 系统的质量目标
B. 系统的商业目标
C. 系统开发人员的商业目标
D. 以上都是
答案: D
解析: 需求获取阶段需要考虑系统的质量目标、商业目标以及开发人员的商业目标等多个维度。可以用"三目标齐并进,架构需求更清晰"来记忆。
二、连线题
1. 需求 • • A. 映射需求构件并分析
2. 设计 • • B. 三目标(质量/商业/开发)
3. 文档化 • • C. 外部人员参与评审
4. 复审 • • D. 构件实现与系统组装
5. 实现 • • E. 两文档(规格/质量)说明
6. 演化 • • F. 增删构件促复用
答案:
1-B: 需求阶段关注三个目标(系统质量目标、系统商业目标、开发人员商业目标)
2-A: 设计阶段将需求阶段识别的构件进行映射和分析
3-E: 文档化阶段产出两个关键文档(架构规格说明书、质量设计说明书)
4-C: 复审阶段需要外部人员参与评审
5-D: 实现阶段进行构件实现和系统组装
6-F: 演化阶段通过增删构件使架构可复用
三、填空题
基于架构的软件开发六个步骤依次是:_、_、_、_、_、_。
答案:需求、设计、文档化、复审、实现、优化
在架构设计阶段,主要是将需求的标识特性转化为_,进行分析。
答案:构件特性
四、简答题
请简述架构文档化阶段的主要工作内容。
参考答案:
架构文档化阶段主要包含:
产出两种文档:架构规格说明书和测试架构需求的质量设计说明书
文档要体现架构设计的完整性
确保文档易于被项目相关人员理解
记忆口诀:"两文档,一完整,易理解,架构美"
架构优化阶段的目的是什么?
参考答案:
架构优化的目的是对架构进行完善,按需求补增部件,使架构可以复用。
记忆口诀:"完善补增求复用,架构优化有保证"
五、案例分析题
某公司准备开发一个电商系统,请运用基于架构的软件开发方法,分析该系统的架构设计过程。
参考答案:
需求阶段:
分析系统质量目标:性能、安全性、可用性
分析商业目标:提升销售额、用户体验
分析开发目标:技术选型、开发效率
设计阶段:
将需求转化为架构特性
设计系统分层架构
确定技术框架
文档化阶段:
编写架构规格说明
编写质量设计说明
确保文档完整性
复审阶段:
由外部人员参与评审
确认架构设计的合理性
实现阶段:
按架构设计实现系统
进行单元测试
优化阶段:
根据实现过程的反馈完善架构
提高架构复用性
记忆口诀:
电商系统要开发,
六步法则不能少。
需求设计要明确,
文档复审莫跳跃。
实现优化两步走,
架构设计不会倒。
六、实战练习
请尝试运用六步法则,设计一个简单的博客系统架构。
分析一个你熟悉的软件系统,它的架构设计是否符合这六个步骤?有哪些可以改进的地方?
软件架构质量属性
软件系统的质量属性分为:开发期质量属性和运行期的质量属性。

架构评估的质量属性-【重要】
- 质量属性,区分属性,区分指标,如何解决优化

- 性能:系统的响应能力,响应事件与处理个数。如响应时间、吞吐量、优化:优先级队列、增加计算资源、减少计算开销、引入并发机制、采用资源调度。
- 可靠性:在错误面前维持基本功能的能力。如:MTTF、MTBF、MTTR。优化:心跳、ping/echo、冗余、选举。
- 可用性:两次故障间恢复正常的时间。如:故障间隔时间。优化:心跳、ping/echo、冗余、选举。
- 安全性:阻止非授权用户使用的能力。如:保密性、完整性、不可抵赖性、可控性。优化:入侵检测、用户认证、用户授权、追踪审计。
- 可修改性:快速以较高的性能价格对系统进行修复的能力,考量代价衡量。优化:接口-实现分类、抽象、信息隐蔽。
- 功能性:系统完成期望工作的能力。
- 可变性:可变更为新体系结构的能力。
- 互操作性:与其他系统进行交互的能力,提供好的接口进行交互。
【性靠用,安全修改功能可变互操作。】
响应的性能靠资源调度
心跳冗余好,可靠又可用
认证授权才安全,
修复修改要抽象隐蔽
功能完成期望是个好孩子
可变为新系统,互操作是其他系统的交互。

质量属性场景

习题
1、视频

性能
资源调度
可用
心跳
安全
追踪审计
2、模拟
选择题
软件架构的质量属性包含几个主要特性?
A. 6个
B. 7个
C. 8个
D. 9个
答案: C
解析: 软件架构质量属性包含8个主要特性:性能、可靠性、安全性、可用性、兼容性、可维护性、功能适用性和可移植性。
下列哪个不属于可靠性的子特性?
A. 成熟性
B. 可用性
C. 容错性
D. 可测试性
答案: D
解析: 可靠性包含成熟性、可用性、容错性和可恢复性四个子特性。可测试性属于可维护性的子特性。
某公司开发一个医疗健康管理系统,该系统需要保证患者隐私数据不被泄露,系统运行稳定且能快速响应。以下哪个质量属性最不相关?
A. 安全性
B. 可靠性
C. 性能效率
D. 可移植性
答案: D
解析: 医疗系统主要关注安全性(数据保密)、可靠性(稳定运行)和性能效率(快速响应),可移植性相对次要。
在线教育平台需要支持多种终端设备访问,且能与其他教学系统进行数据交换,应重点关注哪个质量属性?
A. 可维护性
B. 兼容性
C. 可测试性
D. 可用性
答案: B
解析: 兼容性包含共存性和互操作性,正是多终端支持和系统互通所需要的。
某电商系统在促销活动期间需要处理大量并发请求,以下哪个子特性最重要?
A. 时间特性
B. 资源利用率
C. 容量
D. 可恢复性
答案: C
解析: 容量是性能效率的子特性,直接关系到系统处理大量并发请求的能力。
银行系统要求所有操作都必须可追溯,这主要体现了安全性的哪个子特性?
A. 机密性
B. 完整性
C. 可追责性
D. 真实性
答案: C
解析: 可追责性确保所有操作都可以追溯到具体操作者。
下列哪个不属于可维护性的子特性?
A. 模块性
B. 可重用性
C. 可测试性
D. 可用性
答案: D
解析: 可维护性包括模块性、可重用性、可分析性、可修改性和可测试性,可用性是独立的质量属性。
二、连线题
质量属性 典型应用场景
1. 性能效率 • • A. 系统需要支持不同数据库平台切换
2. 可靠性 • • B. 系统需要提供多语言界面
3. 安全性 • • C. 系统需要处理高并发交易
4. 可用性 • • D. 系统需要防止未授权访问
5. 兼容性 • • E. 系统需要7*24小时运行
6. 可维护性 • • F. 系统代码易于修改和测试
7. 可移植性 • • G. 系统需要与多个外部系统对接
答案:
1-C: 性能效率主要体现在处理高并发能力
2-E: 可靠性保证系统持续稳定运行
3-D: 安全性确保系统访问控制
4-B: 可用性包括界面的易用性和可访问性
5-G: 兼容性体现在系统互操作能力
6-F: 可维护性确保系统易于修改和测试
7-A: 可移植性支持在不同平台间迁移
判断题
可靠性的容错性是指系统在出现故障时能够继续正常运行。
答案: 正确
解析: 容错性是可靠性的重要子特性,确保系统在部分功能失效时仍能维持核心功能运行。
性能效率只关注系统的响应时间。
答案: 错误
解析: 性能效率包括时间特性、资源利用率和容量三个方面。
三、填空题
性能效率包含三个子特性:_、资源利用率和。
答案:时间特性、容量
安全性的五个子特性是:机密性、完整性、_、可追责性和。
答案:不可否认性、真实性
四、判断题
可维护性只关注代码的可修改性。
答案:错误
解析:可维护性包含模块性、可重用性、可分析性、可修改性和可测试性五个方面。
兼容性主要体现在共存性和互操作性两个方面。
答案:正确
解析:兼容性确实包含这两个子特性,共存性指与其他软件共存的能力,互操作性指与其他系统交换并使用信息的能力。
五、案例分析题
某公司正在开发一个在线支付系统,请从质量属性的角度分析该系统应该重点关注哪些特性。
参考答案:
安全性
机密性:保护用户支付信息
完整性:确保交易数据不被篡改
可追责性:记录所有操作日志
记忆口诀:"机密完整可追踪,支付安全有保障"
性能效率
时间特性:快速响应支付请求
资源利用:优化系统资源使用
容量:支持大量并发交易
记忆口诀:"响应快速资源省,容量充足保运行"
可靠性
可用性:系统持续稳定运行
容错性:处理各类异常情况
可恢复性:故障后快速恢复
记忆口诀:"稳定运行能容错,快速恢复保可靠"


被折叠的 条评论
为什么被折叠?



