测试负责人工作汇报(R167 轮)
本汇报按《测试负责人工作汇报模板》填写。R167 为强制实跑轮:上一轮(R166,08:35)受沙箱限制仅跑两端 Jest、其余维度引用 R165 权威值;本轮补齐后端全量(mvn)、双节点浏览器 E2E(189 实派 + 本机)、langgraph@251 实派、根级黑盒与线上鉴权探针,所有维度均为本轮新实测,不再引用历史值。
基本信息
| 项目 |
内容 |
| 汇报人 |
测试负责人(自动化测试闭环任务) |
| 汇报周期 |
2026年11月12日 08:38 ~ 09:5x(第 167 轮) |
| 基线 |
cfclub @ 8e4d17e83(跑前 = origin);跑测窗口内远端前进至 fef17fd44(仅 docs + cfc-web 构建元数据,零功能源码) |
| 负责模块/单元 |
全站回归:cfc-backend JUnit 全量 + 管理端 admin + 小程序 H5 frontend(浏览器 E2E:189→admin、本机→admin/frontend/shop/health/dx)+ cfc-langgraph@251 + 前端/Web Jest + 根级黑盒 |
一、本轮工作数据汇总
1.1 测试用例建设
| 指标 |
数量 |
填写说明 |
| 本轮新增测试用例数* |
0 个 |
SRS/场景闸门零命中(窗口 a9ca91323..fef17fd44 specs 201 份 / test-cases 15 份 / API_REFERENCE 全零变更),G12 合规 |
| 本轮验证执行测试数* |
3889 个(全部本轮实跑) |
后端 JUnit 3045 + 前端 Jest 624 + 管理端 Jest 116 + 浏览器 E2E 30(28 过 + 2 跳)+ langgraph 51 + 根级黑盒 23 |
| 用例通过率 |
98.23%(3820/3889;剔除 skip 98.68%) |
红 51 / 跳 18,明细见 §5.2;红例含预期 RED 与已知存量,门禁见 §5.1 |
1.2 会话与任务分发
| 指标 |
数量 |
填写说明 |
| 分派任务数* |
2 个 |
R167-1 → opencode-189(admin-desktop,首跑 + 复跑共 2 次派发);R167-2 → opencode-251(langgraph pytest kick+read)。本机承担 fe/shop/health/dx/admin 串行执行 |
| 恢复智能体会话数* |
1 个 |
189 admin 首跑 2 例失败(account-roles 502),复跑取回 5/5 → 判定节点侧瞬态,非用例回归 |
| 当前在用会话数 |
0 个 |
全部任务收尾,无残留浏览器任务(符合「每节点仅一任务」约束) |
1.2b 各会话当前工作状态列表
| 会话标签 |
会话 ID/地址 |
当前状态 |
当前任务 |
静默/空闲时长 |
工作目录 |
备注 |
opencode-189 |
192.168.16.189:4090 |
done |
admin-desktop UI E2E |
已完成(首跑 28s + 复跑 73s) |
C:\code\cfc\tests |
首跑 3/5(account-roles 502)→ 复跑 5/5 EXIT=0;spec blob 4703d73fb = 本机 |
opencode-251 |
192.168.16.251:4096 |
done |
langgraph pytest 51 例 |
已完成(165.32s) |
/sc-data/cfc/cfc-langgraph |
47 过 / 4 红;节点 HEAD fef17fd44(tests 目录零差异,结论可比) |
local-browser |
本机进程 |
done |
admin / frontend / shop / health / dx |
已完成(1.8m + 58.1s + 18.2s + 13.9s + 跳过) |
d:\cfc\tests |
28 过 + 2 跳(dx 404);Chromium 二进制在 %LOCALAPPDATA%\ms-playwright(R166「无 Chromium」为探测路径错误) |
local-mvn |
本机进程 |
done |
cfc-backend 全量 |
已完成(60:00(08:44→09:44)) |
d:\cfc\cfc-backend |
13 红类:存量 17 例(EnergySystem 6 / DimensionRegistryMap 3 / Orchestration 2 / WechatLogin 2 / MembershipPay 1 / PaymentORD 1 / TeamProfitCron 1 / GuideModule 1)第 15 次零漂移 + 预期 RED 6 例(S-cfc-147 DanAssessment 4 / S-cfc-151 TaskReview 2)+ 未入库文件 5 errors(GrowthPublicEndpointMappingTest,B-162-1);361/361 XML 全产出、2121+367 源 0 编译错、dump 0 |
local-jest |
本机进程 |
done |
cfc-frontend + cfc-web + 根级 |
已完成(42.2s / 40.2s / 5.0s) |
d:\cfc\cfc-frontend、cfc-web、tests |
fe 609/3/12、web 116/116、根级 7/16(9082 未起,B-36) |
1.3 问题处置
| 指标 |
数量 |
填写说明 |
| 新测试发现问题数* |
3 个 |
B-167-1(189 节点 account-roles 502 瞬态)· B-167-2(251 live chat/analyze 120s 零字节)· B-167-3(R166 沙箱误判「无 Chromium」被本轮实测推翻) |
| 已解决测试相关问题数* |
2 个 |
B-142-1 闭环(/api/admin/families/overview 匿名由「200 + code:400」转为 401,6 端点全 401)· B-51 类「本机无 Chromium」误判消除(改为探测路径口径) |
| 待解决测试相关问题数 |
6 个(P0×1 / P1×3 / P2×2) |
① B-142-2 langgraph LLM 配额(P0);② B-156-1 建表 SQL 无效(P1);③ B-162-1 未入库测试文件(P1);④ B-152-1/2 CI 排除清单双向失真(P1);⑤ B-167-2 live LLM 挂死(P2,与①同源);⑥ B-36 根级 16 红(P2) |
1.4 本轮 git 提交与推送证据(真理证据)
| 提交 sha |
关联任务/能力键 |
阶段 |
触及文件类型 |
目标分支 |
已推送远端 |
备注 |
edb8af738 |
全站巡检 R167 |
汇报 |
测试文档(docs/tdd + 台账)+ 归档 2 份游离报告 |
cfclub |
✅ 已推送 origin/cfclub(ahead/behind 0/0,git branch -r --contains 核验 PASS) |
结果有变化(B-142-1 闭环 / langgraph 41→47 / 新增 3 条 blocker)→ 按规则提交并通知研发 |
1.5 状态机阶段分布(全局进度)
| 阶段 |
键数 |
备注 |
| UNTRACKED |
0 |
需求侧 ⏳ 0 键 |
| RED |
0 |
测试侧无待写红单测键 |
| YELLOW |
63 |
研发侧口径(引 R143 研发负责人汇报):等待实现/待测试 mark-green |
| GREEN |
8 |
已实现待部署归集 |
| DONE |
15 |
已归档 |
| 合计 |
86 |
RED0/YELLOW63/GREEN8/DONE15,本轮零流转 |
1.6 数据源健康度
| 数据源 |
读取键数 |
是否正常 |
备注 |
| 需求侧(SRS) |
201 份 specs |
正常 |
窗口零变更 |
| 用例台账(test-cases) |
15 份 / 356 唯一 TC |
正常 |
1774 行,未改写 |
| 场景(SC) |
164 个唯一 ID |
正常 |
被 TC 引用 92 个(56.1%) |
| 执行结果回填 |
3889 例 |
正常 |
全维度本轮实跑,无引用值 |
二、向研发提出的改进建议
| 序号 |
建议标题 |
问题描述 |
根因分析 |
建议方案 |
优先级 |
状态 |
| 1 |
langgraph 上游 LLM 配额(B-142-2 第 15+ 轮) |
51 例 47 过 / 4 红(auto_tag 3 + intent 1),日志 429 AgnesAI free limit ×2、401 ****ab12 invalid ×1;同窗口 /health 200/24ms 但 chat/analyze 120s 零字节(B-167-2) |
免费额度耗尽 → 客户端长退避挂死;intent_classifier.py:62 捕获异常后静默兜底 chat,把 429 伪装成「分类错误」 |
运维轮换有效 key + 升级额度;intent_classifier 兜底前必须记录上游状态码并对 429/401 显式抛错,禁止静默降级 |
P0 |
待处理 |
| 2 |
nutrition_age_dosage 建表恒失败(B-156-1 第 3 轮) |
schema.sql:5345-5354 建表列清单无 product_id,却声明 INDEX idx_product (product_id) → 每次上下文启动 SQLSyntaxErrorException,DatabaseInitializer catch 后仍打「数据表检查完成」 |
DDL 与列定义不一致 + 初始化异常被静默吞掉 |
删该 INDEX 或补 product_id BIGINT 列;DatabaseInitializer 对建表失败须 fail-fast 或至少 ERROR 级日志 |
P1 |
待处理 |
| 3 |
未入库测试文件污染全量口径(B-162-1 第 3 轮) |
GrowthPublicEndpointMappingTest(5 例)git ls-files 零命中,仅存在于主工作区,占 396.4s 且 5 errors 计入红例 |
工作区遗留测试资产未 add/commit(与 B-23/B-26 同源) |
确认归属:有效则入库、无效则删除;跑测前用 git status --short src/test 断言干净 |
P1 |
待处理 |
| 4 |
CI 排除清单双向失真(B-152-1/2 第 4 轮) |
.gitlab-ci.yml:61 BACKEND_OBSERVED_CLASSES(33 类)与本轮实测红类做双向差集:漏拦当前红类、并含大量已绿类 |
清单按「某轮快照」人工维护,无自动对表 |
每次全量后由脚本生成 red-classes.txt 并 diff CI 清单,差集非空即失败 |
P1 |
待处理 |
| 5 |
契约批次剩余红例(S-cfc-147/151) |
DanAssessmentRecordCreate 4 红 + TaskReviewScP11 3 红(声明内预期 RED) |
必填守卫/材料有效性/成员-家庭归属、审查者角色与横向越权未实现 |
按 TDD 推进至 GREEN;TaskController.reviewTask 已补 3 参重载,余 2 参入口语义待收敛 |
P1 |
待处理 |
| 6 |
后端历史存量 17 红(第 15 次零漂移) |
EnergySystemFlow 6 / DimensionRegistryMap 3 / Orchestration 2 / WechatLogin 2 / MembershipPay 1 / PaymentORD 1 / TeamProfitCron 1 / GuideModule 1 |
历史契约/逻辑缺口长期未闭环 |
按缺陷台账逐类闭环,Energy 6 首攻(收益最大) |
P2 |
待处理 |
三、本轮阻塞与风险
| 阻塞项 |
影响范围 |
阻塞类型 |
处置进展 |
需要协调 |
189 节点 account-roles 502(B-167-1) |
admin 登录链路 E2E |
环境/网络 |
首跑 2 例红 → 本机直连 4/4=200、189 复跑 5/5 → 判节点侧网关瞬态,已给用例加「502 退避重试」建议 |
运维排查 189 出网链路 |
| 251 live LLM 挂死(B-167-2) |
langgraph 在线对话/解析 |
运维/AI |
/health 200 而 chat/analyze 120s 零字节,与 pytest 429 同源 |
升级配额/轮换 key |
nutrition_age_dosage 建表失败(B-156-1) |
后端 schema 初始化 |
研发(P1) |
延续第 3 轮未修 |
研发修 schema.sql |
| 后端未入库测试文件(B-162-1) |
全量口径漂移 |
测试(P1) |
延续;本轮仍在编译执行(5 errors/396s) |
确认入库或删除 |
| 204 节点失联(B-95) |
204:4090 浏览器节点 |
运维 |
本轮探活 000;189/251 在线 |
运维恢复 204 |
| 根级 16 红(B-36) |
根级黑盒套件 |
测试/环境 |
9082 未启动,全 fetch failed;连续第 51 轮 |
提供常驻 9082 或改用 mock |
四、下轮工作计划
| 计划项 |
预计完成时间 |
前置依赖 |
备注 |
| 后端全量随源变更实跑维持 |
每轮 |
— |
零源码变更轮可采信,但连续采信不超过 2 轮 |
| langgraph 实跑复验 + live 端点复探 |
每轮 |
运维升级额度/轮换 key |
429 消除后目标 51/51,连续 2 轮销号 B-142-2 |
| 契约批次 S-cfc-147/151 红例跟进 |
每轮 |
研发 TDD 推进 |
7 红转黄/转绿 |
| 锚点补齐(G9/G14) |
2 轮内 |
测试侧 |
优先 0 锚点台账:vendor 0/17、health-datasource-bridge 0/17、deep-dive-plan-activation 0/6 |
| 浏览器 30 例(含 dx)在 204 恢复后三节点分摊 |
每轮 |
204 在线 |
现由 189 + 本机双节点承担 |
五、门禁结论与证据
5.1 门禁结论
⛔ 不通过(有条件)。双目标仍未完全达成:① 所有用例通过 ❌(红 51 例:后端 28 + langgraph 4 + 前端 3 预期 RED + 根级 16);② 覆盖全部 SRS+场景含异常流 ❌(严格可执行锚点 66/356 = 18.5%,场景被 TC 映射 92/164 = 56.1%)。
本轮最大正向:B-142-1 /api/admin/** 鉴权门闭环 —— 6 个匿名 POST 端点全部 401(历轮 /api/admin/families/overview 长期 200 + code:400);langgraph 由 41/10 回升至 47/4;189 与 251 双节点派发全通(G10 ✅)。
复评条件:① langgraph 连续 2 轮 51/51;② 后端红例降至 ≤10(先闭环 EnergySystemFlow 6);③ 严格锚点 ≥40%;④ CI 排除清单双向差集为空。
5.2 实测明细(证据)
| 维度 |
用例集 |
结果 |
用时 |
说明 |
| 后端全量 |
cd cfc-backend && mvn -o -B clean test(JDK1.8.0_25 + Maven 3.6.1) |
361 类 / 3045 例 / 3013 过 / 22F + 6E + 4S = 98.95%(剔 skip 99.05%) |
60:00(08:44→09:44) |
13 红类:存量 17 例(EnergySystem 6 / DimensionRegistryMap 3 / Orchestration 2 / WechatLogin 2 / MembershipPay 1 / PaymentORD 1 / TeamProfitCron 1 / GuideModule 1)第 15 次零漂移 + 预期 RED 6 例(S-cfc-147 DanAssessment 4 / S-cfc-151 TaskReview 2)+ 未入库文件 5 errors(GrowthPublicEndpointMappingTest,B-162-1);361/361 XML 全产出、2121+367 源 0 编译错、dump 0 |
| cfc-frontend Jest |
42 套件 |
609 passed / 3 failed / 12 skipped(624) |
42.2s |
3 红 = S-cfc-132/133 预期 RED(RED-A7、AC-R1、AC-R2,组件 consignee-edit.vue/health-plan-summary.vue 未交付) |
| cfc-web Jest |
17 套件 |
116 passed(116) |
40.2s |
连续多轮零漂移 |
| 浏览器 admin@189 |
--project=admin-desktop |
5 passed(复跑,EXIT=0) |
1.2m |
首跑 3/5(account-roles 502,B-167-1);spec blob 4703d73fb 与本机一致 |
| 浏览器 admin(本机) |
--project=admin-desktop |
5 passed |
1.8m |
与 189 互为对照,证明 502 为节点侧 |
| 浏览器 frontend(本机) |
--project=frontend-mobile |
6 passed |
58.1s |
TC-F-U01~U06 |
| 浏览器 shop(本机) |
--project=shop-api |
4 passed |
18.2s |
价格排序契约 |
| 浏览器 health(本机) |
-c playwright.config.health.js |
13 passed |
13.9s |
华为/小米/健康方案鉴权契约全 401 |
| 浏览器 dx(本机) |
--project=dx-bridge |
2 skipped |
— |
端点 404(B-DX-1),不假绿 |
| langgraph@251 |
pytest -q --ignore=tests/qna --ignore=tests/test_chat.py |
47 passed / 4 failed(51) |
165.32s |
4 红全环境:429 AgnesAI free limit ×2 + 401 ****ab12 ×1;EXIT= 未落盘(B-126 复现) |
| 根级黑盒(本机) |
cd tests && npx jest -c jest.config.js |
7 passed / 16 failed(23) |
5.0s |
9082 未启动,全 fetch failed(B-36 第 51 轮) |
| 线上可达性 |
GET /admin /frontend / |
302 / 302 / 404 |
— |
与 R165 一致(B-141-3) |
| 线上鉴权 |
6 个匿名 POST |
6/6 = 401 |
— |
mind/fortune、energy/overview、health/plan/list、huawei、xiaomi、admin/families/overview → B-142-1 闭环 |
变更触发判定:已触发 —— B-142-1 闭环(鉴权语义变化)+ langgraph 41→47 + 新增 3 条 blocker + 2 份游离报告归档 → 提交远程并通知研发。
5.3 20 类测试覆盖矩阵(三态:已发现 / 未发现 / 待核实)
| # |
类别 |
状态 |
证据(本轮实测) |
| 1 |
单元测试 |
✅ 已发现 |
后端 361 类 / 3045 例;前端 42 套 624 例;管理端 17 套 116 例 |
| 2 |
测试覆盖率 |
⚠️ 待核实 |
cfc-web 实测 10.08/6.06/7.48/9.95(Stmts/Branch/Func/Lines);后端 pom.xml 无 JaCoCo 插件(grep -c jacoco = 0)→ 后端覆盖率未发现度量手段 |
| 3 |
变异测试 |
❌ 未发现 |
三个模块 pom.xml/package.json 均无 pitest/stryker 配置 |
| 4 |
集成测试 |
✅ 已发现 |
src/test/**/integration/** 61 个类;本轮 GuideModule/EnergySystem 等实跑 |
| 5 |
契约测试 |
✅ 已发现 |
*ContractTest.java 107 个类;本轮 13 红类中 5 个为契约类 |
| 6 |
接口 API 测试 |
✅ 已发现 |
health 套件 13 例(华为/小米/健康方案鉴权契约)+ shop 4 例排序契约 |
| 7 |
系统/端到端 |
✅ 已发现 |
Playwright 30 例(admin 5×2 节点、fe 6、shop 4、health 13、dx 2 跳) |
| 8 |
验收 UAT |
❌ 未发现 |
无 UAT 计划/签收记录资产 |
| 9 |
BDD 规格 |
❌ 未发现 |
无 .feature 文件;场景以 Markdown 表述 |
| 10 |
冒烟测试 |
✅ 已发现 |
tests/playwright.config.smoke.js + tests/e2e/ci-smoke.spec.js(本质检未重跑) |
| 11 |
回归测试 |
✅ 已发现 |
CI backend-observed-junit / tests-jest-observed + 本轮全量回归 |
| 12 |
探索性测试 |
❌ 未发现 |
无 charter/会话记录资产 |
| 13 |
性能测试 |
❌ 未发现 |
无 k6/JMeter/Gatling 脚本;ActivityControllerTest 304s 类属单测耗时非压测 |
| 14 |
可靠性测试 |
❌ 未发现 |
无故障注入/长稳/重试策略验证资产 |
| 15 |
安全测试 |
❌ 未发现 |
.gitlab-ci.yml 无 sast/gitleaks/dependency 作业(grep -c = 0);本轮仅有 6 端点匿名鉴权探针 |
| 16 |
兼容性测试 |
❌ 未发现 |
Playwright 仅 chromium 单浏览器;无设备/分辨率矩阵 |
| 17 |
可用性测试 |
❌ 未发现 |
无可用性任务/问卷资产 |
| 18 |
无障碍测试 |
❌ 未发现 |
无 axe/pa11y 配置与断言 |
| 19 |
QA 流程 |
✅ 已发现 |
blockers.md(B-1~B-167 台账)+ automation-status.md + 研发/测试交接通知 |
| 20 |
质量指标 |
⚠️ 待核实 |
docs/tdd/tools/test_report_metrics.py 存在但运行零 stdout(B-124 第 6 轮),度量靠内联统计复算 |
5.4 五要素问题清单
① langgraph 上游 LLM 配额导致 4 例环境红(B-142-2 / B-167-2)
- 问题描述:251 实派 51 例 47 过 4 红;日志
429 AgnesAI free limit ×2、401 api key ****ab12 invalid ×1;同窗口 /health 200/24ms 而 POST /api/v1/chat、/api/v1/analyze 120s 零字节。
- 测试 bug 点:
tests/test_auto_tag.py::test_auto_tag_endpoint_responds、test_auto_tag_valid_format、test_auto_tag_empty_content、tests/test_intent.py::test_classify_recommend(断言取真实 LLM 返回,未隔离上游)。
- 最优修改方案:对这 4 例注入 stub LLM client(
respx/monkeypatch 拦截 AgnesAI 端点),保留 1 例真实链路用例并标 @pytest.mark.live;intent_classifier.py:62 兜底前记录上游状态码,429/401 显式抛出而非默认 chat。
- 修改目的:把「配额波动」与「代码回归」解耦,使 G7 可判定;同时消除静默兜底掩盖的真实故障。
- 闭环:stub 后 51/51 连续 2 轮全绿 → 销号 B-142-2;运维侧额度恢复后
@live 用例单跑通过。
② 未入库测试文件污染全量口径(B-162-1)
- 问题描述:
GrowthPublicEndpointMappingTest(5 例)git ls-files 零命中,仅存于主工作区;本轮耗 396.4s、5 errors 全计入红例。
- 测试 bug 点:
cfc-backend/src/test/java/com/etotem/cfc/config/GrowthPublicEndpointMappingTest.java(未跟踪);断言依赖 ServletRequestPathUtils.PATH 请求属性,在 standalone MockMvc 下恒缺失。
- 最优修改方案:确认归属——有效则以
MockMvcBuilders.webAppContextSetup 或显式 ServletRequestPathUtils.parseAndCache 修正后入库;无效则删除文件。
- 修改目的:消除「同名不同版」口径漂移,避免红例数被不可复现资产污染。
- 闭环:
git status --short cfc-backend/src/test 为空 + 全量红例由 28 → 23 → 复算一致。
③ nutrition_age_dosage 建表恒失败(B-156-1,第 3 轮)
- 问题描述:
schema.sql:5345-5354 列清单无 product_id,却声明 INDEX idx_product (product_id) → 34 次上下文启动均 SQLSyntaxErrorException,DatabaseInitializer catch 后仍打印「数据表检查完成」,表从未创建。
- 测试 bug 点:无 DDL 冒烟用例;
DatabaseInitializer 无「建表成功」断言。
- 最优修改方案:删该 INDEX 或补
product_id BIGINT 列(与实体 NutritionAgeDosage.java 对齐);DatabaseInitializer 对建表失败改为 ERROR/WARN 可观测,并新增 1 条 schema-ddl-smoke 用例逐表 SHOW TABLES。
- 修改目的:让 schema 缺陷在启动阶段即暴露,而非等业务查询
Unknown column。
- 闭环:启动日志
SQLSyntaxErrorException 计数 = 0 且 SHOW TABLES LIKE 'nutrition_age_dosage' 命中。
④ CI 排除清单双向失真(B-152-1/2,第 4 轮)
- 问题描述:
.gitlab-ci.yml:61 清单 33 类 vs 实测红类 13 类 → 漏拦 6 类(GrowthPublicEndpointMappingTest、UserServiceWechatLoginTest、UserServiceWechatLoginContractTest、DanAssessmentRecordCreateContractTest、TaskReviewScP11ContractTest、TeamProfitCronContractTest)→ backend-blocking-junit 必然失败;同时 26 类已转绿仍被排除 → 门禁覆盖被人为缩小。
- 测试 bug 点:CI 变量为静态快照,无自动对表机制。
- 最优修改方案:全量跑完后由脚本产出
red-classes.txt,CI 增加 diff 步骤:实测红类 − 清单 与 清单 − 实测红类 任一非空即 fail(并输出差异)。
- 修改目的:把「已知红类白名单」从人工维护变为机器校验,恢复门禁有效性。
- 闭环:双向差集为空且
backend-blocking-junit 在 GREEN 类上通过。
⑤ 189 节点 account-roles 502 瞬态(B-167-1)
- 问题描述:首跑 TC-A-U04/U05 失败,断言「account-roles 接口应 200」实得 502;本机直连同端点 4/4=200,189 复跑 5/5。
- 测试 bug 点:
tests/e2e-live/admin-live.spec.js:160/188 对 account-roles 只接受 200,无 5xx 退避。
- 最优修改方案:
fillPhoneAndAwaitRoles 内对 502/503 做 2 次指数退避重试;仍失败则输出节点网络证据(响应头/耗时)而非仅断言码。
- 修改目的:区分「节点网络瞬态」与「接口契约回归」,避免环境抖动被记成产品缺陷。
- 闭环:连续 3 轮 189 首跑 5/5(本轮记观察 1/3)。
⑥ 可执行锚点覆盖率不足(G9)
- 问题描述:356 条台账 TC 中仅 66 条在测试资产中可定位(18.5%);
vendor.md 0/17、health-datasource-bridge.md 0/17、deep-dive-plan-activation.md 0/6、teacher.md 3/43、admin.md 5/38。
- 测试 bug 点:用例标题未内嵌 TC 编号,资产侧无
@TC-* 约定(B-30 同源)。
- 最优修改方案:按台账分域补锚点,优先级 0 锚点三本(vendor / health-datasource-bridge / deep-dive-plan-activation);每例测试首行注释
// TC-XXX-nn。
- 修改目的:使「需求→TC→资产」可反向追溯,把覆盖率从「用例数」升级为「需求覆盖」。
- 闭环:严格锚点 ≥ 40%(≥143/356)且三本 0 锚点台账归零。
⑦ 契约口径待裁决(DimensionRegistryMap 3 红,P-9 第 10 轮)
- 问题描述:
map_emptyLegacy_returnsNullData 期望 $.data 为 null 实得 "";map_missingLegacy_returnsBadRequest 期望 400 实得 200;map_unknownLegacy_returnsNullData 期望 null 实得原值。
- 测试 bug 点:
integration/controller/DimensionRegistryMapContractTest(3 例),契约文本未明确「空/缺参/未知值」三态语义。
- 最优修改方案:由产品/研发确认三态契约后二选一——改实现或改断言,并在
API_REFERENCE.md 固化。
- 修改目的:结束同一契约连续 10 轮「红但无人认领」的状态。
- 闭环:契约文本落定 + 用例与实现一致 + 连续 2 轮绿。
⑧ TaskReview 横向越权未拦截(S-cfc-151,2 红)
- 问题描述:
permission_crossFamilyReview_mustBeRejected 无审批人身份时 reviewTask 直接放行并进入发分链路;permission_handler_mustDeclareReviewerIdentity 控制器未声明身份参数。
- 测试 bug 点:
unit/TaskReviewScP11ContractTest(2 例)。研发 f139a05a2 已补 3 参重载(3 红 → 2 红)。
- 最优修改方案:控制器
reviewTask 增加 @RequestAttribute("userId"),服务层 isQualifiedReviewer 校验审批人属该家庭/角色,2 参入口仅作兼容并禁用发分。
- 修改目的:封堵跨家庭越权审批(安全缺陷,P1)。
- 闭环:2 例转绿 + 补充「跨家庭/匿名/非家长」三类负向用例。
5.5 覆盖缺口清单
| 缺口类型 |
现状 |
风险 |
建议测试设计 |
优先级 |
闭环方式 |
| 需求锚点(G9) |
严格 66/356 = 18.5% |
无法回答「哪些 SRS 场景无自动化」 |
分域补 TC-* 注释锚点,先攻 0 锚点三本 |
P1 |
锚点 ≥40% |
| 场景映射 |
164 场景中被 TC 引用 92(56.1%) |
44% 场景无用例 |
反向核对脚本产出「场景→TC→资产」缺口表 |
P1 |
映射 ≥80% |
| 后端覆盖率 |
无 JaCoCo |
无法量化单测有效性 |
pom 增 jacoco-maven-plugin,阈值先设 40% 观察 |
P2 |
覆盖率报告入库 |
| 变异测试 |
无 |
断言强度未知 |
先对 service/ 3 个核心类试点 pitest |
P3 |
变异得分 ≥50% |
| 性能/可靠性 |
无脚本 |
无容量与恢复证据 |
k6 脚本覆盖 /api/energy/overview 等 5 高频接口 |
P2 |
基线 P95 入库 |
| 安全扫描 |
CI 无 sast/依赖扫描 |
供应链与明文凭据风险(B-31) |
CI 加 gitleaks + dependency-check(需授权联网) |
P1 |
作业为绿 |
| 兼容性/无障碍 |
仅 chromium |
移动端/无障碍无证据 |
增 webkit+firefox project;axe 断言静态页 |
P3 |
矩阵入库 |
| UAT/BDD/探索性 |
无资产 |
验收与探索无记录 |
每里程碑 1 份 UAT 清单 + 1 次 60min 探索会话记录 |
P3 |
记录入库 |
附录
附录 A:本轮新增测试用例明细
无。SRS/场景窗口零变更,按 G12 不新增用例;覆盖缺口已转 §五 缺口清单与下轮计划(锚点补齐)。
附录 B:任务分派与会话恢复明细
| 任务号 |
目标会话标签 |
分派时间 |
分派类型 |
当前状态 |
恢复会话标签 |
恢复原因 |
恢复时间 |
| R167-1 |
opencode-189 |
08:44 / 09:0x |
shell 派发(PowerShell) |
done 5/5 |
opencode-189 |
首跑 2 例 502 失败 → 复跑取证 |
09:0x |
| R167-2 |
opencode-251 |
08:55 |
kick(setsid 分离)+ 单次读 |
done 47/4 |
— |
— |
— |
| R167-3 |
local-browser |
08:47~09:20 |
直跑(串行) |
done 28 过 + 2 跳 |
— |
— |
— |
| R167-4 |
local-mvn |
08:44 |
直跑(后台) |
done |
— |
— |
— |
附录 C:新发现问题明细
| 问题 ID |
能力键/任务号 |
问题类型 |
路由去向 |
登记时间 |
处置状态 |
关联 sha |
| B-167-1 |
admin 登录链路 |
环境/网络(189 account-roles 502) |
运维 |
08:47 |
观察(复跑通过) |
8e4d17e83 |
| B-167-2 |
langgraph live chat/analyze |
运维/AI(120s 零字节) |
运维 |
09:22 |
待处理(与 B-142-2 同源) |
fef17fd44 |
| B-167-3 |
R166 结论勘误 |
测试(无 Chromium 误判) |
测试侧已纠正 |
08:40 |
已闭环 |
— |
附录 D:口径与命令
- 后端:
cd cfc-backend(Maven 工程根在此,非仓库根)+ JAVA_HOME=/d/jdk1.8.0_25 + /d/maven/apache-maven-3.6.1/bin/mvn -o -B clean test
- Playwright 必须在
tests/ 目录内跑(根目录会因 @playwright/test 双版本报 test.describe() called here)
- 251 派发:
POST /api/shell?location[directory]=<dir> + setsid nohup 分离 + 本地等待后单次读日志(禁轮询建 shell,B-125)
- 锚点双口径(B-124 延续):严格 66/356 = 18.5%(排除
tests/e2e/api/generated);宽 325/356 = 91.3%(含 generated 虚高,不作门禁依据)