report-test-2026-11-12-R167.md 27 KB

测试负责人工作汇报(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 虚高,不作门禁依据)