系统架构下午大题
第一大题必做
二到五题,建议选2,4 或者2,5 作答
软件架构设计师下午案例分析(按题目拆解版)
第一题 系统架构设计与评估(25分)
第一问(12分左右)
很大概率考系统质量效用树
题目会给一个业务场景:
例如:
- 医疗系统
- 电商系统
- 银行系统
- 政务系统
让你构建效用树。
效用树标准结构
Utility ├──性能 │ ├──安全性 │ ├──可用性 │ ├──可修改性 │ ├──易用性 │ └──可测试性必须会写
质量属性
- 性能
- 安全性
- 可用性
- 可修改性
- 易用性
- 可测试性
运行期(系统运行时体现)
性能
安全性
可用性
易用性
开发期(开发维护时体现)
可修改性
可测试性
质量属性场景模板
六要素:
刺激源、刺激、环境、制品、响应、响应度量
6大质量属性场景示例
1. 性能(Performance)
刺激源: 用户 刺激: 1000并发访问 环境: 系统正常运行 制品: 订单系统 响应: 处理请求并返回结果 响应度量: 平均响应时间≤2秒2. 安全性(Security)
刺激源: 黑客 刺激: 非法访问系统 环境: 系统运行中 制品: 用户数据库 响应: 识别并拒绝访问 响应度量: 未发生数据泄露3. 可用性(Availability)
关注系统故障后的恢复能力。
刺激源: 服务器 刺激: 服务器宕机 环境: 系统运行中 制品: 业务系统 响应: 自动切换到备用服务器 响应度量: 5分钟内恢复服务或者:
刺激源: 数据库服务器 刺激: 数据库故障 环境: 高峰期运行 制品: 电商系统 响应: 切换到主备数据库 响应度量: 业务中断时间≤30秒4. 易用性(Usability)
关注用户是否容易使用系统。
刺激源: 新用户 刺激: 首次使用系统 环境: 系统正常运行 制品: 用户界面 响应: 快速完成注册和下单 响应度量: 5分钟内完成操作或者:
刺激源: 普通用户 刺激: 查询订单 环境: 系统运行中 制品: 前端界面 响应: 引导用户完成查询 响应度量: 操作步骤≤3步5. 可修改性(Modifiability)
关注需求变更时修改系统的难易程度。
刺激源: 开发人员 刺激: 新增支付方式 环境: 系统维护阶段 制品: 支付模块 响应: 增加新支付渠道 响应度量: 修改代码量≤5个模块或者:
刺激源: 业务部门 刺激: 新增会员等级规则 环境: 系统升级阶段 制品: 会员管理系统 响应: 完成规则扩展 响应度量: 开发时间≤2天6. 可测试性(Testability)
关注系统是否容易测试。
刺激源: 测试人员 刺激: 执行功能测试 环境: 测试环境 制品: 订单模块 响应: 完成自动化测试 响应度量: 测试覆盖率≥90%或者:
刺激源: 测试工程师 刺激: 执行接口测试 环境: 系统集成测试阶段 制品: 微服务系统 响应: 快速定位问题 响应度量: 缺陷定位时间≤10分钟万能模板
刺激源: 某个生成该刺激的实体 刺激: XXX事件发生 环境: 系统运行中/维护阶段/测试阶段 制品: XXX系统(模块) 响应: 系统采取XXX措施 响应度量: XXX指标达到要求性能、安全性、可用性、可修改性是最常考的四个质量属性
如果是为了软件架构设计师考试(6分),教材上的定义必须会背,但确实比较抽象。
我建议用“谁、在什么情况下、对什么、做了什么、效果如何”来理解六要素。
满分答案(考试版)
质量属性场景用于描述系统在特定条件下对某种刺激的响应方式,是质量属性需求的标准化表达方式。一个完整的质量属性场景由六个要素组成:
1. 刺激源(Source)
产生刺激的实体,即谁发起了该事件。
刺激源可以是:
- 用户
- 外部系统
- 运维人员
- 黑客攻击者
- 硬件设备
例如:用户提交订单、攻击者发起恶意请求。
2. 刺激(Stimulus)
作用于系统的事件或条件,即发生了什么事情。
例如:
- 用户访问系统
- 数据库故障
- 系统并发量激增
- 网络中断
3. 环境(Environment)
刺激发生时系统所处的状态或运行环境。
常见环境:
- 正常运行状态
- 高并发状态
- 故障状态
- 系统维护状态
- 网络异常状态
例如:系统正处于业务高峰期。
4. 制品(Artifact)
受到刺激影响的对象,即刺激作用于系统的哪个部分。
可以是:
- 整个系统
- 数据库
- Web服务器
- 微服务模块
- 缓存组件
例如:订单服务模块。
5. 响应(Response)
系统接收到刺激后采取的行为或处理措施。
例如:
- 返回查询结果
- 自动切换备用节点
- 记录日志
- 拒绝非法访问
- 触发告警
6. 响应度量(Response Measure)
用于衡量响应效果的指标,是判断质量属性是否满足要求的依据。
例如:
- 响应时间 ≤ 2秒
- 系统可用性 ≥ 99.9%
- 故障恢复时间 ≤ 5分钟
- 吞吐量 ≥ 1000TPS
一句话记忆法(考试特别好用)
六要素本质上回答了六个问题:
| 要素 | 回答的问题 |
|---|---|
| 刺激源 | 谁干的? |
| 刺激 | 发生了什么? |
| 环境 | 在什么情况下发生? |
| 制品 | 影响了谁? |
| 响应 | 系统怎么做? |
| 响应度量 | 做得怎么样? |
即:
谁(刺激源)在什么情况下(环境)做了什么事(刺激),作用于什么对象(制品),系统如何处理(响应),处理效果如何衡量(响应度量)。
用一个完整例子理解(性能质量属性)
场景:
在系统运行期间,1000名用户同时访问订单查询功能,订单服务能够在2秒内完成处理并返回结果。
对应六要素:
| 要素 | 内容 |
|---|---|
| 刺激源 | 用户 |
| 刺激 | 1000个并发查询请求 |
| 环境 | 系统正常运行期间 |
| 制品 | 订单查询服务 |
| 响应 | 系统处理请求并返回结果 |
| 响应度量 | 平均响应时间 ≤ 2秒 |
架构师考试阅卷最喜欢的表述
答题时最后补一句:
质量属性场景通过“刺激源、刺激、环境、制品、响应和响应度量”六个要素,对系统质量需求进行结构化描述,使质量属性需求能够被分析、设计、验证和测试。
这句话基本就是标准教材语言,阅卷老师看见就知道你掌握了质量属性场景的核心思想。
考试标准答案可以直接写:
质量属性场景是对质量属性需求的结构化描述,由六个要素组成:
(1)刺激源(Source):产生刺激的实体,如用户、外部系统等。
(2)刺激(Stimulus):作用于系统的事件或条件,如用户请求、系统故障等。
(3)环境(Environment):刺激发生时系统所处的状态,如正常运行、高负载运行等。
(4)制品(Artifact):受到刺激影响的对象,可以是整个系统或系统中的某个组件。
(5)响应(Response):系统接收到刺激后采取的行为或处理措施。
(6)响应度量(Response Measure):用于衡量响应结果的指标,如响应时间、吞吐量、可用性等。
对于架构师考试,我建议记成:
谁 → 干什么 → 什么时候 → 影响谁 → 怎么处理 → 处理得怎么样
对应:
刺激源 → 刺激 → 环境 → 制品 → 响应 → 响应度量
评分点
一般每个场景2分
质量属性名称1分
场景描述1分
第一题 第二问(13分左右)
考法一(出现最多)
架构风格识别
题目会给系统描述
让你回答:
采用什么架构风格
为什么适合
优缺点
必背架构风格
| 架构风格 | 主要特点 | 主要优点 | 主要缺点 | 适合领域 |
|---|---|---|---|---|
| 管道-过滤器风格 | 过滤器相对独立。 | 功能模块复用;可维护性和可扩展性较强;具有并发性;模块独立性高。 | 不适于交互性强的应用,对于存在关系的数据流必须进行协调。 | 系统可划分清晰的模块;模块相对独立;有清晰的模块接口。 |
| 面向对象风格 | 力争实现问题空间和软件系统空间结构的一致性。 | 高度模块化;实现封装;代码共享灵活;易维护;可扩充性好。 | 增加了对象之间的依赖关系。 | 多种领域。 |
| 事件驱动风格 | 系统由若干子系统构成且称为一个整体;系统有统一的目标;子系统有主从之分;每一个子系统有自己的事件收集和处理机制。 | 适合描写系统组;容易实现并发处理和多任务;可扩展性好;具有类层次结构;简化代码。 | 因为树型结构所以削弱了对系统计算的控制能力;各个对象的逻辑关系复杂。 | 一个系统对外部的表现可以从它对事件的处理表现出来。 |
| 分层风格 | 各个层次的组件形成不同功能级别的虚拟机;多层相互协同工作,而且实现透明。 | 支持系统设计过程中的逐级抽象;可扩展性好;支持软件复用。 | 不同层次之间耦合度高的系统很难实现。 | 适合功能层次的抽象和相互之间低耦合的系统。 |
| 数据共享风格 | 采用两个常用构件:中央数据单元和一些相对独立的组件集合。 | 中央数据单元实现了数据的集中,以数据为中心。 | 适合于特定领域。 | 适合于专家系统等人工智能领域问题的求解。 |
| 解释器风格 | 系统核心是虚拟机。 | 可以用多种操作来解释一个句子,灵活应对自定义场景。 | 适合于特定领域。 | 适合于模式匹配系统与语言编译器。 |
| 闭环控制风格 | 通过不断的测量被控对象,认识和掌握被控对象;将控制理论引入体系结构构建。 | 将控制理论引入到计算机软件体系结构中。 | 适合于特定领域。 | 该系统中一定存在有目标的作用、信息处理闭环控制过程。 |
| 架构风格 | 关键词 |
|---|---|
| 管道-过滤器 | 数据流、流水线 |
| 面向对象 | 封装、继承、多态 |
| 事件驱动 | 发布订阅、消息通知 |
| 分层 | MVC、三层架构 |
| 数据共享 | 数据中心、黑板模型 |
| 解释器 | DSL、编译器、规则引擎 |
| 闭环控制 | 反馈控制、自动调节 |
典型案例对应
管道-过滤器:编译器(词法分析→语法分析→语义分析→代码生成)
面向对象:ERP、OA、电商系统
事件驱动:RocketMQ、Kafka、GUI事件处理
分层架构:Spring Boot 三层架构(Controller → Service → DAO)
数据共享风格:专家系统、知识库系统
解释器风格:SQL解释器、正则表达式引擎、规则引擎
闭环控制风格:自动驾驶、温控系统、工业控制系统
软考案例分析最喜欢考的通常是:
分层架构、事件驱动、管道-过滤器、面向对象,这四种需要重点掌握。
建议熟记下面这篇博文 八、软考-系统架构设计师笔记-系统质量属性和架构评估:
https://blog.csdn.net/qq_37883866/article/details/136590430
第二题 结构化分析设计 or 面向对象分析设计(25分)
推荐必选。
常考:
ER 图、数据流图(DFD) 和 UML 图
| 对比项 | UML 类图 | ER 图 |
|---|---|---|
| 全称 | Unified Modeling Language | Entity-Relationship Diagram |
| 主要用途 | 面向对象分析与设计 | 数据库概念设计 |
| 建模对象 | 类(Class) | 实体(Entity) |
| 属性 | 类属性 | 实体属性 |
| 方法 | 有方法(操作) | 无方法 |
| 关系 | 关联、聚合、组合、继承、依赖等 | 联系(1:1、1:N、M:N) |
| 关注重点 | 系统结构与行为 | 数据结构与数据关系 |
| 面向思想 | 面向对象 | 面向数据 |
| 最终产物 | 类设计、代码实现 | 数据库表设计 |
– 主要分为下面三大类:
① 结构化分析与设计
DFD、数据字典、结构化设计、模块结构图、变换分析、事务分析
② 面向对象分析与设计
UML、用例图、类图、时序图、状态图、活动图……
③ 数据库设计
E-R图、关系模式、规范化、事务、数据库设计
第一问(9分)
数据流图DFD补图 UML 用例图 顺序图 活动图 状态图
设计模式的识别
必考元素
外部实体
方框加工
圆形数据流
箭头数据存储
双平行线数据平衡原则
高频考点
父图输入=子图输入 父图输出=子图输出常见错误
新增输入
新增输出
遗漏数据流
第二问(9分)
ER图补图
必考
实体
属性
联系
联系类型
1:1 1:N M:N高频考点
M:N转化
例如:
学生 课程必须变成:
学生 选课 课程主键
必须唯一
不能为空
第三问(7分)
数据字典
四个组成
数据项 数据结构 数据流 数据存储各阶段作用
需求分析:
统一数据定义概要设计:
数据库设计依据详细设计:
程序设计依据维护阶段:
数据参考标准第三题 嵌入式系统(25分)
一般不推荐。
第一问
实时操作系统
RTOS特点
实时性 可靠性 确定性第二问
任务调度
常考
抢占式 非抢占式第三问
中断
必须会:
中断响应 中断处理 中断返回第四题 软件体系结构设计&数据库(25分)
推荐。
第一问
Web系统架构
经典答案:
表现层 业务层 数据层或者
前端层 网关层 服务层 数据库层第二问
Redis
近5年非常高频。
缓存穿透
请求不存在的数据解决:
布隆过滤器 缓存空值缓存击穿
热点Key失效解决:
互斥锁 永不过期缓存雪崩
大量缓存同时失效解决:
随机过期 多级缓存第三问
负载均衡
常见:
Nginx LVS HAProxy作用:
提高并发 提高可用性 故障转移数据库 主从复制、分库分表、负载均衡、 四大属性ACID
参考文章:
https://deepjava.blog.csdn.net/article/details/163759483?spm=1011.2415.3001.5331
第五题 中间件与新技术&Web应用& AI相关技术(25分)
推荐。
第一问
架构图分析
考察:
模块职责 调用关系 部署关系第二问
MongoDB
特点:
文档数据库 Schema灵活 水平扩展第三问
ES
高频答案:
倒排索引 全文检索 分布式搜索近年新增热点
Kafka
发布订阅 削峰填谷 异步解耦微服务
服务拆分 独立部署 去中心化考前一天只看这张表
| 题目 | 必背内容 |
|---|---|
| 第一题 | 效用树、质量属性场景6要素、架构风格 |
| 第二题 | DFD、数据平衡、ER图、数据字典 |
| 第三题 | RTOS、中断、任务调度 |
| 第四题 | Web分层、Redis三大问题、负载均衡 |
| 第五题 | 架构图、MongoDB、ES、Kafka、微服务 |
如果目标是45分通过下午案例,实际上最值得投入时间的是:
第一题(必须拿15+) + 第二题(拿15+) + 第四题或第五题(拿15+)
这是目前通过率最高的答题路线。
且第一题快速做掉,剩余题目快速读问题,选做自己擅长的两个做。
列条目回答问题,把自己认为对的,都写上,多写不会扣分,少写一定会扣分。