# 期末重要知识点速记 > **课程**:软件需求分析与设计 | **总分**:选择30 + 填空15 + 解答25 + 案例30 = 100分 > **成绩构成**:平时40% + 期末60%(平时作业和实验截止前还可补交) --- ## 🎯 一、试卷结构与分值分布 ### 1.1 题型总览 | 题型 | 数量 | 分值 | 说明 | |------|------|------|------| | 选择题 | 15题 × 2分 | **30分** | 重点刷教材课后有答案的题目 | | 填空题 | 15空 × 1分 | **15分** | 各章基本概念和理论知识 | | 解答题 | 5题 × 5分 | **25分** | ⚠️ 只考读图分析,不考画图 | | 案例大题 | 2~3题 | **30分** | ⚠️ 给出需求描述,动手画图 | ### 1.2 各章分值权重(按比例分配复习时间!) | 章节 | 分值 | 权重 | 复习优先级 | |------|------|------|------------| | 需求管理 | **13分** | ★★★★ | 选择填空为主,含一道解答简答题 | | 用例图 | **22分** | ★★★★★ | 读图分析 + 画图大题必考 | | 类图 | **23分** | ★★★★★ | 读图分析 + 画图大题必考 | | 顺序图与协作图 | **19分** | ★★★★★ | 读图分析 + 画图大题必考 | | 状态图与活动图 | **14分** | ★★★★ | 读图分析 + 选考画图 | | 组件图与部署图 | **7分** | ★★ | ⚠️ 仅出选择题和填空题 | | RUP统一过程 | **2分** | ★ | ⚠️ 仅出1个选择或填空 | --- ## 📋 二、解答题 5 道详细拆解 ### 第1题:用例图分析(5分) **考点**:给一幅用例图,分析: - 参与者之间是什么关系?(泛化关系) - 用例之间的关系(包含 `<>` / 扩展 `<>` / 泛化) - 识别参与者类型、用例描述要素 ### 第2题:类图分析(5分) **考点**:给一幅类图,分析: - 类之间的关系类型(依赖、关联、聚合、组合、泛化、实现) - 识别类的类型(边界类/控制类/实体类) - 多重性含义 ### 第3题:交互图分析(5分) **考点**:给时序图(顺序图)或协作图,分析: - 消息类型(同步调用/异步/返回/简单消息) - 消息传递流程 - **可能要求:协作图 ↔ 时序图互转** ### 第4题:活动图或状态图分析(5分) **考点**:给活动图或状态图,分析流程/状态转移 ### 第5题:简答题(5分)—— 四选一,必考一道! > ⚠️ 老师明确给了四道范围,现在就背! #### Q1:需求的层次有哪些并简述 **答案**: ``` 业务需求(最高层) → 用户需求(中间层) → 系统需求(底层) ├── 功能需求:系统必须提供的功能 ├── 非功能需求:性能、可靠性、安全性等质量属性 └── 领域需求:特定行业领域的规则和约束 ``` - **业务需求**:组织或客户的高层目标,回答"为什么要做这个系统" - **用户需求**:用户使用系统要完成的任务,从用户视角描述 - **系统需求**:详细描述系统必须做什么,包括功能和非功能需求 #### Q2:如何判定优秀需求的特性 **答案**(7大特性): 1. **完整性**:需求描述完整无遗漏 2. **正确性**:真实反映用户需要 3. **无歧义性**:不同人读理解一致 4. **可行性**:技术和资源上可实现 5. **有优先级**:明确需求的轻重缓急 6. **必要性**:是必须的,不是"锦上添花" 7. **可验证性**:能通过测试验证需求是否被满足 #### Q3:需求发生变更时的管理流程 **答案**: ``` 提出变更请求 → 初步分析评估 → CCB(变更控制委员会)评审决策 → 批准后更新需求文档 → 通知所有受影响的相关方 → 调整项目计划和开发任务 → 执行变更 → 验证变更结果 ``` **关键点**:CCB 评审是核心环节,决定变更是否接受;变更后必须重新确认需求。 #### Q4:需求管理应包含的内容 **答案**(三个核心模块): | 模块 | 内容 | |------|------| | **需求确认** | 需求评审 → 获得承诺 → 建立需求基线 | | **需求跟踪** | 建立 RTM(需求跟踪矩阵),正向跟踪(需求→设计→代码→测试)和逆向跟踪 | | **需求变更控制** | 变更申请 → 变更审批 → 执行更改 → 重新确认 | --- ## 🔑 三、各章核心考点速记 ### 需求管理 ★★★★★(约13分) **需求三层金字塔**: ``` 业务需求(老板视角:为什么要做) → 用户需求(用户视角:能干什么) → 系统需求 = 功能需求 + 非功能需求 + 领域需求 ``` | 概念 | 一句话 | |------|--------| | 业务需求 | 组织的高层目标 | | 用户需求 | 用户使用系统完成的任务 | | 功能需求 | 系统必须提供的功能 | | 非功能需求 | 性能/可靠性/安全性等质量属性 | | 领域需求 | 特定行业规则的约束 | **需求工程 = 需求开发 + 需求管理**: - 开发:获取 → 分析 → 定义(规格说明) - 管理:验证 → 跟踪 → 变更控制 **六大获取/验证技术**: 1. 联合分析小组(JAD) 2. 用户访谈 3. 问卷调查 4. 观察工作流程 5. 原型法 6. 文档分析 > 📝 **填空重点**:需求三层 = 业务/用户/系统;获取技术6种;优秀需求7特性;需求变更流程步骤 --- ### 用例图 ★★★★★(约22分,含大题) **四要素**:参与者(火柴人) + 用例(椭圆) + 系统边界(方框) + 关联(连线) **三种关系对比**(必考!): | 关系 | UML标记 | 箭头方向 | 执行时机 | |------|---------|----------|----------| | **包含** `<>` | 虚线+箭头 | **基本 → 包含** | 必然执行 | | **扩展** `<>` | 虚线+箭头 | **扩展 → 基本** | 条件触发时才执行 | | **泛化** | 实线+空心三角 | **子 → 父** | 可单独执行 | > 记忆:包含箭头指向被包含的(基→含),扩展箭头指向被扩展的(扩→基) **参与者三类型**:人、外部系统、外部设备 **用例描述6要素**:用例名、参与者、前置条件、后置条件、主事件流、子事件流(备选流) > 📝 **重点**:三种关系的箭头方向和区别、用例描述要素 --- ### 类图 ★★★★★(约23分,含大题) **六大关系速判口诀**: | 关系 | UML符号 | 口诀 | |------|---------|------| | **依赖** | 虚线箭头 `---->` | "方法参数用了你" | | **关联** | 实线 `——` | "属性里放了你" | | **聚合** | 空心菱形 `◇——` | "整体-部分,部分可独立存活" | | **组合** | 实心菱形 `◆——` | "整体-部分,同生共死" | | **泛化** | 空心三角 `——▷` | "一般-特殊 / 父-子继承" | | **实现** | 虚线空心三角 `----▷` | "接口-实现类" | **多重性速记**:`1` 恰好1 | `0..1` 可选 | `*`/`0..*` 零到多个 | `1..*` 至少1个 **类三要素**:名称、属性、操作 | **可见性**:`+`public `-`private `#`protected **MVC版型**(分析类三类型): - `<>` 边界类:与外部交互的界面 - `<>` 控制类:业务逻辑处理 - `<>` 实体类:持久化数据 **聚合 vs 组合**:聚合整体端多重性可为`*`;组合整体端多重性必须=`1` > 📝 **选择高频**:类间关系判断、多重性含义、版型识别、关联 vs 依赖 --- ### 顺序图与协作图 ★★★★★(约19分,含大题) **顺序图核心元素**:对象(矩形+下划线) + 生命线(虚线) + 控制焦点(矩形条) + 消息(箭头) **四种消息类型**: | 类型 | 箭头 | 特点 | |------|------|------| | 调用消息(同步) | 实心箭头 → | 发送后等待返回 | | 异步消息 | 开放箭头 → | 发送后不等待,继续执行 | | 返回消息 | 虚线箭头 ⇢ | 返回值 | | 简单消息 | 普通箭头 | 不区分同步/异步 | **消息编号嵌套规则**:`1 → 1.1 → 1.1.1`(子消息必须在父消息完成前完成) **协作图 = 顺序图的另一种视角**: - 顺序图强调**时间顺序**(生命线+控制焦点) - 协作图强调**空间关系**(对象间的链+消息序号) - 两者可以互相转换 **⚠️ 画图大题画顺序图的硬性要求**: > 不能画得太简单!必须完整区分并画出: > - **边界类**(界面层,接收用户输入) > - **控制类**(业务逻辑层,协调处理) > - **实体类**(数据层,数据存取) > > 三个层次的对象之间的详细交互都要体现! **主动对象 vs 被动对象**:主动对象拥有进程/线程可主动发起消息;被动对象须被消息触发 > 📝 **重点**:四种消息类型区分、消息编号规则、顺序图与协作图的区别、三层次交互画法 --- ### 状态图与活动图 ★★★★(约14分) **状态图**(管**一个对象**的状态变化): | 元素 | 符号 | |------|------| | 状态 | 圆角矩形(简单/复合/子状态) | | 转移 | 箭头:`事件[条件]/动作` | | 初始状态 | ● 实心圆 | | 终态 | ⊙ 圆圈+实心圆 | | 历史状态 | Hⓗ 圆圈+H | | 并发 | 同步并发转移符号(粗线分叉) | **四种事件类型**:调用事件、信号事件、变化事件、时间事件 **活动图**(管**多对象参与的流程**): | 元素 | 符号 | 用途 | |------|------|------| | 活动 | 圆角矩形 | 流程步骤 | | 分支 | ◇ 菱形 | 条件选择(只走一条) | | 分叉/汇合 | ≡ 粗横线 | 并发执行(多条同时走) | | 泳道 | 纵向分区 | 按职责/参与者分组 | | 对象流 | 虚线箭头 | 数据传输/传递 | **⚠️ 核心区分**: - **状态图** → 一个对象的状态变化 - **活动图** → 多个对象参与的流程 - **分支** → 单路条件选一 - **分叉** → 多路并发 - 活动图的状态转移**不需要事件触发**,上一个活动完成自动进入下一个 > 📝 **选择高频**:状态图vs活动图区分、分支vs分叉、泳道功能 --- ### 组件图与部署图 ★★(约7分,仅选填) **组件图 = 代码层面**: - 三种组件:源代码组件、二进制代码组件、可执行代码组件 - 正向工程:类图→代码 | 逆向工程:代码→类图 **部署图 = 硬件层面**: - 结点(3D立方体)分两种:处理器(有计算能力) / 设备(无计算能力) - 结点可驻留组件实例 > 📝 **填空重点**:组件3种类型;两种物理图名称 --- ### 包图 ★★(选择题) **四大包设计原则**: | 缩写 | 原则 | 一句话 | |------|------|--------| | REP | 重用等价原则 | 一起复用的放一起 | | CCP | 共同闭包原则 | 一起改的放一起 | | CRP | 共同重用原则 | 不一起用的分开 | | ADP | 非循环依赖原则 | 包间不能环状依赖 | --- ### RUP统一软件开发过程 ★(约2分,仅1个选填) **RUP三维特点**:用例驱动 + 以体系结构为中心 + 迭代和增量 **⚠️ 四阶段顺序(易错!)**: ``` 初始(Inception) → 细化(Elaboration) → 构造(Construction) → 移交(Transition) ``` > ❌ 不是"初始→构造→细化→移交"! **9个核心工作流** = 6过程 + 3支持: - 6过程:业务建模、需求、分析与设计、实现、测试、部署 - 3支持:配置管理、项目管理、环境 **六大最佳实践**:迭代增量开发、管理需求、基于构件架构、可视化建模、持续质量验证、控制变更 **RUP的4W**:角色(Who) + 活动(How) + 制品(What) + 工作流(When) > 📝 **选择/填空**:RUP三大特点、四阶段顺序、九个工作流、六大最佳实践 --- ## ⚠️ 四、高频易错易混点 | 易混概念 | 区分 | |----------|------| | **包含 vs 扩展** | 包含箭头基→含(必然执行);扩展箭头扩→基(条件执行) | | **聚合 vs 组合** | 聚合空心◇(部分可独立);组合实心◆(同生共死) | | **关联 vs 依赖** | 关联=属性里放了;依赖=方法参数用了 | | **泛化 vs 实现** | 泛化=父类-子类继承;实现=接口-实现类 | | **调用消息 vs 异步消息** | 调用=同步等待返回;异步=发出后继续 | | **状态图 vs 活动图** | 状态图=一个对象;活动图=多个对象 | | **分支 vs 分叉** | 分支◇=单选一路;分叉≡=多路并发 | | **功能需求 vs 非功能需求** | 功能=做什么;非功能=做多好 | | **RUP四阶段顺序** | 初始→细化→构造→移交(别写反细化/构造!) | | **顺序图 vs 协作图** | 顺序图强调时间;协作图强调空间 | --- ## 🛠️ 五、案例大题画图模板 ### ⚠️ 不考的图 > 组件图、包图、部署图 — 案例大题明确不考! ### 1. 用例图(必考) **4步法**: 1. **找参与者**:从文字中找名词——人、外部系统、设备 2. **找用例**:动宾短语(用户能做的操作) 3. **画包含**:A 必然触发 B → `A ---<>--→ B` 4. **画扩展**:条件触发 C 插入 A → `C ---<>--→ A` ### 2. 类图(必考,尤其实体类图) **4步法**: 1. **提取实体类**:文字中的核心名词(客户、订单、商品...) 2. **标注属性**:每个类的特征数据字段 3. **判断关系**:属性里放了=关联;整体部分=聚合/组合;父子=泛化 4. **标注多重性**:`1` / `0..*` / `1..*` ### 3. 顺序图(必考,拉分关键!) **⚠️ 老师特别要求:不能画得太简单!要体现三层次交互:** ``` ┌─ 边界类层(UI) ─────────────────────────────┐ │ 用户 → 界面: 发起操作() │ │ → 界面 → 控制类: 处理请求() │ ├─ 控制类层(业务逻辑) ─────────────────────────┤ │ → 控制类 → 实体类: 查询数据() │ │ ← 实体类 → 控制类: 返回数据 │ │ → 控制类 → 实体类: 保存结果() │ ├─ 实体类层(数据) ─────────────────────────────┤ │ ← 控制类 → 界面: 返回处理结果 │ │ ← 界面 → 用户: 显示结果 │ └──────────────────────────────────────────────┘ ``` **消息编号规则**:`1 → 1.1 → 1.1.1 → 1.2 → 2` ### 4. 状态图(选考) **要素**:初始● → 关键状态节点(圆角矩形) → 终态 ⊙ - 转移标注:`触发事件[条件]/动作` - 有并发用同步并发转移符号 ### 5. 活动图(选考,带泳道) **要素**:开始● → 活动(圆角矩形) → 分支◇ → 分叉≡ → 汇合≡ → 结束◎ - 泳道按参与者/职责分列 --- ## 🔢 六、关键数字速记(填空高频) | 数字 | 对应内容 | |------|----------| | **3** | 需求三层、用例关系3种、类三要素、可见性3种、数据库设计3阶段、RUP三大特点、参与者3类型、组件3类型、3种分析类(边界/控制/实体) | | **4** | 包设计4原则(REP/CCP/CRP/ADP)、RUP四阶段、事件4类型、消息4类型、RUP的4W | | **6** | 六大获取技术、六大关系、六大最佳实践、用例描述6要素、9工作流=6过程+3支持 | | **7** | 优秀需求7特性 | | **9** | UML 9种图、RUP 9个工作流 | | **N+3** | 9核心工作流 = 6过程 + 3支持 | --- ## 📝 七、考前30分钟自检 - [ ] 4道简答题能默写要点?(稳拿5分!) - [ ] 需求三个层次:业务→用户→系统? - [ ] 用例三种关系箭头方向不混?(包含=基→含,扩展=扩→基) - [ ] 类图六大关系秒判? - [ ] 聚合空心◇ vs 组合实心◆ 不混? - [ ] 调用消息(同步/实心箭头) vs 异步消息(开放箭头) 能区分? - [ ] 消息编号 1 → 1.1 → 1.1.1 嵌套规则? - [ ] 状态图(单对象) vs 活动图(多对象/流程) 区分? - [ ] 分支◇(单选) vs 分叉≡(并发) 不混? - [ ] RUP四阶段顺序:初始→细化→构造→移交? - [ ] 画顺序图能区分边界类/控制类/实体类三层? - [ ] 多重性 `1` `0..1` `*` `1..*` 会读会标? - [ ] 组件图/部署图仅出选填,不用练画图? --- > 📎 **相关笔记**:[[期末复习指南]] | [[课后习题汇编]]