AI编程05:需求澄清
从口头需求拆成边界、验收和风险点,理解如何使用AI帮助澄清和细化需求。
需求澄清是开发过程中最关键的一步。AI 可以帮助将模糊的口头需求拆解成清晰的边界、验收标准和风险点,减少后续的返工和误解。
需求澄清的重要性
模糊需求的问题
大多数需求最初都是模糊的:
口头需求:
"我们需要一个用户登录功能。"
缺少的信息:
- 支持哪些登录方式?(手机号、邮箱、第三方)
- 需要什么安全措施?(密码加密、验证码、锁定机制)
- 登录成功后做什么?(返回 Token、跳转到首页)
- 失败时如何处理?(错误提示、重试次数)
- 与其他系统的交互?(单点登录、OAuth)
清晰需求的价值
| 阶段 | 需求状态 | 开发效率 |
|---|---|---|
| 模糊需求 | 不完整、不确定 | 低,频繁返工 |
| 部分澄清 | 基本明确 | 中,少量调整 |
| 完全澄清 | 完整、可执行 | 高,一次性通过 |
需求澄清的维度
六个核心维度
| 维度 | 澄清内容 | 示例问题 |
|---|---|---|
| 目标 | 要达成什么结果 | ”这个功能的业务目标是什么?“ |
| 范围 | 包含哪些内容 | ”需要支持哪些登录方式?“ |
| 边界 | 不包含什么 | ”是否需要支持单点登录?“ |
| 验收 | 如何判断完成 | ”登录成功的标准是什么?“ |
| 约束 | 有什么限制 | ”技术栈和时间有什么限制?“ |
| 风险 | 有什么风险 | ”可能遇到什么技术难题?“ |
需求澄清流程
口头需求
↓
目标澄清
↓
范围澄清
↓
边界澄清
↓
验收标准定义
↓
约束条件确认
↓
风险评估
↓
清晰需求文档
如何使用 AI 澄清需求
目标澄清
用户:我们需要一个用户登录功能
AI:为了更好地理解这个需求,我想确认几个问题:
1. 业务目标:
- 这个功能是为了解决什么问题?
- 预期提升什么指标?(转化率、安全性、用户体验)
2. 用户场景:
- 哪些用户会使用这个功能?(新用户、老用户)
- 使用频率是多少?
3. 业务价值:
- 这个功能对业务的重要性如何?
- 不做这个功能会有什么影响?
范围澄清
用户:支持手机号和邮箱登录
AI:好的,我理解需要支持两种登录方式。让我确认一下范围:
1. 手机号登录:
- 是否需要验证码?
- 验证码有效期是多久?
- 是否支持语音验证码?
2. 邮箱登录:
- 是否需要密码?
- 是否支持忘记密码功能?
- 是否需要邮箱验证?
3. 通用功能:
- 是否需要记住登录状态?
- 是否需要登录日志?
- 是否需要多端登录管理?
边界澄清
用户:不需要第三方登录
AI:好的,第三方登录不在范围内。让我确认一下其他边界:
1. 不在范围内的功能:
- 第三方登录(微信、支付宝等)
- 单点登录(SSO)
- 社交登录
2. 后续可能扩展的功能:
- 是否预留第三方登录接口?
- 是否考虑未来集成 SSO?
验收标准定义
用户:登录成功后返回 Token
AI:好的,让我定义验收标准:
1. 功能验收:
- 手机号登录:输入正确手机号和验证码,登录成功
- 邮箱登录:输入正确邮箱和密码,登录成功
- 错误处理:输入错误信息,显示正确的错误提示
2. 性能验收:
- 登录响应时间:< 500ms
- 并发登录:支持 1000 QPS
3. 安全验收:
- 密码使用 BCrypt 加密存储
- 登录失败 5 次后锁定账号 15 分钟
- Token 使用 HTTPS 传输
4. 兼容性验收:
- 支持 Chrome、Firefox、Safari、Edge
- 支持 iOS 和 Android
约束条件确认
用户:使用 Java 和 Spring Boot
AI:好的,技术栈确定。让我确认其他约束:
1. 技术约束:
- 语言:Java 21
- 框架:Spring Boot 3.2
- 数据库:MySQL
- 缓存:Redis
2. 时间约束:
- 开发周期:2 周
- 测试周期:1 周
3. 资源约束:
- 开发人员:1 人
- 测试人员:1 人
4. 合规约束:
- 符合 GDPR 数据隐私要求
- 符合行业安全标准
风险评估
AI:根据需求,我识别出以下风险:
1. 技术风险:
- 风险:短信验证码可能延迟或失败
- 影响:用户无法登录
- 缓解:使用多个短信服务商,添加重试机制
2. 安全风险:
- 风险:暴力破解攻击
- 影响:用户账号被盗
- 缓解:添加登录锁定和限流
3. 性能风险:
- 风险:大量用户同时登录导致系统崩溃
- 影响:服务不可用
- 缓解:添加缓存和限流
4. 业务风险:
- 风险:用户忘记密码无法找回
- 影响:用户流失
- 缓解:提供多种找回密码方式
AI 辅助需求澄清的技巧
开放式提问
AI:为了更好地理解这个需求,我想了解:
1. 这个功能的背景是什么?
2. 用户使用这个功能的典型流程是什么?
3. 有没有参考的产品或设计?
封闭式提问
AI:让我确认几个具体问题:
1. 是否需要支持微信登录?(是/否)
2. 是否需要记住我功能?(是/否)
3. 登录失败后是否需要验证码?(是/否)
假设式提问
AI:根据我的理解,这个需求包括:
1. 手机号验证码登录
2. 邮箱密码登录
3. 登录失败锁定机制
我的理解对吗?有没有遗漏或错误?
示例驱动
AI:让我举几个例子,看看是否符合你的预期:
示例1:新用户登录
- 用户打开登录页面
- 输入手机号
- 获取验证码
- 输入验证码
- 登录成功,跳转到首页
示例2:老用户登录
- 用户打开登录页面
- 输入邮箱和密码
- 登录成功,保持登录状态
这些流程符合你的预期吗?
需求澄清的输出
需求文档模板
# 用户登录功能需求文档
## 1. 目标
- 业务目标:提升用户登录体验,保障账号安全
- 用户目标:快速、安全地登录系统
## 2. 范围
- 手机号验证码登录
- 邮箱密码登录
- 忘记密码功能
- 登录状态管理
## 3. 边界
- 不包含第三方登录
- 不包含单点登录
- 不包含社交登录
## 4. 验收标准
- 功能:登录成功率 > 99%
- 性能:响应时间 < 500ms
- 安全:密码加密存储,登录锁定机制
- 兼容:支持主流浏览器和移动端
## 5. 约束条件
- 技术栈:Java 21 + Spring Boot 3.2 + MySQL + Redis
- 时间:3 周
- 人员:开发 1 人,测试 1 人
## 6. 风险评估
- 短信验证码延迟:使用多个服务商
- 暴力破解:添加锁定和限流
- 性能问题:添加缓存
用户故事
作为 用户,
我想要 通过手机号验证码登录,
以便 快速访问系统。
验收标准:
- 输入正确手机号和验证码,登录成功
- 输入错误验证码,显示错误提示
- 验证码有效期为 5 分钟
用例图
登录用例:
1. 用户打开登录页面
2. 用户选择登录方式(手机号/邮箱)
3. 用户输入登录信息
4. 系统验证登录信息
5. 验证成功,生成 Token
6. 返回 Token 和用户信息
7. 验证失败,显示错误信息
需求澄清的常见问题
问题1:需求变更频繁
表现:需求不断变化,导致开发返工
解决方案:
- 在需求澄清阶段充分讨论
- 建立变更控制流程
- 记录需求变更历史
问题2:需求不完整
表现:缺少关键信息,开发过程中需要反复确认
解决方案:
- 使用结构化的需求澄清模板
- 确保覆盖所有核心维度
- 在开发前进行需求评审
问题3:需求理解不一致
表现:开发人员和产品人员对需求的理解不同
解决方案:
- 使用示例和用例明确需求
- 定期进行需求确认
- 建立需求文档版本管理
问题4:需求过于模糊
表现:需求描述不清晰,无法开始开发
解决方案:
- 使用 AI 辅助拆解需求
- 逐步细化需求
- 从简单到复杂
项目判断清单
- 需求模糊不清 → 使用 AI 辅助拆解
- 需求变更频繁 → 建立变更控制流程
- 需求不完整 → 使用结构化模板
- 理解不一致 → 使用示例和用例确认
- 需要快速澄清 → 使用封闭式提问
- 需要深入理解 → 使用开放式提问
- 需要验证理解 → 使用假设式提问
- 需要长期维护 → 建立需求文档管理