190 lines
5.8 KiB
Markdown
190 lines
5.8 KiB
Markdown
|
|
# 期中考试复习
|
|||
|
|
|
|||
|
|
> **考试**:2022-2023学年第1学期《软件需求分析与设计》期中考试
|
|||
|
|
> **满分**:100分 | 选择题30分 + 系统分析题70分
|
|||
|
|
> **系统场景**:在线酒店订房系统
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📋 试卷结构一览
|
|||
|
|
|
|||
|
|
| 题型 | 题量 | 分值 | 考点 |
|
|||
|
|
|------|------|------|------|
|
|||
|
|
| 选择题 | 15题 | 30分(2分/题) | UML基本概念、关系类型、面向对象特性 |
|
|||
|
|
| 系统分析题 | 7题 | 70分(10分/题) | 7种UML图的实际绘制 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 七道大题逐题详解
|
|||
|
|
|
|||
|
|
### 第1题:用例图(10分)
|
|||
|
|
|
|||
|
|
> 画出在线订房系统的用例图。
|
|||
|
|
|
|||
|
|
**答案要点**:
|
|||
|
|
|
|||
|
|
**参与者(3个)**:客户、管理员、身份信息平台
|
|||
|
|
|
|||
|
|
**用例(10个)**:
|
|||
|
|
- 客户相关:找回密码、注册、身份认证、登录、查询房间、下订单、在线支付
|
|||
|
|
- 管理员相关:登录、房间上线、修改房间信息、房间下线
|
|||
|
|
|
|||
|
|
**关键关系**:
|
|||
|
|
- **包含 `<<include>>`**:注册 → 身份认证;下订单 → 查询房间;在线支付 → 下订单
|
|||
|
|
- **关联**:客户↔找回密码、注册、登录、查询房间、下订单;管理员↔登录、房间上线、修改、下线
|
|||
|
|
- **身份认证 → 身份信息平台**(外部系统交互)
|
|||
|
|
|
|||
|
|
⚠️ **易错**:包含关系箭头从基本用例指向包含用例!
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 第2题:"找回密码"用例描述(10分)
|
|||
|
|
|
|||
|
|
> 写出"找回密码"的完整用例描述。
|
|||
|
|
|
|||
|
|
**参考答案**:
|
|||
|
|
|
|||
|
|
| 项目 | 内容 |
|
|||
|
|
|------|------|
|
|||
|
|
| **用例名** | 找回密码 |
|
|||
|
|
| **参与者** | 客户 |
|
|||
|
|
| **前置条件** | 客户已注册 |
|
|||
|
|
| **基本流程** | ①输入手机号 → ②获取短信验证码 → ③输入验证码 → ④输入新密码(两次) → ⑤两次一致则密码修改成功 |
|
|||
|
|
| **备选流程** | 若两次新密码不一致,提示重新输入 |
|
|||
|
|
| **后置条件** | 密码修改成功,用户可用新密码登录 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 第3题:实体类类图(10分)
|
|||
|
|
|
|||
|
|
> 画出系统的实体类类图,标注多重性。
|
|||
|
|
|
|||
|
|
**答案要点**:
|
|||
|
|
|
|||
|
|
**实体类**:客户(Customer)、房间(Room)、订单(Order)、管理员(Admin)
|
|||
|
|
|
|||
|
|
**关系及多重性**:
|
|||
|
|
```
|
|||
|
|
客户 1 ────── 0..* 订单 (一个客户可以有多个订单)
|
|||
|
|
房间 1 ────── 0..* 订单 (一个房间可以被多次预订)
|
|||
|
|
管理员 0..2 ── 0..* 订单 (管理员处理订单)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 第4题:"找回密码"的基于协作的类图(10分)
|
|||
|
|
|
|||
|
|
> 使用边界类、控制类、实体类画出协作类图。
|
|||
|
|
|
|||
|
|
**答案要点**:
|
|||
|
|
|
|||
|
|
| 版型 | 类名 | 职责 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| <<boundary>> | RetrievePasswordBoundary | 找回密码界面,与用户交互 |
|
|||
|
|
| <<control>> | RetrievePasswordControl | 协调找回密码的业务逻辑 |
|
|||
|
|
| <<interface>> | SMSInterface | 短信接口(外部) |
|
|||
|
|
| <<entity>> | UserInfo | 用户信息(持久化) |
|
|||
|
|
|
|||
|
|
**依赖关系**:
|
|||
|
|
```
|
|||
|
|
Boundary → Control → SMSInterface
|
|||
|
|
→ UserInfo
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 第5题:"找回密码"的顺序图(10分)
|
|||
|
|
|
|||
|
|
> 画出"找回密码"的顺序图,标注消息编号。
|
|||
|
|
|
|||
|
|
**答案要点**:
|
|||
|
|
|
|||
|
|
**对象**:用户、:RetrievePasswordBoundary、:RetrievePasswordControl、:UserInfo、:SMSInterface
|
|||
|
|
|
|||
|
|
**消息序列(核心流程)**:
|
|||
|
|
```
|
|||
|
|
1: 用户 → 边界类 : 找回密码()
|
|||
|
|
1.1: 用户 → 边界类 : 输入手机号
|
|||
|
|
1.1.1: 边界 → 控制 : 获取短信(手机号)
|
|||
|
|
1.1.1.1: 控制 → SMS : 获取短信(手机号)
|
|||
|
|
2: 用户 → 边界类 : 输入验证码
|
|||
|
|
2.1: 边界 → 控制 : 验证(验证码)
|
|||
|
|
2.1.1: 控制 → UserInfo : 验证(验证码)
|
|||
|
|
3: 用户 → 边界类 : 输入(新密码1, 新密码2)
|
|||
|
|
3.1: 边界 → 控制 : 验证一致性(p1, p2)
|
|||
|
|
3.1.1: [一致] 控制 → UserInfo : 写入新密码
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
🔑 **编号规则**:`1` → `1.1` → `1.1.1` 表示嵌套调用,`1.1.1` 必须在 `1.1` 完成之前完成。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 第6题:"订单"的状态图(10分)
|
|||
|
|
|
|||
|
|
> 画出实体类"订单"的状态图。
|
|||
|
|
|
|||
|
|
**答案要点**:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
初始 → 待支付 → 已支付 → 已入住 → 完成
|
|||
|
|
↓ ↓
|
|||
|
|
取消 失效
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
| 转移 | 触发事件 |
|
|||
|
|
|------|----------|
|
|||
|
|
| 初始 → 待支付 | 下单 |
|
|||
|
|
| 待支付 → 取消 | 未支付 |
|
|||
|
|
| 待支付 → 已支付 | 成功支付 |
|
|||
|
|
| 已支付 → 失效 | 超时 |
|
|||
|
|
| 已支付 → 已入住 | 入住 |
|
|||
|
|
| 已入住 → 完成 | 退房 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 第7题:"找回密码"的带泳道活动图(10分)
|
|||
|
|
|
|||
|
|
> 画出"找回密码"的带泳道活动图。
|
|||
|
|
|
|||
|
|
**答案要点**:
|
|||
|
|
|
|||
|
|
**泳道(5条)**:用户 | 找回密码边界类 | 找回密码控制类 | 短信接口 | 用户信息
|
|||
|
|
|
|||
|
|
**活动流程**:
|
|||
|
|
```
|
|||
|
|
用户:开始 → 找回密码 → 输入手机号
|
|||
|
|
↓
|
|||
|
|
控制类 → 短信接口:获取短信验证码 → 返回验证码
|
|||
|
|
↓
|
|||
|
|
用户:输入验证码 → 输入2次新密码
|
|||
|
|
↓
|
|||
|
|
控制类:验证两次密码
|
|||
|
|
├─ [不一致] → 结束
|
|||
|
|
└─ [一致] → 用户信息:写入新密码 → 结束
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📊 七道题的分值分布与重点
|
|||
|
|
|
|||
|
|
| 题号 | 考什么 | 难度 | 必会程度 |
|
|||
|
|
|------|--------|------|----------|
|
|||
|
|
| 1 | 用例图 | ⭐⭐ | ★★★★★ |
|
|||
|
|
| 2 | 用例描述 | ⭐ | ★★★★★ |
|
|||
|
|
| 3 | 类图(实体类) | ⭐⭐ | ★★★★★ |
|
|||
|
|
| 4 | 协作类图(MVC) | ⭐⭐⭐ | ★★★★ |
|
|||
|
|
| 5 | 顺序图(消息编号) | ⭐⭐⭐ | ★★★★ |
|
|||
|
|
| 6 | 状态图 | ⭐⭐ | ★★★★★ |
|
|||
|
|
| 7 | 活动图(带泳道) | ⭐⭐⭐ | ★★★★ |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔑 考前必记要点
|
|||
|
|
|
|||
|
|
1. **包含关系 vs 扩展关系**:包含=必然,扩展=条件。箭头方向不同!
|
|||
|
|
2. **多重性**:`1` `0..1` `0..*` `1..*` 的含义和标注位置
|
|||
|
|
3. **边界类/控制类/实体类**:View/Controller/Model 对应关系
|
|||
|
|
4. **消息编号层级**:`1.1.1` 表示嵌套调用深度
|
|||
|
|
5. **状态图**:别忘了初始状态(实心圆)和终态(圆圈+实心圆)
|
|||
|
|
6. **活动图泳道**:根据参与者来划分,每道一个责任区
|