TRACEABILITY-MATRIX.md 15 KB

CFC 需求 ↔ 用户场景 ↔ 测试用例 双向追踪矩阵

生成:2026-11-10(测试负责人闭环,用户授权「补写缺用例 + 重建双向矩阵」) 单一事实源:场景基线 docs/tdd/orchestration/sc-key-map.md(241 个 SC)· 用例 tests/test-cases/*.md · 需求 docs/需求分析/*.md 与 docs/superpowers/specs/*.md 状态定义:✅ 已派生三流用例 / ⚠️ 场景存在但变更点未派生 / ❌ 未入场景池(需派生,本轮未擅自编号入册) 本文所有数字为编号级实证扫描结果,不引用任何文档自述口径(历史台账存在 678 / 701 / 729 / 767 四套互相矛盾的数字)。


0. 口径与层级

「场景是否有用例」必须分三层回答,只报第一层会得出错误结论:

层 判据 数据来源
L1 编号层 每个 SC 是否存在 TC-xxx / -E / -P 三个编号 tests/test-cases/*.md 表首列
L2 语义层 该 TC 的「所属场景」列与步骤/预期是否真在描述这个 SC TC 行正文 vs 应用场景总览.md 场景标题
L3 执行层 三类流是否有实际通过证据且已推远端、工作区干净 sc-key-map.md 跑通状态列 + automation-status.md

1. 实测总览(2026-11-10)

项 补写前 补写后 判定
权威 SC 基线 241 241 不变
唯一 TC 编号 827 842(+15) 正常流 282 / 异常流 249 / 权限流 243 / 非功能 58 / 深挖 10
L1 三流齐全 237/241 241/241(100%) ✅ 4 个纯缺口已补;另发现 1 个编号占用冲突已补新编号
L2 编号对齐 150 对齐 / 51 错位 / 40 格式差异 不变 ⚠️ 硬缺口,见 §4
L3 已跑通(DEV_GOAL 严格口径) 15/241(6.2%) 15/241(未变) ❌ 226 个仍无远端证据;本轮新增本地执行证据 6 条但未推 origin/cfclub,不计入「已跑通」,详见 §9
本轮真实执行用例 — 42 个:30 passed / 3 failed / 9 skipped 见 docs/tdd/test/execution-evidence-2026-11-10.md
需求侧 SC 回链 11/214(5.1%) 16/214(7.5%) 8 份 11 月变更已补回链附录
需求侧 TC 回链 1/214(0.5%) 6/214(2.8%) 同上

2. 主表:需求变更 → 能力键 → SC → TC

需求侧反向锚点已写入每份需求文档末尾的「附录 · 场景与用例回链」,可双向跳转。

# 需求变更文档(docs/需求分析/) 能力键 关联 SC 关联 TC(正常 / 异常 / 权限) 状态
R1 2026-11-06-成就成长打卡需求变更.md task.history.view SC-P-94 TC-P-94 / -E / -P ✅ 本次补写
R1 同上 growth.history.view SC-P-95 TC-P-95 / -E / -P ✅ 本次补写
R1 同上 sleep.config.tags SC-C-26 TC-C-26 / -E / -P ✅ 本次补写
R1 同上 sleep.config.tags SC-A-27 TC-A-27-S / -S-E / -S-P ✅ 本次补写(编号占用冲突,见 G-2)
R1 同上 achievement.grid.fiveCol SC-P-96 TC-P-96 / -E / -P ✅ 本次补写
R2 2026-11-06-优惠券已领取券按钮修复需求变更.md coupon.claimed.actions / coupon.checkout.autoselect SC-P-57 · SC-P-75 · SC-A-17 TC-P-57* / TC-P-75* / TC-A-17* ⚠️ 双按钮、按券类型跳转、checkout 自动选券三处变更点均无断言
R3 2026-11-06-我的团队收益口径与邀请分享需求变更.md team.referral.earnings.cf / team.invite.share ❌ 无(关键词命中的 SC-P-01/02/09、SC-G-04、SC-X-04 均为「家庭邀请」,语义假阳性) 无可承载 TC ❌ 未入场景池
R4 2026-11-06-报告上传页关联商品卡片需求变更.md report.upload.linked-products / report.upload.member-4col SC-T-11(同页面主题) TC-T-11* 实为「成长计划」,语义错位 ⚠️ 需先裁决编号重排再派生
R5 2026-11-07-商城价格排序需求变更.md shop.price.sort SC-G-05 · SC-C-22 · SC-X-07 TC-G-05* / C-22* / X-07* ⚠️ 排序栏、价格列白名单、body 数组契约均无断言
R6 2026-11-07-财富中心贡献榜管理员口径需求变更.md family.earnings.admin.role / family.earnings.pool.toggle ❌ 无(241 SC 标题命中 0) 无 ❌ 未入场景池
R7 2026-11-08-手签名横屏适配需求变更.md signature.landscape.layout ❌ 无(SC-G-11 为隐私政策,假阳性) 无 ❌ 未入场景池;v1.0 已被 R8 取代,不单独派生
R8 2026-11-09-手签名实现方式重写需求变更.md signature.canvas2d.rewrite ❌ 无 无 ❌ 未入场景池(当前有效正本)

汇总:8 份变更中 1 份(R1)完成三流闭环;3 份(R2/R4/R5)有主题相近 SC 但变更点未派生用例;4 份(R3/R6/R7/R8)未入场景池。R7 为已废弃版本,实际待闭环为 7 份。

⚠️ 纠偏:上一轮「6 份需求变更在场景库中无对应主题」是窄关键词误判。实测 7 份中 5 份能找到主题相近 SC,但其中大部分为语义假阳性(家庭邀请 ≠ 推广收益、隐私政策 ≠ 手签名);真实「未入场景池」为 4 份。结论方向不变,依据更准确。


3. 本次补写的 15 条用例

场景 正常流 异常流(具体故障注入) 权限流(具体越权对象) 落点
SC-P-94 历史完成任务 TC-P-94 TC-P-94-E TC-P-94-P tests/test-cases/parent.md「成就与成长历史专项」
SC-P-95 成长历史记录 TC-P-95 TC-P-95-E TC-P-95-P 同上
SC-P-96 我的成就五列 TC-P-96 TC-P-96-E TC-P-96-P 同上
SC-C-26 睡眠打卡配置驱动 TC-C-26 TC-C-26-E TC-C-26-P tests/test-cases/child.md「睡眠打卡配置驱动专项」
SC-A-27 后台维护睡眠选项 TC-A-27-S TC-A-27-S-E TC-A-27-S-P tests/test-cases/admin.md「睡眠情况选项后台维护专项」

编写原则:异常流为具体故障注入 + 可判定断言(非法分页、单源超时、两源重复 ID、非法 JSON、并发重复提交、配置空列表等),不使用「系统给出明确错误提示而非 500」模板文案;权限流针对具体越权对象(F9 家庭成员 memberId、孩子直调后台 save、非 admin 改配置),不复用「统一 403/401」模板。未在需求或接口参考中明确的接口路径一律标「需核实」,未臆造 API。


4. SC → TC 三层覆盖明细

L1 编号层:241/241 三流齐全 ✅

L2 语义层:150 对齐 / 51 编号错位 / 40 格式差异 ⚠️

(a)51 个编号错位(TC 的「所属场景」列指向另一编号,呈整体偏移,系历史用例编号未随场景重排同步):

角色 数量 明细(SC → 所属场景列)
A 运营 21 SC-A-02→A-1, A-03→A-2, A-04→A-2, A-05→A-2, A-06→A-2, A-07→A-2, A-08→A-3, A-09→A-3, A-10→A-4, A-11→A-4, A-12→A-4, A-13→A-5, A-14→A-6, A-15→A-6, A-16→A-7, A-17→A-16, A-18→A-17, A-19→A-18, A-20→A-19, A-21→A-20, A-22→A-21
P 家长 16 SC-P-03→P-2, P-04→P-2, P-05→P-4, P-06→P-4, P-07→P-5, P-08→P-6, P-09→P-7, P-10→P-8, P-11→P-8, P-12→P-9, P-13→P-10, P-14→P-10, P-15→P-3, P-16→P-10, P-17→P-12, P-18→P-11
C 孩子 5 SC-C-05→C-4, C-06→C-5, C-07→C-6, C-08→C-7, C-09→C-8
T 规划师 9 SC-T-04→T-3, T-05→T-4, T-06→T-4, T-07→T-5, T-08→T-5, T-09→T-6, T-10→T-7, T-11→T-8, T-12→T-8

典型实证:TC-A-17* 三流内容为「团队分润/提现审核(S-cfc-68)」而 SC-A-17 是「优惠券/活动配置管理」;TC-T-11* 为「成长计划列表」而 SC-T-11 是「DAN 报告上传与解析」;TC-X-07* 为「全局统计」而 SC-X-07 是「商城履约闭环」。

(b)40 个「所属场景」列非编号(格式差异,语义对齐需人工核实,不判定为错误):SC-B-01/02/04~07/09~12(10 个,9 列格式)、SC-H-01~07(7 个,9 列格式)、SC-X-01~22(22 个,9 列格式)、SC-A-27(1 个,写的是能力键 S-cfc-68)。

(c)主题词粗筛:143/241 个 SC 的标题核心词未出现在对应三流 TC 正文中。该指标为粗筛线索,不作结论(标题词与用例用词常不同,如「管理端登录」vs 用例写「登录」),需逐份人工核实。

L3 执行层:15/241(6.2%)❌

sc-key-map.md 跑通状态列精确取值:已跑通 15(10 个「2026-11-07 收口」+ 5 个「2026-11-06 O-3 收口」)、未跑通 226。按 DEV_GOAL_user_scenarios.md 判据,「跑通」需三类流实际执行证据 + 推 origin/cfclub + 工作区干净;automation-status.md 亦显示结构化用例仅 14 条通过、638 条待自动化。

2026-11-10 execute 档补充:本轮真实执行 42 个用例(30 passed / 3 failed / 9 skipped),其中 SC-P-94 / SC-P-95 共 6 条三类流断言全部通过,本地执行证据已产生。但因未推远端、工作区不干净,不更新 sc-key-map.md 状态列,L3 仍为 15/241。完整记录见 §9 与 docs/tdd/test/execution-evidence-2026-11-10.md。


5. 需求侧反向引用(双向的另一半)

文档集 份数 SC 回链 TC 回链
docs/需求分析/ 14 6(42.9%) 5(35.7%)
docs/superpowers/specs/ 200 10(5.0%) 1(0.5%)
合计 214 16(7.5%) 6(2.8%)
其中 11 月需求变更 8 6 5

8 份 11 月变更均已追加「附录 · 场景与用例回链」,状态声明覆盖 8/8;其中 6 份能锚定具体 SC 编号、5 份能锚定具体 TC 编号,其余因「未入场景池」如实标为待派生——不硬塞编号制造 100% 回链假象。200 份 specs 未动,仍是最大反向追溯空洞。


6. 缺口清单与闭环标准

ID 缺口 证据 建议动作 通过标准
G-1 7 份有效需求变更未闭环 §2(R2~R8,R7 已废弃) 3 份在既有 SC 派生变更分支用例;4 份先派生 SC 入册再派生三流 TC(编号需主理人分配) 每份变更均有 SC 回链 + 三流 TC,且断言覆盖变更点
G-2 51 个编号语义错位 + 1 个编号占用(SC-A-27) §4(a) 裁决是否重排历史 TC 编号 / 建立别名映射;本轮未改动任何既有 TC,仅用 TC-A-27-S* 绕过冲突 241 个 SC 的 TC「所属场景」列与 SC 编号一致率 100%
G-3 200 份 specs 几乎无反向追溯 §5 设计文档模板加「关联 SC / TC」必填字段 specs SC 回链率 ≥95%
G-4 226 个 SC 无三类流执行证据 §4 L3 execute 档逐场景补实际通过证据并推远端、接入 CI 241/241 三类流实测通过 + git merge-base --is-ancestor 核验 + 工作区 clean
G-5 权限流模板化(约 21%) 上轮实测:238 条权限流仅 208 种唯一正文 按场景改写为具体越权对象/接口/数据断言(本次新增 5 条已按此规范编写) 权限流唯一正文 ≥95%
G-6 四套台账数字矛盾 SRS.md / README.md / inventory.md / 总览 以本矩阵编号级扫描为单一事实源重生成台账 各台账数值一致且与扫描误差为 0
G-7 睡眠配置与成长档案契约未落地 证据台账 §1 / §4:/api/health/sleep/tags 404、/api/admin/sleep/tags 404、/api/config/public/value 500、/api/growth/record/list 500 确认实现真实路径(疑为 /api/admin/config/*)并补齐读取/维护接口;造跨家庭数据夹具后复核权限口径 4 个 fixme 全部转正常用例并通过;权限契约与 TC-P-94-P / TC-P-95-P 文档断言一致
G-8 回归基线 3 个失败 nonfunc-perf-compat.spec.js:92(并发串数据)、nonfunc-security.spec.js:77 / :131 按证据台账 §4 第 4~6 项修实现或对齐契约 3 条用例通过
G-9 本地执行证据未入册 证据台账 §5:未推 origin/cfclub、未 clean-check 单独授权后执行 git 提交/推送与 mark-green 流程 git merge-base --is-ancestor 核验 + clean-check 0 + SC-P-94/95 状态列更新

7. 校验方法(可复跑)

在 d:/cfc 下执行以下只读脚本,重算 L1 / L2 / 需求回链:

import re, glob, collections
rd = lambda p: open(p, encoding='utf-8', errors='replace').read()
km = set(re.findall(r'\|\s*(SC-[A-Z]+-\d+)\s*\|', rd('docs/tdd/orchestration/sc-key-map.md')))
tc = set()
for f in glob.glob('tests/test-cases/*.md'):
    tc |= set(re.findall(r'^\|\s*(TC-[^\s|]+)\s*\|', rd(f), re.M))
full = sum(1 for s in km if all(k in tc for k in
           (s.replace('SC-','TC-'), s.replace('SC-','TC-')+'-E', s.replace('SC-','TC-')+'-P')))
print(f'L1 三流齐全 {full}/{len(km)} | 唯一 TC {len(tc)}')
req = glob.glob('docs/需求分析/*.md') + glob.glob('docs/superpowers/specs/*.md')
print('SC回链', sum(1 for f in req if re.search(r'\bSC-[A-Z]+-\d+', rd(f))), '/', len(req))
print('TC回链', sum(1 for f in req if re.search(r'\bTC-[A-Z]+-', rd(f))), '/', len(req))

L2 语义层需比对 TC「所属场景」列(归一 SC-?([A-Z]+)-0*(\d+))与 SC 编号;L3 执行层需读 sc-key-map.md 跑通状态列按列索引精确取值——⚠️ 不可用子串 跑通 匹配(会命中「未跑通」,历史教训 LES-002)。


8. 边界声明

  • 本轮只写测试资产与文档(tests/、docs/需求分析/ 附录、docs/tdd/test/ 证据台账),未修改任何生产源码、未提交、未推送、未执行任何 git 写操作。
  • execute 档仅访问内网 192.168.16.251,未访问外部公网;未安装依赖(Playwright 1.63.0 与 chromium 本已就绪);凭据由既有 direct-register 自注册取得,未硬编码、未打印 token/口令/手机号;未重置远程数据库、未写业务数据。
  • 未实测项一律标注,绝不伪造执行证据或远端 sha;fixme / skip 不计为通过。
  • 未在需求/接口参考中明确的接口路径、聚合口径、登录态均标「需核实」,未臆造。
  • 未擅自新增 SC 编号入场景库(场景基线仍为 241);「需派生」项待主理人裁决。

9. execute 档执行证据(2026-11-10)

完整记录:docs/tdd/test/execution-evidence-2026-11-10.md · 新增规格:tests/e2e/api/traceability-p94-p95-c26.spec.js

命令(cd d:/cfc/tests) 结果
npx playwright test e2e/api/api-smoke.spec.js -c playwright.config.api.js --project=desktop 4 passed(链路自检)
npx playwright test e2e/api/traceability-p94-p95-c26.spec.js -c playwright.config.api.js --project=desktop 6 passed / 4 skipped
npx playwright test e2e/api/{api-smoke,nonfunc-security,nonfunc-perf-compat,butler-fallback,human-butler-workorder}.spec.js -c playwright.config.api.js --project=desktop 24 passed / 3 failed / 5 skipped

去重合计 42 个用例:30 passed / 3 failed / 9 skipped。SC-P-94 / SC-P-95 三类流 6 条全部真实通过;SC-C-26 / SC-A-27 / SC-P-96 因配置接口 404/500 与远程无前端 SPA 未实测,登记为 4 个 fixme。因缺「推 origin/cfclub + 工作区干净」两项判据,本轮不更新 sc-key-map.md 跑通状态列(仍 15/241),需单独授权 git 流程后入册(G-9)。