12、软件架构设计

软件架构概述

架构背景与目的、定义、作用

  • 在软件需求和设计之间存在一条很难逾越的鸿沟,从而很难有效的将需求转换为相应的设计,从而设计出软件架构,目的是在软件需求与设计之间建立桥梁,解决系统结构和需求想实现平摊过度的问题
  • 【口诀:"架构搭桥梁,需求到设计"

  • 软件架构定义:软件架构为系统提供了一个结构、行为和属性的高级抽象,由构件的描述,构
  • 件的相互作用(连接件),指导构件集成的模式以及这些模式的约束组成。
  • 【定义-口诀:结构行为属性高抽象、构件描述相作用、指导构件模式与约束。】

  • 软件架构指定了系统的组织结构和拓扑结构,并且显示了系统需求和构件之间的对应关系,提供了一些设计决策的基本原理。
  • 【作用-口诀:架构桥梁五作用:跨鸿沟、做抽象、定结构、对需求、给原理】

习题

1、模拟
1、简述软件架构在需求分析和设计之间起到的桥梁作用。

参考答案:

软件架构的桥梁作用主要体现在:

1) 解决了需求和设计之间的鸿沟问题

2) 提供了系统的高级抽象

3) 指定了系统的组织结构和拓扑结构

4) 显示了系统需求和构件之间的对应关系

5) 提供了设计决策的基本原理

口诀:"架构桥梁五作用:跨鸿沟、做抽象、定结构、对需求、给原理"

2、软件架构为系统提供了一个__的高级抽象,由_、_、指导构件集成的模式以及这些模式的约束组成。

答案:1、结构、行为和属性
2、构件的描述、构件的相互作用(连接件)

软件架构建模

4个阶段与5个模型

  • 软件架构发展的4个阶段
  1. 无架构设计阶段:汇编语言
  2. 萌芽阶段:以控制流图、数据流图(结构化设计)构成软件结构的特征
  3. 初级阶段:不同侧面描述系统的结构模型,以UML为典型代表。
  4. 高级阶段:描述系统的高层抽象结构为中心,不关心具体的建模细节,划分了架构模型与传统结构的界限。以4+1模型为标志。

【口诀:无萌初高四阶段,汇编(控制、数据)流图UML,4+1走向高】

  • 软件架构的5种模型
  1. 结构模型:直观且普遍的建模方法,以构件、连接件和其他干练刻画架构,通过架构反映系统的重要语义内容,包括系统的配置、约束、隐含的假设条件、风格和性质能,研究结构模型的核心是架构描述语言。
  2. 框架模型:与结构模型类似,但是他不太侧重描述结构的细节而是侧重整体结构。框架模型主要以一些特殊的问题为目标建立只针对特定问题的架构
  3. 动态模型:对结构模型或框架模型的补充,研究系统的粗粒度行为性质。例如描述系统的重新配置,这类系统通常师激励性的,
  4. 过程模型:研究构建系统的步骤和过程。
  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中称为部署视图,关注软件到硬件的映射。

口诀:"物理即部署,软硬映射配"

二、多选题
  1. 关于进程视图的描述,正确的有:

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)

  1. 各风格的比较:
风格优点缺点适用场景
主程序/子程序简单直观,容易理解灵活性较差,代码重用有限简单的顺序处理程序
面向对象重用性好,扩展性强设计复杂,可能过度设计复杂的交互系统
层次结构关注点分离,易于维护性能开销,可能过度分层大型企业级应用
  1. 选择建议:
  • 如果是简单的数据处理程序,选择主程序/子程序风格
  • 如果是需要大量对象交互的系统,选择面向对象风格
  • 如果是复杂的企业级应用,选择层次结构风格
  • 在实际应用中,这三种风格常常会结合使用

3、独立构件风格

【大型复杂的分布式系统、良好的扩展和维护】

  • 独立架构分为:进程通信、事件驱动系统
  • 进程通信:构件是独立的进程,连接件是消息传递。消息传递有点对点,异步、同步、以及远程调用。
  • 事件驱动:也就是消息队列,事件触发

  • 独立架构的优点:软件复用提供强大支持,维护方便
  • 缺点:放弃了对系统计算的控制。

独立构件风格的主要特点:

  • 构件之间相互独立
  • 松耦合设计
  • 支持分布式部署
  • 高度模块化
  • 良好的可扩展性

优缺点分析:

优点:

  • 强大的软件复用能力
  • 维护和升级方便
  • 系统扩展性好
  • 支持分布式部署
  • 故障隔离性好

缺点:

  • 放弃了对系统计算的直接控制
  • 系统行为预测较难
  • 可能存在性能开销
  • 调试和测试相对复杂
  • 系统一致性维护困难

选择建议:

应选择独立构件风格的场景:

  • 需要高度模块化的系统
  • 大型复杂的分布式系统设计
  • 需要良好扩展性的系统
  • 对系统可维护性要求高
  • 需要支持动态更新的系统

不建议使用的场景:

  • 实时性要求极高的系统
  • 资源受限的嵌入式系统
  • 需要严格控制计算过程的场景
  • 简单的单体应用


1、进程通信

特点:

  • 构件是独立的进程
  • 通过消息传递进行通信
  • 支持多种通信模式
  • 进程间相互独立运行

通信方式:

  1. 点对点通信
  1. 异步通信
  1. 同步通信
  1. 远程过程调用(RPC)

应用场景:

  • 分布式系统
  • 微服务架构
  • 操作系统
  • 并行计算系统
  • 大型分布式应用

实际应用例子:

微服务系统:
- 用户服务进程
- 订单服务进程
- 支付服务进程
- 库存服务进程
它们通过消息队列或RPC相互通信

2、事件驱动系统

特点:

  • 基于事件触发
  • 构件通过事件注册和监听
  • 支持异步处理
  • 松散耦合
  • 高度可扩展

事件处理机制:

  1. 事件发布/订阅
  1. 事件队列
  1. 事件处理器
  1. 事件总线

应用场景:

  • GUI应用程序
  • 实时监控系统
  • 消息中间件
  • 网络服务器
  • IoT应用

实际应用例子:

股票交易系统:
- 价格变动事件
- 交易完成事件
- 市场状态事件
- 风险预警事件
各个组件订阅关注的事件并作出响应

4、虚拟机风格

虚拟机分格:

  • 提供一个抽象层,模拟另一个计算环境
  • 将平台相关的实现细节与应用逻辑分离
  • 支持跨平台运行
  • 提供统一的执行环境

  • 解释器:包含一个解释引擎,解释代码的存储区,记录解释引擎状态的数据结构,记录解释进度的数据结构,内含一个虚拟机,仿真硬件的执行过程。缺点是效率低
  • 基于规则的系统:包含规则集、规则解释器、规则/数据选择器和工作内存。一般用在人工智能和DSS(决策支持)中

1、解释器

特点:

  • 包含解释引擎
  • 动态执行代码
  • 逐条解释执行
  • 提供运行时环境

组成部分:

  1. 解释引擎(执行核心)
  1. 代码存储区
  1. 状态数据结构
  1. 进度跟踪结构
  1. 虚拟机实现

应用场景:

  • 编程语言虚拟机(如JVM、Python解释器)
  • 脚本语言执行器
  • 浏览器JavaScript引擎
  • 模拟器和仿真器

实际例子:

Java虚拟机(JVM)架构:
- 类加载器
- 运行时数据区
- 执行引擎
- 本地接口

优缺点:

优点:

  • 平台独立性好
  • 灵活性高
  • 安全性好
  • 便于调试

缺点:

  • 执行效率较低
  • 资源消耗较大
  • 启动时间较长

2、规则系统

特点:

  • 规则驱动
  • 知识与控制分离
  • 支持动态决策
  • 易于维护和扩展

核心组件:

  1. 规则集(Rule Base)
  • 存储业务规则
  • 定义处理逻辑
  1. 规则解释器(Rule Interpreter)
  • 解释规则
  • 执行规则逻辑
  1. 规则/数据选择器(Selector)
  • 选择适用规则
  • 处理规则冲突
  1. 工作内存(Working Memory)
  • 存储当前状态
  • 临时数据存储

应用场景:

  • 决策支持系统(DSS)
  • 专家系统
  • 人工智能应用
  • 业务规则引擎
  • 智能推荐系统

实际应用例子:

保险理赔系统:
规则集:
  - 理赔条件规则
  - 金额计算规则
  - 风险评估规则
工作内存:
  - 客户信息
  - 保单数据
  - 理赔状态

架构特点比较

特性解释器基于规则的系统
执行方式逐条解释规则匹配驱动
适用场景通用计算决策逻辑
性能特点较慢依赖规则复杂度
灵活性中等很高

使用解释器风格当:

  • 需要跨平台运行
  • 需要动态执行代码
  • 安全性要求高
  • 开发灵活性重要

使用规则系统当:

  • 业务规则频繁变化
  • 需要复杂决策逻辑
  • 需要知识工程支持
  • 需要专家系统功能


5、数据中心风格

数据中心结构风格

  1. 仓库架构风格:仓库是存储和 维护数据的中心场所。两种构件:中央数据结构+一组对中央数据进行操作的独立构件。 
  2. 黑板架构风格:解决复杂的非结构化问题,包括知识元、黑板、控制3部分;黑板是一个全局数据库

现在编译器的继承开发一般采用数据仓库架构风格。其中心数据就是程序的语法树。


数据中心风格的基本特点:

  • 以数据为核心
  • 数据与处理分离
  • 支持多个处理组件并行操作
  • 适合数据密集型应用
  • 良好的数据一致性

1、仓库架构

特点:

  • 中央数据存储
  • 独立操作组件
  • 数据持久化
  • 组件间松耦合

组成部分:

  1. 中央数据结构
  • 数据存储
  • 数据模型
  • 一致性控制
  1. 独立操作组件
  • 数据处理单元
  • 业务逻辑实现
  • 数据访问接口

应用场景:

  • 数据库管理系统
  • 代码管理系统
  • 配置管理系统
  • 现代编译器(语法树处理)

实际应用例子:

编译器系统:
中央数据结构:
  - 语法树
  - 符号表
  - 中间代码

操作组件:
  - 词法分析器
  - 语法分析器
  - 语义分析器
  - 代码生成器

2、黑板架构

特点:

  • 适合复杂问题求解
  • 支持多种解决策略
  • 动态问题解决过程
  • 知识源独立性

核心组件:

黑板(全局数据库)

  • 问题状态
  • 部分解决方案
  • 中间结果

知识源

  • 专门的问题解决模块
  • 独立的专家系统
  • 特定领域知识

控制组件

  • 调度策略
  • 知识源选择
  • 解决过程控制

应用场景:

  • 语音识别系统
  • 图像理解
  • 智能决策支持
  • 复杂问题求解

实际应用例子:

智能诊断系统:
黑板:
  - 患者症状数据
  - 检查结果
  - 诊断假设

知识源:
  - 症状分析器
  - 病因推理器
  - 治疗方案生成器

控制器:
  - 诊断策略选择
  - 知识源调度

比较

  1. 比较分析:
特性仓库架构黑板架构
数据集中度
处理方式独立处理协作处理
适用场景数据管理问题求解
扩展性很好

选择仓库架构当:

  • 需要中央化数据管理
  • 多个组件需要访问同一数据
  • 需要保证数据一致性
  • 组件相对独立

选择黑板架构当:

  • 问题复杂且非结构化
  • 需要多种解决策略
  • 需要协作式问题解决
  • 解决方案不确定

    习题

    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设计原则

    1. 明确定义的接口
    2. 自包含和模块化
    3. 粗粒度
    4. 松耦合
    5. 互操作性、兼容和策略声明

    基于服务的构建与传统构建的区别:

    1. 服务构建粗粒度,传统构建细粒度。
    2. 服务构件的接口是标准的。传统构建以具体的API形式出现。
    3. 服务构建的实现与语言无关。
    4. 服务构件通过构建容器提供QOS服务。传统构件由程序代码直接控制

    SOA相关的技术

    • 与SOA相关的技术有:统一描述、发现和集成(UDDI)、web服务描述语言(WSDL)、简单对象访问协议(SOAP)、表述性状态转移(REST)。都是以XML基础发展起来的。

    1. UDDI:用于web服务注册和服务查找。
    2. WSDL:对服务进行描述的语言。描述的重点是服务。
    3. SOAP:定义服务请求者和服务提供者之间的消息传输规范。SOAP用XML来格式化消息。
    4. REST:用HTTP和XML进行通信的技术。降低开发的复杂性。

    SOA实现的方法

    web 服务

    3个角色:

    1. 服务提供者
    2. 服务请求者
    3. 服务注册中心(可选)

    服务注册表

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

    企业服务ESB

    有一个服务注册中心(事件总线),可以进一步解耦。

    可以充当缓冲器。

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

    基于架构的软件开发

    步骤

    6个步骤,

    1. 需求
    2. 设计
    3. 文档化
    4. 复审:复审不通过就重写设计
    5. 实现
    6. 演化:演化完成有新的需求就可以开发下一轮。

    【需设文,复实演,复审不过重设计】

    详细【记忆】:

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

    需求三目标,质量、商业、开发的商业
    设计映射构件来分析,
    文档两说明,
    复审找外帮,
    实现组装好,
    演化增删构件促复用。

    习题

    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: 演化阶段通过增删构件使架构可复用
    
    
    三、填空题
    基于架构的软件开发六个步骤依次是:_、_、_、_、_、_。
    答案:需求、设计、文档化、复审、实现、优化
    
    在架构设计阶段,主要是将需求的标识特性转化为_,进行分析。
    答案:构件特性
    
    四、简答题
    
    请简述架构文档化阶段的主要工作内容。
    参考答案:
    架构文档化阶段主要包含:
    产出两种文档:架构规格说明书和测试架构需求的质量设计说明书
    文档要体现架构设计的完整性
    确保文档易于被项目相关人员理解
    记忆口诀:"两文档,一完整,易理解,架构美"
    
    架构优化阶段的目的是什么?
    参考答案:
    架构优化的目的是对架构进行完善,按需求补增部件,使架构可以复用。
    记忆口诀:"完善补增求复用,架构优化有保证"
    
    
    五、案例分析题
    
    某公司准备开发一个电商系统,请运用基于架构的软件开发方法,分析该系统的架构设计过程。
    
    参考答案:
    
    需求阶段:
    分析系统质量目标:性能、安全性、可用性
    分析商业目标:提升销售额、用户体验
    分析开发目标:技术选型、开发效率
    
    设计阶段:
    将需求转化为架构特性
    设计系统分层架构
    确定技术框架
    
    文档化阶段:
    编写架构规格说明
    编写质量设计说明
    确保文档完整性
    
    复审阶段:
    由外部人员参与评审
    确认架构设计的合理性
    
    实现阶段:
    按架构设计实现系统
    进行单元测试
    
    优化阶段:
    根据实现过程的反馈完善架构
    提高架构复用性
    
    记忆口诀:
    
    电商系统要开发,
    六步法则不能少。
    需求设计要明确,
    文档复审莫跳跃。
    实现优化两步走,
    架构设计不会倒。
    
    六、实战练习
    请尝试运用六步法则,设计一个简单的博客系统架构。
    分析一个你熟悉的软件系统,它的架构设计是否符合这六个步骤?有哪些可以改进的地方?

    软件架构质量属性

    软件系统的质量属性分为:开发期质量属性和运行期的质量属性

    架构评估的质量属性-【重要】

    • 质量属性,区分属性,区分指标,如何解决优化

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

    【性靠用,安全修改功能可变互操作。】

    响应的性能靠资源调度
    心跳冗余好,可靠又可用
    认证授权才安全,
    修复修改要抽象隐蔽
    功能完成期望是个好孩子
    可变为新系统,互操作是其他系统的交互。

     

    质量属性场景

    习题

    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: 可移植性支持在不同平台间迁移
    
    
    
    
    
    判断题
    可靠性的容错性是指系统在出现故障时能够继续正常运行。
    答案: 正确
    解析: 容错性是可靠性的重要子特性,确保系统在部分功能失效时仍能维持核心功能运行。
    
    性能效率只关注系统的响应时间。
    答案: 错误
    解析: 性能效率包括时间特性、资源利用率和容量三个方面。
    
    
    
    三、填空题
    性能效率包含三个子特性:_、资源利用率和。
    答案:时间特性、容量
    
    安全性的五个子特性是:机密性、完整性、_、可追责性和。
    答案:不可否认性、真实性
    
    四、判断题
    可维护性只关注代码的可修改性。
    答案:错误
    解析:可维护性包含模块性、可重用性、可分析性、可修改性和可测试性五个方面。
    
    兼容性主要体现在共存性和互操作性两个方面。
    答案:正确
    解析:兼容性确实包含这两个子特性,共存性指与其他软件共存的能力,互操作性指与其他系统交换并使用信息的能力。
    
    五、案例分析题
    某公司正在开发一个在线支付系统,请从质量属性的角度分析该系统应该重点关注哪些特性。
    参考答案:
    安全性
    机密性:保护用户支付信息
    完整性:确保交易数据不被篡改
    可追责性:记录所有操作日志
    记忆口诀:"机密完整可追踪,支付安全有保障"
    性能效率
    时间特性:快速响应支付请求
    资源利用:优化系统资源使用
    容量:支持大量并发交易
    记忆口诀:"响应快速资源省,容量充足保运行"
    可靠性
    可用性:系统持续稳定运行
    容错性:处理各类异常情况
    可恢复性:故障后快速恢复
    记忆口诀:"稳定运行能容错,快速恢复保可靠"
    

    END

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值