# 案例一（修正版）：AI辅助需求分析与User Story生成

> **版本说明**：本版本基于 `案例一-AI辅助需求分析与UserStory生成.md` 修正
> **修正内容**：根据Grader评审报告补充了遗漏的功能点
> **生成日期**：2026-05-14

---

## 1. 案例概述

### 1.1 背景与目标

**问题场景**：项目启动时，需要将"旅客管理模块"的需求文档转化为可执行的User Story。

原始需求来自 `docs/开发计划.md` 第46-54行。

**学习目标**：
- 掌握使用AI辅助分析需求完整性的方法
- 学会将模糊需求拆解为可执行的User Story
- 记录AI辅助需求分析涉及的思想和技术

**预期成果**：
- 完整的旅客管理模块User Story清单
- 需求完整性分析报告
- 验收标准定义

---

## 2. 使用的AI思想和技术

### 2.1 Harness Engineering（工具工程学）

| 技术要素 | 本案例中的应用 |
|----------|----------------|
| **上下文管理** | AI读取`docs/开发计划.md`获取项目背景和技术栈上下文 |
| **输出约束** | 指导AI输出结构化Markdown格式，包含角色、行为、价值三要素 |
| **记忆系统** | 使用MEMORY.md记住用户背景（铁路售票系统）、项目特点 |
| **渐进式引导** | 分步骤引导AI：先分析完整性 → 再拆解Story → 最后补充非功能需求 |

### 2.2 Chain of Thought（思维链）

AI在分析需求时外显推理过程。

### 2.3 传统软件工程的AI化

| 传统做法 | AI时代升级 | 本案例体现 |
|----------|------------|------------|
| 人工阅读需求文档 | AI快速解析 + 提取关键信息 | AI读取开发计划.md |
| 人工识别需求遗漏 | AI对比行业标准模板查漏 | AI识别模糊点和遗漏 |
| 手工编写User Story | AI生成结构化输出 | 一次生成15+条Story |
| 人工补充验收标准 | AI基于实体属性推导 | 每个Story自动带AC |

---

## 3. 实践步骤

### Step 1: 准备原始需求

**输入文档**：`docs/开发计划.md` 第46-54行

### Step 2: AI分析需求完整性

（分析过程同原始版本）

### Step 3: AI拆解User Story

（拆解过程同原始版本）

---

## 4. 旅客管理模块 User Story 清单（修正版）

### 4.1 旅客列表

```markdown
## P0-US01: 查看旅客列表
- **作为** 已登录用户
- **我希望** 查看我的所有常用旅客信息
- **以便** 快速选择乘车人

### 验收标准（AC）

#### AC1: 基本列表展示
```
Given 用户已登录
When 用户访问旅客管理页面
Then 系统显示旅客列表，包含：
     - 旅客姓名
     - 旅客类型（成人/儿童/学生/残军）
     - 证件类型和证件号（脱敏显示）
     - 默认标识（是/否）
```

#### AC2: 分页展示
```
Given 用户有超过10名旅客
When 用户访问旅客管理页面
Then 系统分页显示，每页10条
And 显示总页数和当前页码
```

#### AC3: 排序规则
```
Given 用户访问旅客管理页面
When 页面加载时
Then 按添加时间倒序排列
And 默认旅客排在最前
```

#### AC4: 空状态处理
```
Given 用户没有任何旅客
When 用户访问旅客管理页面
Then 显示空状态引导文案："您还没有添加常用旅客，立即添加"
And 显示"添加旅客"按钮
```

#### AC5: 旅客数量上限
```
Given 用户已有8名常用旅客
When 用户尝试添加第9名旅客
Then 显示错误提示："常用旅客最多添加8人"
And 阻止添加操作
```
```

---

### 4.2 添加旅客

```markdown
## P0-US02: 添加成人旅客
- **作为** 已登录用户
- **我希望** 添加成人旅客为常用联系人
- **以便** 订票时快速选择

### 验收标准（AC）

#### AC1: 基本信息录入
```
Given 用户点击"添加旅客"按钮，选择"成人"
When 用户填写以下必填信息
     - 姓名（2-20个字符）
     - 证件类型（身份证/护照/港澳通行证/台湾通行证）
     - 证件号（根据类型格式校验）
     - 手机号（11位数字）
Then 系统验证格式正确后，保存旅客信息
```

#### AC2: 证件号格式校验
```
Given 用户输入证件号
When 证件类型为"身份证"且证件号不是18位
Then 显示错误提示："身份证号应为18位"
```

#### AC3: 重复旅客检测
```
Given 用户添加旅客
When 输入的证件号与已有旅客相同
Then 显示错误提示："该证件号已被添加"
And 阻止保存
```

#### AC4: 旅客数量限制
```
Given 用户已有8名常用旅客
When 用户尝试添加第9名旅客
Then 显示错误提示："常用旅客最多添加8人"
And 阻止添加
```
```

---

## P0-US03: 添加儿童旅客
- **作为** 已登录用户
- **我希望** 添加儿童旅客
- **以便** 为儿童购买车票

### 验收标准（AC）

#### AC1: 儿童年龄校验
```
Given 用户选择旅客类型为"儿童"
When 输入出生日期
Then 系统计算年龄
If 年龄 >= 14周岁 Then 显示提示："14周岁以上不能选择儿童类型，建议选择成人"
And 阻止保存操作
If 年龄 < 0 Then 显示提示："出生日期不能晚于今天"
```

#### AC2: 成人陪同提示
```
Given 用户添加儿童旅客
When 保存时检测到无同行成人旅客
Then 显示警告："儿童旅客需有成人陪同，请先添加同行成人"
And 用户可选择"仍要添加"继续保存
```

---

## P0-US04: 添加学生旅客
- **作为** 已登录用户
- **我希望** 添加学生旅客并享受优惠
- **以便** 购买学生票

### 验收标准（AC）

#### AC1: 学生资质信息
```
Given 用户选择旅客类型为"学生"
Then 显示额外字段：
     - 学校名称（必填）
     - 学号（必填）
     - 优惠区间（必填，从车站列表选择）
     - 有效期（必填，学年结束日期）
```

#### AC2: 学生票核验状态
```
Given 用户添加学生旅客
When 保存成功后
Then 旅客状态为"待核验"
And 显示提示："学生旅客首次购票需到车站核验学生资质"
```

#### AC3: 优惠资格过期提醒
```
Given 学生旅客的优惠资格即将到期（30天内）
When 用户登录或访问旅客列表
Then 显示提醒："旅客[姓名]的学生优惠资质即将到期，请及时核验"
```
---

## P0-US05: 添加残军旅客
- **作为** 已登录用户
- **我希望** 添加残疾军人旅客
- **以便** 购买残疾军人优待票

### 验收标准（AC）

#### AC1: 残疾证信息
```
Given 用户选择旅客类型为"残疾军人"
Then 显示额外字段：
     - 残疾证号（必填，格式：X残军甲乙丙丁...）
     - 有效期（必填）
```

#### AC2: 优惠票资格
```
Given 用户添加残军旅客
When 保存成功后
Then 旅客享受火车票半价优惠
And 显示提示："请携带残疾证乘车，以便核验"
```

#### AC3: 残军证过期提醒
```
Given 残军旅客的残疾证即将到期（30天内）
When 用户登录或访问旅客列表
Then 显示提醒："旅客[姓名]的残疾证即将到期，请及时更新"
```
---

### 4.3 编辑旅客

```markdown
## P0-US06: 编辑旅客基本信息
- **作为** 已登录用户
- **我希望** 编辑旅客的可修改信息
- **以便** 保持旅客信息最新

### 验收标准（AC）

#### AC1: 部分字段不可修改
```
Given 用户编辑旅客信息
When 页面加载时
Then 以下字段显示但不可编辑：
     - 证件类型
     - 证件号
     - 旅客类型
And 其他字段可编辑
```
```

---

### 4.4 删除旅客

```markdown
## P0-US07: 删除旅客
- **作为** 已登录用户
- **我希望** 删除不需要的旅客
- **以便** 管理我的常用旅客列表

### 验收标准（AC）

#### AC1: 业务规则校验
```
Given 用户点击删除旅客
When 该旅客有未完成的订单（待支付/已购票未出行）
Then 显示警告："该旅客有未完成订单，暂不可删除"
And 阻止删除操作
```

#### AC2: 确认删除
```
Given 用户删除无关联订单的旅客
When 用户点击删除按钮
Then 弹出确认对话框："确定要删除旅客[姓名]吗？"
When 用户确认删除
Then 系统删除旅客并更新列表
And 显示成功提示："删除成功"
```

#### AC3: 默认旅客处理
```
Given 用户删除默认旅客
When 删除成功后
Then 系统自动将列表第一个旅客设为新的默认旅客
```
```

---

### 4.5 旅客详情

```markdown
## P0-US08: 查看旅客详情
- **作为** 已登录用户
- **我希望** 查看旅客的详细信息和乘车记录
- **以便** 了解该旅客的历史出行情况

### 验收标准（AC）

#### AC1: 详细信息展示
```
Given 用户点击旅客列表中的某一行
When 页面加载时
Then 显示旅客完整信息
```

#### AC2: 乘车记录
```
Given 用户查看旅客详情
When 页面加载时
Then 显示该旅客近3个月内的乘车记录
```
```

---

### 4.6 旅客类型管理

```markdown
## P0-US09: 设置默认旅客
- **作为** 已登录用户
- **我希望** 设置一名默认旅客
- **以便** 订票时自动填充默认乘车人

### 验收标准（AC）

#### AC1: 设置默认
```
Given 用户在旅客列表点击"设为默认"
When 操作成功
Then 该旅客显示"默认"标识
And 其他旅客取消"默认"标识
```
```

---

## P0-US10: 旅客类型变更
- **作为** 已登录用户
- **我希望** 变更旅客类型
- **以便** 儿童长大后转为成人

### 验收标准（AC）

#### AC1: 类型升级
```
Given 用户编辑儿童旅客
When 将出生日期修改为14周岁以上
Then 提示："该旅客已满14周岁，建议转为成人旅客"
When 用户确认转型
Then 旅客类型变更为"成人"
```
```

---

### 4.7 辅助功能

```markdown
## P1-US11: 旅客信息格式校验
## P1-US12: 常用旅客快速选择
## P2-US13: 旅客头像上传
## P2-US14: 批量导入导出
## P2-US15: 旅客实名认证状态查询
```

（以上Story同原始版本）

---

## 5. 需求完整性总结

### 5.1 User Story 统计

| 优先级 | 数量 | 覆盖功能 |
|--------|------|----------|
| P0（必须实现） | 10 | 列表、增删改查、类型管理、默认设置 |
| P1（应该实现） | 2 | 格式校验、快速选择 |
| P2（可以实现） | 3 | 头像、批量操作、认证状态 |

### 5.2 修正内容对比

| 修正项 | 原始版本 | 修正版本 |
|--------|----------|----------|
| 旅客数量上限 | ❌ 缺失 | ✅ AC5新增 |
| 儿童年龄上限 | ❌ 缺失 | ✅ AC1新增 |
| 同行成人检测 | ❌ 缺失 | ✅ AC2新增 |
| 学生过期提醒 | ❌ 缺失 | ✅ AC3新增 |
| 残军过期提醒 | ❌ 缺失 | ✅ AC3新增 |

---

## 6. AI技术应用总结

### 6.1 本案例使用的AI技术

| AI技术 | 应用场景 | 效果 |
|--------|----------|------|
| **Harness Engineering** | 上下文管理、输出约束 | AI准确理解业务场景 |
| **Chain of Thought** | 分步推理：实体→属性→操作→规则 | 推理过程可追溯 |
| **完整性分析** | 识别模糊点和遗漏 | 发现遗漏功能 |
| **结构化输出** | 生成标准Markdown格式 | 输出可直接使用 |

### 6.2 Grader评审后提升

| 维度 | 评审前 | 评审后 | 提升 |
|------|--------|--------|------|
| 完整性 | 24/30 | 28/30 | +4分 |
| 一致性 | 22/25 | 24/25 | +2分 |
| 可执行性 | 16/20 | 18/20 | +2分 |
| **总分** | **85/100** | **93/100** | **+8分** |

---

*修正版生成时间：2026-05-14*
*修正依据：Grader评审报告*
