haizei-ears-requirements

v2026.09.24

需求描述 EARS 改写与审查技能。Use when: EARS 需求改写、EARS requirement rewrite、EARS spec rewrite、EARS 规格改写、用 EARS 改写需求、把需求转成 EARS 规格、review EARS requirements、EARS 模式选择、需求规格消歧、验收标准改写、USDM SPEC 规格统一。解决的问题:把模糊需求改成可测试规格,补齐触发条件、状态条件、异常处理和功能开关,拆分一条需求中的多个动作,识别 should/can/supports/appropriately 等模糊表达,并输出模式判断、改写前后对照、拆分建议和待确认问题。

GitHub
Install command
npx skhub add wuchubuzai2018/haizei-ears-requirements
Markdown
SKILL.md

EARS 需求规格改写与审查

本技能用于基于 EARS(Easy Approach to Requirements Syntax,需求语法简易方法)将模糊、口语化或有歧义的需求改写为清晰、无歧义、可测试、可评审的规格陈述,并在需要时给出句式选择、拆分建议和校验意见。

以下模板中的关键字和 shall 保留原始英文写法,以确保 EARS 语法表达准确。

文件路由表

先判断当前任务属于哪一类,再按下表加载对应文件;不要默认把所有参考文档一次性读完。

文件什么时候优先查看主要内容
SKILL.md每次进入技能时都先看触发词、主流程、模式路由入口、文件分工
references/ears-usage-guide.md需要判断是否适合使用 EARS,或了解使用场景、常见触发方式时使用说明、适用场景、不适用场景、快速上手
references/ears-chinese-output.md需要对外输出中文需求,不希望出现 WHEN、WHILE、IF、THEN、WHERE、shall 等英文关键词时中文输出约定、关键词替换、中文模板
references/ears-patterns.md不确定该选哪种 EARS 模式,或需要查看各模式细节和常见错误时六种模式详解、示例、常见错误
references/ears-output-template.md需要统一输出结构、改写前后对照格式、待确认问题模板时单条改写、多条拆分、审查模板、输出要求
references/ears-writing-rules.md需要检查写法质量、模糊词、可测试性和完成标准时编写规则、处理策略、完成标准
examples/ears-examples.md需要参考具体改写案例时改写前 / 改写后示例

生产输出默认约定

  • 对外输出需求规格时,默认使用中文句式,不输出 WHEN、WHILE、IF、THEN、WHERE、shall 等英文关键词。
  • 英文 EARS 关键字仅用于模式讲解、分类说明、内部讨论或用户明确要求保留英文模板的场景。
  • 改写结果默认使用“当…时”“在…时”“如果…,则…”“应”等中文表达。
  • 如果需要同时给出模式解释和最终规格,先说明模式名称,再输出中文规格正文。

改写流程

快速改写流程

  1. 识别原始语义:找出系统名称、动作对象、触发事件、状态条件、异常条件和约束信息。
  2. 标记问题点:圈出模糊词、多动作混写、未量化约束、缺失主语和语义漂移风险。
  3. 判断是否拆分:如果一句话里包含多个动作、多个异常场景或多个时序阶段,先拆成多条需求。
  4. 进入模式路由:根据是否有事件、状态、功能开关或异常场景,选择对应 EARS 模式。
  5. 执行改写:按模板输出规格,优先保留原始业务意图,不擅自补充业务规则。
  6. 补足可测试性:尽量补出时间限制、次数限制、范围限制、失败处理和提示内容;缺失时列出待确认问题。
  7. 按固定结构输出:给出模式判断、改写前后对照、拆分说明和审查意见。

判断与分支

  • 如果原句同时表达“状态变化前”和“状态变化后”两个行为,应优先拆成两条,而不是直接保留复杂模式。
  • 如果一句话里既有正常流程又有异常流程,应分别改写,不要写成一条混合需求。
  • 如果无法明确“谁来做什么”,先补主语,再改写。
  • 如果无法明确触发条件或响应动作,应停止硬改,转为输出待确认问题。

单独使用时

  1. 接收 用户提供的模糊规格或需求。
  2. 分类 使用模式选择指南,对每条陈述进行分类。
  3. 重写 使用合适的 EARS 模板重写规格。
  4. 校验 重写后的规格是否满足以下要求:
    • 每条陈述恰好只包含一个 shall。
    • 使用可衡量、可验证的语言。
    • 不包含歧义黑名单词汇(参见 USDM 编写指南)。
    • EARS 关键字(WHEN、WHILE、IF、THEN、WHERE)必须全部大写。
  5. 呈现 向用户展示重写前后的对比。

与 USDM 一起使用时

EARS 应用于 USDM 层级中的 规格级别(SPEC-NNN)。在 USDM 第 3 步(层级构建)中,应使用合适的 EARS 模式编写每一条规格:

  • 正常路径行为 → Ubiquitous、Event-driven 或 State-driven
  • 错误 / 边界场景 → Unwanted behavior(IF-THEN)
  • 依赖功能开关的行为 → Optional feature(WHERE)
  • 多条件行为 → Complex

模式路由

6 种 EARS 模式

先按下表判断应进入哪一种模式,再使用对应模板改写。

路由判断进入模式解决的典型问题模板示例
没有触发事件、没有持续状态、没有功能开关,行为始终成立Ubiquitous(普适型)把“系统一直都应这样做”的泛化描述写清楚系统 shall <响应>.系统 shall 使用 AES-256 对静态数据进行加密。
存在明确、离散的触发事件Event-Driven(事件驱动型)把“什么时候发生”补充清楚,避免只有动作没有触发条件WHEN <触发事件>, 系统 shall <响应>.WHEN 用户点击“提交”按钮时,系统 shall 校验所有必填字段。
存在持续成立的状态或约束State-Driven(状态驱动型)把“在什么状态下一直生效”表达清楚,避免把状态误写成事件WHILE <状态>, 系统 shall <响应>.WHILE 系统处于维护模式时,系统 shall 对所有请求返回 HTTP 503。
处理错误、故障、边界情况或异常输入Unwanted Behavior(非期望行为型)把异常场景下的处理动作写具体,避免“妥善处理”这类空话IF <条件>, THEN 系统 shall <响应>.IF 支付网关返回错误时,THEN 系统 shall 将待处理订单标记为支付失败。
行为只在某个功能或配置启用时成立Optional Feature(可选功能型)把功能开关前提写明,避免把可选功能误写成默认行为WHERE <功能已启用>, 系统 shall <响应>.WHERE 已启用双因素认证时,系统 shall 在密码校验通过后要求输入 TOTP 验证码。
同时存在两个条件,例如事件 + 状态、事件 + 功能开关Complex(复合型)处理单一模式不足以表达的组合条件,但仍限制在两个关键字内组合使用 WHEN、WHILE、IF、WHERE,且每条规格最多使用 2 个关键字WHILE 系统处于离线模式时,WHEN 用户新建记录时,系统 shall 将记录写入本地待同步队列。

模式选择指南

请按以下决策流程选择正确的模式:

1. 是否存在触发事件?
   ├─ 是 → 是否还存在持续状态?
   │  ├─ 是 → 复合型(WHILE + WHEN)
   │  └─ 否 → 事件驱动型(WHEN)
   └─ 否
2. 是否存在持续条件?
   ├─ 是 → 状态驱动型(WHILE)
   └─ 否
3. 是否属于错误 / 故障 / 边界场景?
   ├─ 是 → 非期望行为型(IF-THEN)
   └─ 否
4. 是否依赖某个功能 / 配置?
   ├─ 是 → 可选功能型(WHERE)
   └─ 否 → 普适型

参考引用资料(需按需加载)

  • references/ears-usage-guide.md — 使用说明、触发表达、适用与不适用场景
  • references/ears-chinese-output.md — 中文生产输出约定、关键词替换与中文模板
  • references/ears-patterns.md — 6 种模式的详细参考资料,包含多个示例
  • references/ears-output-template.md — 固定输出结构、对照格式与待确认问题模板
  • references/ears-writing-rules.md — 编写规则、典型处理策略与完成标准
  • examples/ears-examples.md — 典型场景的改写前 / 改写后示例
Discovery
Tags

No tags published for this skill.

Version
Latest version metadata

Version

v2026.09.24

Published

Sep 24, 2026

Category

Uncategorized

License

Not specified

Source path

skills/haizei-ears-requirements

Default branch

main

Latest commit

bff644e

Tree SHA

d296d16