适用考试 :软考高级 --- 系统架构设计师(案例分析科目) 总结范围:用例图、类图、序列图(时序图)、活动图等核心UML图
一、UML图在架构师考试中的定位
UML建模是系统架构设计师案例分析科目的高频选做题(几乎每年必考1题),主要出现在"软件系统设计"主题中 。
考试形式
- 题型:填空题(挖空补全)、概念辨析、图关系识别、对比分析
- 分值:约占案例分析卷15-25分
- 难度:中等偏易,答案多可从题干描述中抽象得出
历年真题分布
| 年份 | 试题 | 考查UML图类型 | 考查形式 |
|---|---|---|---|
| 2024上 | 试题二 | 序列图、协作图 | 图填空、消息类型识别、条件分支 |
| 2023下 | 试题二 | SysML需求图、用例图 | 关系识别、图对比 |
| 2021下 | 试题二 | 用例图、顺序图 | 对象/消息名称填空、模型对比 |
| 2018下 | 试题二 | 用例图、数据流图、ER图 | 实体识别、用例补全 |
| 2016下 | 试题二 | 用例图、类图 | 参与者识别、用例关系、类关系 |
| 2015下 | 试题二 | 状态图、活动图 | 状态转换、活动流程 |
数据来源:历年案例分析真题考点归纳 [^3^][^17^]
二、核心UML图详解与考点
2.1 用例图(Use Case Diagram)
核心概念
用例图描述一组用例、参与者及它们之间的关系 ,给出系统的静态用例视图。
高频考点
(1)参与者识别
- 参与者是系统外部的触发因素,包括:用户、组织、外部系统、时间(定时任务)
- 识别技巧:找题干中"某人/某系统/定时触发"的描述
(2)用例之间的关系
| 关系类型 | 图示 | 定义 | 典型场景 |
|---|---|---|---|
| 包含关系(include) | <<include>> |
提取公共用例,基础用例必须执行抽象用例 | 多个用例有共同操作步骤 |
| 扩展关系(extend) | <<extend>> |
基本用例在特定条件下扩展出额外行为 | 条件分支场景(如"如果余额不足则...") |
| 泛化关系(generalize) | 空心三角箭头 | 子用例继承父用例的结构和行为 | 多个用例有类似结构和行为 |
(3)用例建模流程
- 识别参与者(必须)
- 合并需求获得用例(必须)
- 细化用例描述(必须)
- 调整用例模型(可选)
真题案例
【2016年案例分析真题】 某在线购物系统,涉及"用户下单"、"用户支付"、"管理员处理订单"等功能。
问题:
- 识别出该系统的主要参与者。
- "用户下单"和"用户支付"都包含"验证用户信息"步骤,应使用什么关系表示?
- "用户支付"在"余额不足"时扩展出"充值"行为,应使用什么关系表示?
答案要点:
- 参与者:用户、管理员、支付系统(外部系统)、时间(定时任务)
- 包含关系(
<<include>>)------ 公共行为提取- 扩展关系(
<<extend>>)------ 条件分支扩展
2.2 类图(Class Diagram)
核心概念
类图描述一组类、接口、协作和它们之间的关系 ,是面向对象系统建模中最常见的图 ,给出系统的静态设计视图。
高频考点
(1)类的组成
- 类名、属性(可见性:
+public /-private /#protected)、方法 - 类的类型:实体类、接口类、控制类
(2)类之间的关系
| 关系类型 | 图示 | 定义 | 记忆口诀 |
|---|---|---|---|
| 依赖关系 | 虚线箭头 | 一个事物变化影响另一个事物 | "A用了一下B" |
| 关联关系 | 实线 | 描述一组链,链是对象之间的连接 | "A和B有关系" |
| 聚合关系 | 空心菱形 + 实线 | 整体与部分,生命周期不同 | "整体没了,部分还在" |
| 组合关系 | 实心菱形 + 实线 | 整体与部分,生命周期相同 | "整体没了,部分也没了" |
| 泛化关系 | 空心三角箭头 | 特殊与一般关系(继承) | "is-a 关系" |
| 实现关系 | 虚线 + 空心三角 | 接口与类之间的关系 | "实现了接口" |
(3)聚合 vs 组合 核心区别
- 聚合:弱整体-部分关系,部分可以独立于整体存在(如:班级和学生,班级解散学生还在)
- 组合:强整体-部分关系,部分不能独立于整体存在(如:人和心脏,人没了心脏也没了)
真题案例
【2016年案例分析真题】 某图书馆管理系统中,"图书馆"包含多个"书架","书架"上放置"图书"。当图书馆关闭时,书架被移除,但图书可以被转移到其他图书馆。
问题:"图书馆"与"书架"、"书架"与"图书"之间分别是什么关系?
答案要点:
- "图书馆"与"书架":组合关系(实心菱形)------ 图书馆关闭,书架随之移除,生命周期相同
- "书架"与"图书":聚合关系(空心菱形)------ 书架移除,图书可转移,生命周期不同
2.3 序列图(Sequence Diagram)/ 时序图
核心概念
序列图是一种交互图 ,展现了一组对象或角色以及它们之间可能发送的消息,强调消息的时间次序 。
高频考点
(1)序列图的组成要素
- 对象/生命线:顶部的对象框和向下的虚线(生命线)
- 激活条:生命线上的窄矩形,表示对象正在执行操作
- 消息:对象之间的水平箭头,表示消息传递
(2)消息的类型
| 消息类型 | 图示 | 定义 |
|---|---|---|
| 同步消息 | 实心三角箭头或实线箭头 | 发送者等待接收者处理完才继续 |
| 异步消息 | 开口箭头或实线箭头 | 发送者不等待,继续执行 |
| 返回消息 | 虚线箭头 | 表示操作的返回值 |
(3)序列图 vs 协作图(通信图)
| 对比维度 | 序列图 | 协作图(通信图) |
|---|---|---|
| 强调重点 | 时间顺序(时序) | 对象结构组织(关系) |
| 时间表达 | 纵轴明确表示时间先后 | 需通过消息编号表示顺序 |
| 对象关系 | 不强调对象间的结构关系 | 强调对象间的链接结构 |
| 适用场景 | 关注交互的时序细节 | 关注对象间的组织结构 |
(4)条件分支与循环
- alt(变体) :if-then-else 建模,有多个操作元,可含
[else]约束 - opt(选择项) :if-then 建模,只有一个操作元,不能 有
[else] - loop(循环):表示重复执行的消息序列
真题案例
【2024年上半年案例分析真题】 某医院预约挂号系统,患者通过系统预约医生号源。系统需验证患者信息,若信息有效则分配号源并发送确认通知;若信息无效则返回错误提示。
问题:
- 完善序列图中的对象(1)及消息(2)~(4)的名称。
- 序列图中的条件分支应使用哪种组合片段表示?
- 简要说明协作图与序列图的区别。
答案要点:
- 对象:患者、预约系统、号源管理系统、通知服务;消息:提交预约请求、验证信息、分配号源、发送确认通知
- alt(变体)组合片段 ------ 因为有"信息有效/无效"两种分支(if-then-else)
- 序列图强调时序,协作图强调对象结构组织;序列图纵轴表示时间,协作图通过消息编号表示顺序
2.4 活动图(Activity Diagram)
核心概念
活动图是一种特殊的状态图 ,将进程或其他计算结构展示为计算内部一步步的控制流和数据流 ,强调对象间的控制流程,支持并行。
高频考点
(1)活动图的核心元素
- 活动节点(动作):圆角矩形,表示执行的动作
- 初始节点:实心圆
- 结束节点:实心圆外圈
- 判断/合并节点:菱形,表示条件分支
- 分叉/汇合节点:粗横线,表示并行流程
(2)活动图 vs 状态图
| 对比维度 | 活动图 | 状态图 |
|---|---|---|
| 节点含义 | 动作/活动 | 状态 |
| 关注焦点 | 控制流和数据流 | 状态转移和事件触发 |
| 适用场景 | 业务流程建模、工作流 | 对象生命周期、反应式系统 |
| 并行支持 | 支持并行(分叉/汇合) | 一般不支持 |
| 本质 | 特殊的状态图 | 标准状态机 |
(3)活动图 vs 流程图
- 活动图支持并行(分叉/汇合),流程图不支持
- 活动图面向对象,流程图面向过程
真题案例
【2015年案例分析真题】 某电商订单处理流程:接收订单 → 验证库存 → 【判断】库存充足?→ 是:分配仓库并通知物流(可并行)→ 更新订单状态 → 结束;否:取消订单并通知用户 → 结束。
问题:
- 该流程适合用哪种UML图描述?
- "分配仓库"和"通知物流"能否并行执行?在图中如何表示?
- 若将此流程与"订单状态转换"建模对比,应分别使用什么图?
答案要点:
- 活动图 ------ 强调控制流和业务流程
- 可以并行,使用分叉节点 (粗横线)将控制流分为两个并行分支,最后用汇合节点合并
- 流程建模用活动图 ;状态转换建模用状态图
2.5 状态图(State Diagram)
核心概念
状态图描述一个状态机 ,由状态、转移、事件和活动组成,给出对象的动态视图 ,强调事件导致的对象行为。
高频考点
(1)状态图的核心元素
- 状态:圆角矩形,表示对象在某一时刻的状况
- 转移:带箭头的线,表示状态之间的变化
- 事件:引起状态转移的触发条件(标注在转移线上)
- 初始状态:实心圆
- 结束状态:实心圆外圈
(2)状态图适用场景
- 对象生命周期建模(如:订单状态、线程状态)
- 反应式系统建模(事件驱动)
- 注意:状态图的节点是"状态",不是"动作"
真题案例
【2015年案例分析真题】 某在线订单的状态包括:待支付、已支付、已发货、已完成、已取消。事件包括:支付成功、发货、确认收货、超时未支付、申请退款。
问题:
- 该场景适合用哪种UML图建模?
- "已支付"状态下,发生"申请退款"事件后转移到什么状态?
- 若需描述订单处理的业务流程(而非状态转换),应使用什么图?
答案要点:
- 状态图 ------ 强调对象状态随事件的转移
- 转移到"退款中"或"已退款"状态(根据具体业务规则)
- 活动图 ------ 状态图关注状态转移,活动图关注业务流程和控制流
三、UML图分类速查表
3.1 按性质分类
| 分类 | 包含的图 | 特点 |
|---|---|---|
| 结构图(静态图) | 类图、对象图、构件图、部署图、包图、组合结构图 | 描述系统的静态结构 |
| 行为图(动态图) | 用例图、状态图、活动图、交互图(序列图、协作图、定时图) | 描述系统的动态行为 |
注:用例图有时也被归为结构图
3.2 常考UML图对比
| UML图 | 静态/动态 | 核心关注点 | 典型应用场景 | 考试频率 |
|---|---|---|---|---|
| 用例图 | 静态 | 系统功能、用户交互 | 需求分析、功能范围界定 | ⭐⭐⭐⭐⭐ |
| 类图 | 静态 | 类结构、类间关系 | 系统设计、数据库建模 | ⭐⭐⭐⭐⭐ |
| 序列图 | 动态 | 消息时序、对象交互 | 详细设计、接口定义 | ⭐⭐⭐⭐⭐ |
| 活动图 | 动态 | 控制流、业务流程 | 工作流、算法流程 | ⭐⭐⭐⭐ |
| 状态图 | 动态 | 状态转换、事件响应 | 对象生命周期、协议设计 | ⭐⭐⭐⭐ |
| 协作图 | 动态 | 对象结构、消息关系 | 与序列图互补 | ⭐⭐⭐ |
| 构件图 | 静态 | 系统实现结构 | 组件设计 | ⭐⭐ |
| 部署图 | 静态 | 物理节点配置 | 系统部署 | ⭐⭐ |
四、面向对象建模三大模型
在系统架构师考试中,常考面向对象方法的三种模型及其关系:
| 模型 | 描述 | 对应UML图 | 适用阶段 |
|---|---|---|---|
| 对象模型 | 描述系统的静态结构,包括类、对象、关系 | 类图、对象图 | 需求分析、设计 |
| 动态模型 | 描述系统的动态行为,包括交互、状态变化 | 序列图、状态图、活动图 | 需求分析、设计 |
| 功能模型 | 描述系统的功能需求,从用户视角看系统功能 | 用例图、数据流图 | 需求分析 |
三者关系:对象模型是基础,动态模型描述对象模型的行为,功能模型说明对象模型和动态模型"做什么"。
五、答题技巧与备考建议
5.1 案例分析答题技巧
- 仔细读题干:UML填空题的答案往往可以直接从题干描述中抽象得出
- 先判断图类型:根据题目描述判断该用哪种UML图(看关键词:"状态"→状态图,"流程/控制流"→活动图,"时序/消息顺序"→序列图)
- 关系辨析 :
- 看到"公共行为提取"→包含关系
- 看到"条件分支扩展"→扩展关系
- 看到"整体-部分,生命周期相同"→组合关系
- 看到"整体-部分,生命周期不同"→聚合关系
- 对比题答题模板:先分别描述两种图的特点,再对比差异点
5.2 备考重点
- 必掌握:用例图(参与者、三种关系)、类图(六种关系)、序列图(消息类型、与协作图区别)、活动图(与状态图区别)
- 常考对比:序列图 vs 协作图、活动图 vs 状态图、聚合 vs 组合
- 真题训练:重点做2016年、2018年、2021年、2024年的UML相关案例分析题
六、综合知识(选择题)UML考点
除案例分析外,UML在上午综合知识科目中也有考查:
- 考法1:给定图示判断属于哪种UML图
- 考法2:给定UML图,判断属于结构图还是行为图
- 考法3:给定UML图,指出相关参数(如类图中的关系类型)
- 考法4:给出UML描述,判断正误。