
UserStory 的综合校验机制与作用
用户故事(UserStory)是整个 Spec 体系中的校验枢纽:它将上游 PRD 中的业务场景拆解为可观测、可断言的验收标准(AC),并为下游的 API 契约、功能规格和测试用例提供验证依据。
每条 UserStory 包含三段式声明(作为…/我希望…/以便…)和一组验收标准。验收标准不是"功能描述",而是可观测断言——每一个 AC 都描述了一个外部可观测的系统行为,并用明确的判别条件(如 API 200 response.answer 非空、P95 < 3000ms)来判定通过与否。这意味着:
在这个文档中,所有 UserStory 共同构成了 618 大促运营助手的完整需求基线——任何功能实现只有通过全部对应 AC 的校验,才算交付完成。
值日期 | 版本 | 变更内容 | 操作人 |
|---|---|---|---|
2026-05-24 | v1.0 | 初始创建:4 条 P0 用户故事(618 大促场景) | — |
本文档记录了 618 大促运营助手(M1-618EC)的所有用户故事及对应的验收标准。用户故事遵循"作为…/我希望…/以便…"的三段式结构,验收标准(AC)描述可观测、可断言的系统行为。
角色 | 核心诉求 | 使用频率 |
|---|---|---|
运营经理(核心用户) | 通过自然语言快速查询单品/活动的实时促销数据,辅助大促期间运营决策 | 每日 10-30 次(大促期间翻倍) |
品类运营(次要用户) | 检索品类维度的历史活动数据,复用促销策略,输出品类复盘报告 | 每周 5-10 次 |
营销总监(观察用户) | 查看大促整体 GMV、核心品类表现、活动 ROI,把握大促节奏 | 每日 2-3 次 |
618 大促运营助手围绕以下场景组织用户故事:
编号 | 场景 | 核心用户 | 优先级 |
|---|---|---|---|
SC-01 | 单品促销数据查询 | 运营经理 | P0 |
SC-02 | 多轮数据追问与下钻 | 运营经理 | P0 |
SC-03 | 品类/活动主题分析 | 运营经理、品类运营 | P1 |
SC-04 | 历史活动复盘与检索 | 品类运营 | P0 |
SC-05 | 数据源异常降级 | 全体用户 | P0 |
其中 SC-01/02/04/05 为 P0 强制交付,SC-03 为 P1 可选交付。
作为运营经理,我希望输入商品 ID、SKU 或活动名称后,系统能聚合该商品的实时销量、销售额、库存、优惠券核销数据并返回结构化看板,以便在 1 分钟内掌握单品促销效果而不必切换多个后台系统手动拼凑数据。
对应 04 场景:SC-01
对应 04 规则:R-01, R-02, R-06
AC 编号 | 描述 | 可观测断言 |
|---|---|---|
AC-001-01 | 输入有效商品 ID 或活动名称,返回结构化促销数据看板 | API 200,response.answer 含实时销量、销售额、库存余量、优惠券核销数,非空 |
AC-001-02 | 数据必须附带来源系统标签(如"数据来源:OMS/数据中心") | response.sources 包含来源系统名称和数据时间戳 |
AC-001-03 | 简单查询响应时间 < 3 秒 | API 响应 P95 < 3000ms |
AC-001-04 | 关键指标(GMV、销量、库存)与源系统一致 | 答案中数值与 source 原始数据一致率 ≥ 99% |
AC-001-05 | 输入不存在的商品 ID 或活动,返回友好错误 | API 400,error.code = "INVALID_PRODUCT" |
作为运营经理,我希望在已有数据看板基础上继续追问下钻,系统能理解上下文并返回更细粒度的数据,以便快速定位问题而不必重复输入筛选条件。
对应 04 场景:SC-02
对应 04 规则:R-01, R-02, R-03
AC 编号 | 描述 | 可观测断言 |
|---|---|---|
AC-002-01 | 在同一会话中追问"这个 SKU 的转化率呢?",系统正确理解指代对象 | API 200,response.answer 针对上下文中的商品返回转化率数据 |
AC-002-02 | 多轮对话上下文窗口 ≤ 5 轮,超出后提示新对话 | API 200,response.contextLimitReached = true 时前端展示"当前对话已较长时间,建议开始新对话"提示 |
AC-002-03 | 追问"按小时看趋势",返回该商品当日各时段销售趋势 | API 200,response.answer 含分时段销量/销售额趋势图数据 |
AC-002-04 | 每条数据附带来源系统标签 | response.sources 字段存在且非空 |
作为品类运营,我希望搜索历史大促活动的数据记录,以便回顾往期促销策略、价格力度和销售表现,为当前 618 活动定价和备货提供参考。
对应 04 场景:SC-04
对应 04 规则:R-05
AC 编号 | 描述 | 可观测断言 |
|---|---|---|
AC-003-01 | 每次数据查询自动保存,包含查询内容、返回数据、来源系统、时间戳、用户 ID | API 201,query_history 表新增一行记录 |
AC-003-02 | 按活动名称、品类、日期范围搜索历史查询 | API 200,response.items 包含匹配的记录 |
AC-003-03 | 搜索结果按时间倒序排列 | response.items[0].createdAt > response.items[1].createdAt |
AC-003-04 | 每条历史记录可点击查看详情(完整查询 + 返回数据 + 数据来源) | API 200,返回完整的 query_record 对象 |
作为运营经理,我希望当某个后台系统(如 OMS、CRM)数据不可用时,系统明确告知哪些数据缺失且不生成无来源的补位数据,以便我不会依据不完整的数据做出错误的促销决策。
对应 04 场景:SC-05
对应 04 规则:R-04
AC 编号 | 描述 | 可观测断言 |
|---|---|---|
AC-004-01 | 单个数据源不可用时,返回已有数据 + 明确告知缺失数据源 | API 206,response.degraded = true,response.missingSources 非空 |
AC-004-02 | 全部数据源不可用时,返回错误提示而非空答案 | API 503,error.code = "DATA_UNAVAILABLE",response.answer 为空 |
AC-004-03 | 降级情况下绝不生成无来源的补位数据 | response.sources 中不包含伪造数据,error.message 描述具体不可用的数据源 |
AC-004-04 | 降级提示明确告知哪些数据系统暂时不可用 | response.missingSources 数组列出不可用的后台系统名称(如 OMS、CRM、定价系统) |
作为运营经理,我希望输入品类名称或活动主题关键词后,系统能聚合该品类下所有参与活动的商品数据,返回品类维度销售分析报告,以便快速判断品类在大促中的表现格局,而不必逐一查看单品。
对应 04 场景:SC-03
对应 04 规则:R-01, R-02(复杂聚合 10s)
AC 编号 | 描述 | 可观测断言 |
|---|---|---|
AC-005-01 | 输入品类关键词(如"美妆"),返回品类维度分析报告 | API 200,response.answer 含品类 GMV、销量、同比/环比增幅、参与商品数 |
AC-005-02 | 分析报告附带品类下 TOP 10 热销商品排行 | response.answer 含 TOP 10 商品表格(销量、销售额、折扣率、转化率) |
AC-005-03 | 按价格带展示品类内销售分布 | response.answer 含价格带区间统计(<50/50-100/100-200/200+ 各区间销量及占比) |
AC-005-04 | 品类分析响应时间 < 10 秒 | API 响应 P95 < 10000ms |
AC-005-05 | 输入不存在的品类名称,返回友好错误 | API 400,error.code = "INVALID_CATEGORY" |
作为运营经理,我希望在输入商品名称或活动 ID 时,系统能实时显示匹配的联想建议列表,以便在大促期间快速找到目标商品,不必记忆完整 ID。
对应 04 场景:SC-01(辅助能力)
AC 编号 | 描述 | 可观测断言 |
|---|---|---|
AC-006-01 | 输入 ≥ 2 个字符时,显示下拉建议列表 | API 200,response.suggestions 长度 ≥ 1(有匹配时);输入 < 2 字符时不触发请求 |
AC-006-02 | 建议列表显示商品名称 + SKU + 品类 + 当前活动标签 | 每条 suggestion 包含 name、sku、category、promotionTag 字段 |
AC-006-03 | 支持中文名、SKU 编码混合搜索 | 输入"精华液"/"SKU-10086"均返回正确匹配 |
AC-006-04 | 选择建议项后自动填入输入框并触发查询 | 前端 response.suggestionSelected = true 时执行查询 |
AC-006-05 | 无匹配结果时显示"未找到匹配商品或活动" | response.suggestions 为空数组,前端显示空状态提示 |
作为品类运营,我希望将查询到的促销数据导出为 Excel 或 CSV 文件,以便纳入品类复盘报告或与团队共享。
对应 04 场景:SC-04(扩展能力)
AC 编号 | 描述 | 可观测断言 |
|---|---|---|
AC-007-01 | 单次查询结果可导出为 Excel 文件 | 点击导出 → 浏览器下载 .xlsx 文件,内容包含查询结果和数据来源 |
AC-007-02 | 导出文件包含完整的数据上下文(查询条件 + 返回数据 + 时间戳 + 数据来源) | 文件头部含 metadata(导出时间、筛选条件、数据源列表),正文含完整数据表 |
AC-007-03 | 导出文件名格式:{品类/活动}_{日期}_{时间}.xlsx | 文件名符合格式规范,含品类/活动名称和导出时间 |
AC-007-04 | 批量导出支持选择多次查询记录合并为一个报表 | 选择 N 次查询 → 导出为一个含 N 个工作表(Sheet)的 Excel 文件 |
Phase 2 能力,详细 US/AC 待后续迭代补充。
Phase 2 能力,详细 US/AC 待后续迭代补充。
REQ 编号 | US 编号 | 优先级 | 对应场景 | 对应 API |
|---|---|---|---|---|
REQ-M1-618EC-001 | US-M1-618EC-001 | P0 | SC-01 | API-001 |
REQ-M1-618EC-002 | US-M1-618EC-002 | P0 | SC-02 | API-001, API-002 |
REQ-M1-618EC-003 | US-M1-618EC-003 | P0 | SC-04 | API-003, API-004 |
REQ-M1-618EC-004 | US-M1-618EC-004 | P0 | SC-05 | API-005 |
REQ-M1-618EC-005 | US-M1-618EC-005 | P1 | SC-03 | API-006 |
REQ-M1-618EC-006 | US-M1-618EC-006 | P1 | SC-01 | API-007 |
REQ-M1-618EC-007 | US-M1-618EC-007 | P1 | SC-04 | — |
REQ-M1-618EC-008 | US-M1-618EC-008 | Phase 2 | — | — |
REQ-M1-618EC-009 | US-M1-618EC-009 | Phase 2 | — | — |
所有用户故事对应的 AC 必须在对应阶段交付时全部通过。质量门禁分层如下:
门禁 | 检查方式 | 目标值 |
|---|---|---|
P0 AC 通过率 | 端到端测试验证每个 AC | 100% |
数据准确率 | 抽样 100 次查询,关键数值与源系统比对 | ≥ 99% |
响应时间(简单查询) | P95 压测 | < 3s |
降级覆盖率 | 模拟数据源不可用场景 10 次 | 100% 返回明确降级提示 |
API 契约验证 | 所有 API 端点响应格式与 spec 一致 | 100% |
门禁 | 检查方式 | 目标值 |
|---|---|---|
P1 AC 通过率 | 端到端测试验证每个 AC | 100% |
响应时间(品类分析) | P95 压测 | < 10s |
输入联想覆盖率 | 测试 TOP 1000 商品搜索命中率 | ≥ 95% |
以下能力已确认不在当前交付范围内:
文档 | 关系 |
|---|---|
04-产品需求说明 | 上游:提供业务场景(SC-01 ~ SC-05)和产品规则(R-01 ~ R-06) |
06-功能规格说明 | 下游:每个 US 的交互细节、UI 状态、异常分支在此定义 |
09-API 接口规格 | 下游:每个 AC 中引用的 API 端点(如 API-001)在此定义请求/响应契约 |
13-测试策略 | 下游:每条 AC 映射到至少一个端到端测试用例 |