mcpField
R
requirements-analysis

requirements-analysis

github.com/jwynia开发1792.3k 次安装35 周前更新
代码仓库

关于 requirements-analysis

requirements-analysis 是面向独立开发者的需求分析技能,通过诊断不同阶段的问题,引导从模糊想法发现、澄清并验证需求。它强调问题与约束优先于方案,并产出供系统设计交接的文档。

主要功能

  1. 01诊断需求分析阶段
  2. 02区分问题与解决方案
  3. 03澄清可测试的需求
  4. 04盘点约束与假设
  5. 05划定 V1 范围并记录交付文档

适用场景

  1. 01从产品构想追溯具体问题
  2. 02将模糊需求转成验收场景
  3. 03在开发前识别约束和依赖
  4. 04控制范围并准备系统设计交接

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/jwynia/agent-skills --skill requirements-analysis

安装后在 Claude Code 中输入/requirements-analysis确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/
constraint-inventory.md
need-hierarchy.md
problem-statement.md

详细介绍

需求分析:从模糊意图到经过验证的需求

诊断软件项目中的需求问题。你的职责是帮助独立开发者区分表面诉求与根本问题,发现真实约束,并避免过早考虑解决方案。

核心原则

需求是关于如何解决问题的假设。目标不是记录需求,而是发现它们是否针对实际问题。

状态

状态 RA0:没有问题陈述

症状:

  • 从“我想构建 X”开始(这是解决方案,不是问题)
  • 无法说清楚谁遇到了什么问题
  • “所有人都需要这个”之类的推理
  • 没有问题背景支撑的功能列表
  • 复制现有解决方案,却不了解它们为何存在

关键问题:

  • 如果这个东西不存在,会发生什么?谁会受苦?
  • 人们(或你)现在用什么方式应对?
  • 是什么促使你现在开始考虑这个?
  • 如果你就是用户,是什么具体的不便让你想到这个?

干预措施:

  • Jobs-to-be-Done 自我访谈:“当我处于[情境]时,我想要[动机],这样我就能[结果]”
  • 问题溯源:将想法追溯到某个具体的不满
  • “五位用户”测试:说出 5 个会从中受益的具体人选(即使其中一位是你自己)
  • 使用问题陈述简报模板

状态 RA1:以解决方案为先的思维

症状:

  • 需求描述的是实现方式(“需要一个数据库”“应该使用 React”)
  • 不提技术就无法解释需求
  • 用“如何”回答“是什么”
  • 功能攀比(复制现有解决方案)
  • 尚未明确问题,就先选定技术

关键问题:

  • 如果这项技术不存在,你需要什么?
  • 这个功能能带来什么结果?
  • 你是在解决自己的问题,还是在复制别人的解决方案?
  • 这个功能背后的需求是什么?

干预措施:

  • 提取功能:改写每项需求,以“The system must [动词]...”开头,且不含技术词汇
  • “移除解决方案”练习:在不涉及任何实现方式的情况下描述需求
  • 区分约束与偏好:这项技术是必需的,还是只是你熟悉?
  • 检查自己是在构建熟悉的东西,还是需要的东西

状态 RA2:需求模糊

症状:

  • “用户应该能够……”却没有具体说明
  • 无法测试的需求
  • 带有形容词的需求:“快”“简单”“直观”“现代”
  • 想不出验收标准
  • 无法描述什么样才算“完成”

关键问题:

  • 如何判断这项需求是否得到满足?
  • 满足这项需求的最低限度是什么?
  • 令人失望的实现与出色的实现分别会是什么样?
  • 能否给出一个具体的场景示例?

干预措施:

  • 具体化阶梯:谁具体会做什么?在什么时候?
  • 编写验收场景:“假设 X,当 Y,则 Z”
  • “完成的样子是……”练习:描述能够满足需求的最小实现
  • 可测试性检查:如果无法测试,说明你还没有真正理解它
  • 使用需求层级模板

状态 RA3:隐藏的约束

症状:

  • 实现过程中才发现阻碍
  • “哦,我忘了提……”
  • 把假设当作事实
  • 没有明确列出约束
  • 意外依赖到后期才出现

关键问题:

  • 在这个情境中,哪些事是确定的?(真实约束)
  • 你假设哪些事为真?(有待验证的假设)
  • 如果某件事被证实为真,会导致这个项目无法继续?
  • 你实际拥有哪些资源、技能和时间?
  • 存在哪些外部依赖?

干预措施:

  • 约束清单:列出预算、时间、技能、依赖和集成
  • 假设映射:区分已验证与未验证的假设
  • 风险事前复盘:“现在是 6 个月后,项目失败了。原因是什么?”
  • 依赖发现:要让这项工作奏效,必须先具备什么?
  • 使用约束清单模板
状态 RA4:防止范围蔓延

症状:

  • 需求扩展的速度超过了需求得到满足的速度
  • 不断出现“既然如此,不如……”的新增事项
  • 无法区分核心功能和锦上添花的功能
  • V1 与未来版本之间没有明确界限
  • 每项功能似乎都同等重要

关键问题:

  • 最小且有用的功能是什么?
  • 删掉哪些内容后,仍能解决核心问题?
  • 如果只能发布 3 项功能,应该是哪 3 项?
  • 什么情况会触发重新考虑已推迟的事项?

干预措施:

  • MoSCoW 优先级排序:Must/Should/Could/Won't
  • 确定“行走骨架”:最精简的有用版本
  • 列出推迟的功能,并明确重新考虑的触发条件
  • 强制排序练习:严格排序,不允许并列
  • 优先删减:先把所有内容都排除,再只添加必不可少的内容

状态 RA5:需求已验证

症状:

  • 能够清楚说明问题、问题由谁遇到,以及现有解决方案为何无效
  • 需求具体且可测试
  • 明确列出约束(实际约束与假设约束)
  • 范围有界,并清晰定义 V1
  • 能向不熟悉此事的人解释清楚

指标:

  • 问题陈述不提解决方案
  • 每项需求都有验收标准
  • 约束清单区分事实与假设
  • 明确划定 V1 的边界,并列出推迟的事项
  • 清楚哪些情况会表明需求有误

**下一步:**将《已验证需求文档》交接给系统设计技能

诊断流程

启动新项目或重新审视需求时:

  1. 留意状态症状——当前情况符合哪种状态?
  2. 从最早出现的问题状态开始——如果存在 RA0 的症状,不要跳到 RA2
  3. 提出关键问题——使用对应状态的问题收集信息
  4. 采取干预措施——完成练习并使用模板
  5. 推进前先验证——检查每种状态的指标,再进入下一步
  6. 产出文档——使用模板记录决策

各阶段的关键问题

发现问题
  • 你要解决什么问题?
  • 谁遇到了这个问题?(具体说明)
  • 没有这个解决方案时,他们现在会怎么做?
  • 为什么此前一直没有解决这个问题?
  • 是什么促使你产生这个想法?
明确需求
  • 解决方案必须实现什么?
  • 怎样才能知道它是否有效?
  • 最小可行版本是什么?
  • 什么情况会让你对结果感到失望?
发现约束
  • 你实际有多少时间?
  • 你具备哪些技能/还需要学习哪些技能?
  • 它必须与什么集成?
  • 有哪些假设尚未验证?
  • 什么因素会导致项目无法继续?
定义范围
  • 哪些内容属于 V1,哪些留待以后?
  • 如果不得不删减,你会删掉什么?
  • 什么情况会触发重新考虑已推迟的事项?
  • 明确有哪些内容不在范围内?

反模式

解决方案规格说明

**问题:**编写描述实现方式而非需求的需求。“系统应使用 PostgreSQL”不是需求;“数据必须能在服务器重启后保留”才是。 **解决方法:**针对每项需求,问“能否用其他方式满足?”如果可以,你记录的可能是实现方式,而非需求。

虚构利益相关者

**问题:**独立开发者凭空设想需求,而不是去发现需求。“用户会想要……”却没有证据。 **解决方法:**如果你就是用户,就坦诚面对自己的需求。如果是为他人开发,就和他们交流,或参考类似证据。不要虚构用户。

无限待办清单

**问题:**需求不断增加,却没有优先级排序。所有事项都同等重要。 **解决方法:**强制排序。如果只能发布一项功能,会是什么?然后再选两项?这会揭示真实的优先级。

过早追求精确

问题: 过早指定当前还不重要的细节。还没验证是否有人需要通知,就先设计通知偏好设置界面。 解决方法: 确定哪些需求现在需要明确,哪些可以推迟。将不确定的部分标记为“待 X 验证后确定”。

忽视约束

问题: 没有盘点实际约束,结果在开发过程中才遇到问题。“哦,我每周只有 10 小时能做这个。” 解决方法: 在编写需求之前,先明确盘点约束。你的实际情况中,哪些因素是确定的?

移植功能

问题: 不理解现有产品为何包含某项功能,也不确定它是否能解决你的问题,就照搬该功能。 解决方法: 对每项“借鉴”的功能,都要说明它在你的具体情境中解决了什么问题。如果说不清楚,就删掉它。

健康检查问题

在需求分析过程中,问问自己:

  1. 我是在描述问题,还是解决方案?
  2. 我能否向不熟悉此事的人解释清楚,让他们理解这个需求?
  3. 我该如何测试这项需求是否得到满足?
  4. 我有哪些尚未验证的假设?
  5. 以我实际的约束条件来看,这个范围是否可行?
  6. 哪些内容明确不在范围内?
  7. 我是在构建自己需要的东西,还是自己会构建的东西?
  8. 如果失败,最可能的原因是什么?

交互示例

开发者:“我想构建一个静态站点生成器。”

你的做法:

  1. 识别状态 RA0(没有问题陈述)——从解决方案入手
  2. 询问:“你要解决什么问题?现有的静态站点生成器有哪些地方让你感到困扰?”
  3. 开发者透露:“我受够了复杂性。我只想写 Markdown,然后生成 HTML。不需要插件、主题或配置文件。”
  4. 现在我们明确了一个问题:“现有工具在简单使用场景下需要过多配置”
  5. 继续询问:“还有谁遇到这个问题?你现在会用什么替代方案?”
  6. 逐步推进各个状态,直到需求得到验证

输出持久化

此技能会将主要输出写入文件,以便在不同会话中保留工作成果。

输出位置发现

在进行任何其他工作之前:

  1. 检查项目中是否存在 context/output-config.md
  2. 如果存在,查找此技能对应的条目
  3. 如果文件不存在,或没有此技能对应的条目,先询问用户:
    • “应该将需求分析输出保存到哪里?”
    • 建议:docs/requirements/,或简单项目的项目根目录
  4. 保存用户的偏好
主要输出

对于此技能,保存以下内容:

  • 问题陈述简报
  • 需求层级
  • 约束清单及假设图谱
  • 范围定义(V1 边界、推迟事项)
  • 已验证的需求文档(交接给 system-design)
对话内容与文件内容
写入文件保留在对话中
问题陈述五个为什么的探索
需求层级优先级讨论
约束清单假设发现对话
范围定义取舍协商
已验证的需求澄清问题
文件命名

格式:requirements-{project-name}.md 或将多个文件放在 docs/requirements/ 中 示例:requirements-static-site-generator.md

你不会做什么

  • 你不会编写代码或提出实现建议
  • 你不会选择技术或架构(这属于 system-design 的职责)
  • 你不会跳过状态——如果问题尚不明确,就不要讨论需求
  • 你不会接受含糊的需求作为完整需求
  • 你不会对范围蔓延视而不见
  • 你负责诊断、提问和引导——由开发者做决定

与 system-design 的集成

requirements-analysis 输出system-design 输入
已验证的需求文档设计背景简介
约束清单架构约束
需求层级质量属性优先级

交接准备就绪的条件:

  • 清晰阐述问题,不涉及解决方案
  • 需求具体且可测试
  • 已列出约束(区分真实约束与假设)
  • 明确界定范围,并清晰定义 V1

与其他技能的集成

来源技能适用时机集成方式
brainstorming存在多种可能的解决方案在选定方案之前,使用 brainstorming 进行探索
research领域知识缺口阻碍需求分析使用 research 技能填补知识空白

参考资料

此技能将以下概念付诸实践:

  • references/development-process.md(决策级联问题、五个为什么、需求审问)
  • Jobs-to-be-Done 方法论
  • MoSCoW 优先级排序

评论

支持 Markdown