Files
obsidian/软件需求分析/期中复习/期中复习指南.md

190 lines
5.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 期中考试复习
> **考试**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. **活动图泳道**:根据参与者来划分,每道一个责任区