|
@@ -0,0 +1,359 @@
|
|
|
|
|
+# 测试负责人工作汇报(R174 轮)
|
|
|
|
|
+
|
|
|
|
|
+> 本汇报按《测试负责人工作汇报模板》填写。R174 为**全量回归实跑轮**:后端从干净 HEAD 全量重跑,其余六个套件(管理端/小程序 Jest、浏览器 E2E 双节点、线上 API 非功能层、langgraph@251、根级黑盒)全部本轮实测;窗口内**零新 SRS/场景变更提交**(但 3 份 11-06~09 需求变更的派生用例与 2 份 11-12 需求变更用例在 R173 后完成并本轮入册)。
|
|
|
|
|
+> 对比基线 R173(20:20 提交):窗口 `445c00d5c8..9b2688a3a` 至本机 HEAD,远端零新功能源码合入(仅 auto bump);工作区 7 个派生用例文件入册 `f8acc8c52`。
|
|
|
|
|
+> 本轮核心结论:**全站 3979 例 / 3893 过(97.84%,剔 skip 98.46%)**;后端 3103 例 98.61%(剔 skip 98.74%),存量红 18(11 类)与 R173 逐类逐例一致(**零漂移第 20 次**);langgraph@251 **48/51**(3 红全 429/401,较 R173 改善 2 例,环境型延续);浏览器 **28/28 + 2 跳**;线上 API **25 过 / 7 跳 / 0 红**;门禁 **不通过(承袭)**——卡口仍是 G2 红例、G7 langgraph 上游未恢复、G9 锚点、G11 CI 清单失真。派生用例 **+21 入册**,SC 基线 241→244(G-1 缺口关闭)。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 基本信息
|
|
|
|
|
+
|
|
|
|
|
+| 项目 | 内容 |
|
|
|
|
|
+|------|------|
|
|
|
|
|
+| 汇报人 | 测试负责人(自动化测试闭环任务) |
|
|
|
|
|
+| 汇报周期 | 2026年11月12日 19:53 ~ 20:55(第 174 轮) |
|
|
|
|
|
+| 基线 | `cfclub @ 9b2688a3a`(R173 后,251 派发器 LOG 路径守卫) |
|
|
|
|
|
+| 窗口内需求变更 | **3 份既往需求(11-06 团队收益/11-07 财富中心/11-09 手签名)派生用例在本轮入册**;11-12 两份需求变更(聊天仅会员可见 + 团队邀请改造)用例本轮入册;窗口内无新提交的 SRS 变更文档 |
|
|
|
|
|
+| 窗口内源码变更 | 零功能源码;仅 251 节点 auto bump `1169f3ade`(与本机零源码差异) |
|
|
|
|
|
+| 负责模块/单元 | 全站:cfc-backend JUnit · 管理端 admin@189 · 小程序 H5/shop/health/dx@本机 · cfc-langgraph@251 · cfc-web/ cfc-frontend Jest · 根级黑盒 · 线上 API 非功能层 |
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 一、本轮工作数据汇总
|
|
|
|
|
+
|
|
|
|
|
+### 1.1 测试用例建设
|
|
|
|
|
+
|
|
|
|
|
+| 指标 | 数量 | 填写说明 |
|
|
|
|
|
+|------|------|----------|
|
|
|
|
|
+| **本轮新增测试用例数\*** | **+21 个** | 需求变更派生入册:admin.md SC-A-23/24 三流 9 例 + chat-invite-rework TC-X-23~31 三流 12 例(并入册时修正 TC-A-23-E 编号占用冲突),合计 +21;SC 基线 241→244 |
|
|
|
|
|
+| **本轮验证执行测试数\*** | **3979 个** | 后端 JUnit 3103 + 前端 Jest 624 + 管理端 116 + langgraph 51 + 浏览器 30(28 过 + 2 跳)+ 线上 API 32(25 过 + 7 跳)+ 根级 23 |
|
|
|
|
|
+| **用例通过率** | **97.84%**(3893/3979;剔除 skip **98.46%**) | 红 61 / 跳 25,明细见 §3.3 |
|
|
|
|
|
+| **用例台账** | `tests/test-cases/` 17 份(含 README,本轮 +1 新文件) | 场景 218(含派生 3)/ 映射 155 / TC 表行 861+ |
|
|
|
|
|
+
|
|
|
|
|
+### 1.2 会话与任务分发
|
|
|
|
|
+
|
|
|
|
|
+| 指标 | 数量 | 填写说明 |
|
|
|
|
|
+|------|------|----------|
|
|
|
|
|
+| **分派任务数\*** | **3 个** | R174-1 → `opencode-189`(admin-desktop **5/5 EXIT=0**);R174-2 → `opencode-251`(langgraph pytest **48/51**,136.47s);R174-3 → 本机串行(2 套 Jest + 4 组浏览器 + API 层 + 根级 + 后端全量 mvn) |
|
|
|
|
|
+| **恢复智能体会话数\*** | 0 个 | 189 首派即 5/5;**251 发现 4 个残留 pytest 卡死进程**(R150×2 + R173×2,挂 1~2h)→ 按 PID 精确清理后重派(见 §教训练①) |
|
|
|
|
|
+| **当前在用会话数** | 1 个 | 本机后端全量 mvn(后台)运行中 |
|
|
|
|
|
+
|
|
|
|
|
+### 1.2b 各会话当前工作状态列表
|
|
|
|
|
+
|
|
|
|
|
+| 会话标签 | 会话 ID/地址 | 当前状态 | 当前任务 | 静默/空闲时长 | 工作目录 | 备注 |
|
|
|
|
|
+|----------|--------------|----------|----------|---------------|----------|------|
|
|
|
|
|
+| `opencode-189` | 192.168.16.189:4090 | done | admin-desktop UI E2E | 已完成(1.4m) | `C:\code\cfc\tests` | **5/5 EXIT=0** |
|
|
|
|
|
+| `opencode-251` | 192.168.16.251:4096 | done(本会话派发) | langgraph pytest 51 例 | 已完成(136.47s) | `/sc-data/cfc/cfc-langgraph` | **48 过 / 3 红**;节点 HEAD `1169f3ade`(auto bump,零源码差异);3 红全 429/401(环境型) |
|
|
|
|
|
+| `local-browser` | 本机进程 | done | fe / shop / health / dx | 已完成 | `d:\cfc\tests` | fe **6/6**、shop **4/4**、health **13/13**、dx **2 skip**(端点 404) |
|
|
|
|
|
+| `local-api` | 本机进程 | done | 线上 API 冒烟/安全/性能兼容/追溯 | 已完成(16.1s) | `d:\cfc\tests` | **25 过 / 7 跳 / 0 红** |
|
|
|
|
|
+| `local-jest` | 本机进程 | done | cfc-frontend + cfc-web + 根级 | 已完成 | `cfc-frontend` / `cfc-web` / `tests` | fe 609/3/12、web **116/116**、根级 7/16(9082 未起,B-36 第 60 轮) |
|
|
|
|
|
+| `local-backend` | 本机进程 | done | 后端全量 `mvn -o -B clean test` | 已完成(40:12) | `d:\cfc\cfc-backend` | 3103 例 / 3060 过 / 39 红(33F+6E)/ 4 跳,见 §3.3 |
|
|
|
|
|
+
|
|
|
|
|
+### 1.3 问题处置
|
|
|
|
|
+
|
|
|
|
|
+| 指标 | 数量 | 填写说明 |
|
|
|
|
|
+|------|------|----------|
|
|
|
|
|
+| **新测试发现问题数\*** | 0 个(产品缺陷) | 红全部归因:langgraph 3 红(429/401 环境)、根级 16 红(9082 未起)、前端 3 红(S-cfc-132/133 预期 RED)、后端 39 红(存量 18 零漂移 + 未入库 5E + 预期 RED 16) |
|
|
|
|
|
+| **已解决测试相关问题数\*** | 1 个 | 251 残留 pytest 卡死进程清理(4 个 PID 精确 kill,本轮重派成功) |
|
|
|
|
|
+| **待解决测试相关问题数** | 延续 R173 清单(P0×2 / P1×6 / P2×4) | ① B-142-2 langgraph 上游 429/401(P0,本轮 3 红延续);② B-152-1/2 CI 排除清单双向失真(P0/P1);③ B-173-2 API 层入口默认收集 990 例(P1);④ B-156-1 `nutrition_age_dosage` 建表 SQL(P1);⑤ B-162-1 3 类未入库测试文件(P1);⑥ S-cfc-166/168/169 契约预期 RED(P1);⑦ B-173-1 Playwright safe-delete 守卫(P2,本轮 `--output` 规避);⑧ B-173-3 后端全量耗时(P2);⑨ B-170-1/⑩ B-126/⑪ B-36/⑫ B-95 延续 |
|
|
|
|
|
+
|
|
|
|
|
+### 1.4 本轮 git 提交与推送证据(真理证据)
|
|
|
|
|
+
|
|
|
|
|
+| 提交 sha | 关联任务/能力键 | 阶段 | 触及文件类型 | 目标分支 | 已推送远端 | 备注 |
|
|
|
|
|
+|----------|-----------------|------|--------------|----------|------------|------|
|
|
|
|
|
+| `f8acc8c52` | 需求变更派生用例入册(G12) | 用例更新 | 7 文件(admin.md / chat-invite-rework.md / TRACEABILITY / sc-key-map / 3 份需求分析附录) | cfclub | ✅ 本轮推送 | +157/-33,仅文档台账 |
|
|
|
|
|
+| (报告提交) | 全站巡检 R174 | 汇报 | 报告/run/通知/blockers | cfclub | ✅ 本轮推送 | 测试结果有变化(langgraph 45→48、用例 +21 入册)→ 提交并通知研发 |
|
|
|
|
|
+
|
|
|
|
|
+### 1.5 状态机阶段分布(全局进度)
|
|
|
|
|
+
|
|
|
|
|
+| 阶段 | 键数 | 备注 |
|
|
|
|
|
+|------|------|------|
|
|
|
|
|
+| UNTRACKED | 0 | 窗口零新增规格 |
|
|
|
|
|
+| RED | 8 | 承袭研发口径(含 S-cfc-166/168/169 契约 16 例待实现) |
|
|
|
|
|
+| YELLOW | 63 | 承袭 R173 |
|
|
|
|
|
+| GREEN | 8 | 承袭 |
|
|
|
|
|
+| DONE | 15 | 承袭 |
|
|
|
|
|
+| 合计 | 94 | 与研发 161/162 轮汇报口径一致 |
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 二、历史审查记录(阶段 -1 记忆召回)
|
|
|
|
|
+
|
|
|
|
|
+| 项 | 内容 |
|
|
|
|
|
+|---|---|
|
|
|
|
|
+| 上次审查 | **R173(2026-11-12 20:10,提交 `0043a01a4`)**,结论「不通过(承袭)」,langgraph 45/51 红 6 |
|
|
|
|
|
+| 遗留缺口 | 后端存量 18 红 · langgraph 6 红(环境)· 根级 16 红(9082 未起)· CI 清单漏拦 8 类 · 3 个未入库测试文件 |
|
|
|
|
|
+| 本次是否改善 | **部分改善**:langgraph 46→**48 过**(红 5→3);浏览器/API/Jest 全部零漂移;新派生用例 **+21 例入册**(G12 G-1 闭环);但 251 残留进程清理为 B-126 第 N 轮新观察 |
|
|
|
|
|
+| 教训应用 | ① 251 派发**日志路径必须内联命令串**(不用 env 注入,规避 MSYS 改写);② 残留 pytest 进程需按 PID 精确 kill(禁用 `pkill -f pytest` 防自伤);③ Playwright 用 `--output` 一次性目录规避 safe-delete 守卫 |
|
|
|
|
|
+
|
|
|
|
|
+> 本次为该对象**第 174 次**审查,有历史记录;上述内容仅作对照,**本次结论全部来自本轮实测**。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 三、项目画像与覆盖矩阵
|
|
|
|
|
+
|
|
|
|
|
+### 3.1 项目画像(承袭并本轮核验)
|
|
|
|
|
+
|
|
|
|
|
+| 维度 | 内容 |
|
|
|
|
|
+|---|---|
|
|
|
|
|
+| 业务定位 | 家庭教育「五维能量」(身/心/智/行/富)测评 + 成长规划 + 商城 + 健康报告解析的微信小程序 + Web 管理端全栈系统 |
|
|
|
|
|
+| 技术栈 | 后端 Spring Boot 2.7.18 + MyBatis-Plus + Java 8(9082)· 小程序 uni-app Vue2 · 管理端 Vue2 + Element UI(8082)· AI 服务 FastAPI + LangGraph + ChromaDB(9000) |
|
|
|
|
|
+| 模块结构 | `cfc-backend`(2121 主源 / 374 测试源含 3 未跟踪)/ `cfc-frontend` / `cfc-web` / `cfc-langgraph` / `dan/danshop` / `tests` |
|
|
|
|
|
+| 关键路径 | 登录(微信/direct-register)→ 家庭与成员 → 五维测评/能量 → 成长规划(规划师)→ 商城订单/优惠券/退款 → 健康报告上传解析 → AI 对话(仅会员可见,本轮新增用例) |
|
|
|
|
|
+| 测试现状 | 后端 3103 例本轮实跑(98.61%);前端 Jest 624;管理端 116;浏览器 28+2skip;API 层 32;langgraph 51;根级黑盒 23 |
|
|
|
|
|
+| 质量目标 | 全量通过率 ≥98%、浏览器 E2E 100%、langgraph 100%、锚点覆盖率 ≥80%、CI 硬门禁可用 |
|
|
|
|
|
+| 风险点 | LLM 上游配额(429/401)· 契约 RED 批次(16 例)· 数据库迁移静默失败 · CI 排除清单失真 · 未入库测试资产 · 251 节点残留进程堆积 |
|
|
|
|
|
+
|
|
|
|
|
+### 3.2 20 类测试覆盖矩阵(全类不省略)
|
|
|
|
|
+
|
|
|
|
|
+| # | 测试类型 | 状态 | 本轮证据 |
|
|
|
|
|
+|---|---|---|---|
|
|
|
|
|
+| 1 | 单元测试 | ✅ 已发现 | 后端 3103 例实跑(98.61%);前端 Jest 624(609 过);管理端 116/116 |
|
|
|
|
|
+| 2 | 测试覆盖率 | ⚠️ 部分 | cfc-web `--coverage` 历轮 Lines ~9.95%;后端 JaCoCo 未配置 → 行覆盖无法量化(G-170-3 延续) |
|
|
|
|
|
+| 3 | 变异测试 | ❌ 未发现 | 仓库无 PIT/Stryker 配置;离线档无工具(未实测,不得视为通过) |
|
|
|
|
|
+| 4 | 集成测试 | ✅ 已发现 | 后端 `integration/**`(含 GrowthPublicEndpointMappingTest 5E—未入库 B-162-1) |
|
|
|
|
|
+| 5 | 契约测试 | ✅ 已发现 | 后端 `*ContractTest` 多组(含 S-cfc-166/168/169 预期 RED);API 层 32 例 0 红 |
|
|
|
|
|
+| 6 | 接口 API 测试 | ✅ 已发现 | 线上 32 例:25 过 / 7 跳 / 0 红 |
|
|
|
|
|
+| 7 | 系统 / 端到端 | ✅ 已发现 | 浏览器 28/28(189 admin 5 + 本机 fe 6 / shop 4 / health 13)+ dx 2 skip |
|
|
|
|
|
+| 8 | 验收 UAT | ⚠️ 待核实 | 无独立 UAT 用例库;以 17 份台账近似验收口径 |
|
|
|
|
|
+| 9 | BDD 规格 | ❌ 未发现 | 无 `.feature` / Cucumber 资产 |
|
|
|
|
|
+| 10 | 冒烟测试 | ✅ 已发现 | api-smoke 4/4 + 根级冒烟 7/23 过 |
|
|
|
|
|
+| 11 | 回归测试 | ✅ 已发现 | 本轮全量回归 3979 例(后端 3103 + 前端 624 + 管理端 116 + 浏览器 28 + API 32 + lg 51 + 根级 23) |
|
|
|
|
|
+| 12 | 探索性测试 | ⚠️ 部分 | 以「安全/健壮性探针」形式执行,未形成独立探索会话记录 |
|
|
|
|
|
+| 13 | 性能测试 | ⚠️ 部分 | 仅冒烟级(20 并发无 5xx);无真实压测(execute 档需联网授权,未执行) |
|
|
|
|
|
+| 14 | 可靠性测试 | ⚠️ 部分 | 迁移静默失败持续观察(B-170-1/B-156-1);251 残留进程堆积新观察 |
|
|
|
|
|
+| 15 | 安全测试(SAST/DAST/依赖) | ✅ 已发现(部分) | DAST 类全绿(IDOR 403、越权拒绝、XSS 不回显、上传被拒);SAST / 依赖漏洞扫描未执行(需联网未授权) |
|
|
|
|
|
+| 16 | 兼容性测试 | ✅ 已发现 | 多端 UA 一致性通过;仅 Chromium,无 Firefox/WebKit 矩阵 |
|
|
|
|
|
+| 17 | 可用性测试 | ❌ 未发现 | 无可用性量表 / 用户任务完成率采集 |
|
|
|
|
|
+| 18 | 无障碍测试 | ❌ 未发现 | 无 axe / WCAG 断点 |
|
|
|
|
|
+| 19 | QA 流程 | ⚠️ 部分 | 有 blockers/automation-status/台账;CI 硬门禁因排除清单失真恒红(G11);派生用例入册流程本轮走通(G12) |
|
|
|
|
|
+| 20 | 质量指标 | ⚠️ 部分 | 通过率/红/跳可取;锚点率 13.4%(官方)/ ~20%(严格)两套口径并存(B-124) |
|
|
|
|
|
+
|
|
|
|
|
+**结论**:20 类中 ✅ 已发现 8 类、⚠️ 部分 8 类、❌ 未发现 4 类(变异、BDD、可用性、无障碍)。「未发现」仅表示扫描未命中,**不等于项目未做**。
|
|
|
|
|
+
|
|
|
|
|
+### 3.3 本轮实测数据总表
|
|
|
|
|
+
|
|
|
|
|
+| 套件 | 命令/节点 | 例数 | 过 | 红 | 跳 | 耗时 |
|
|
|
|
|
+|---|---|---|---|---|---|---|
|
|
|
|
|
+| 后端 JUnit | `cd cfc-backend && JAVA_HOME=jdk1.8.0_25 mvn -o -B clean test` | **3103** | **3060** | **39**(33F+6E) | 4 | **40:12** |
|
|
|
|
|
+| 管理端 Jest | `cd cfc-web && npx jest --ci` | 116 | 116 | 0 | 0 | 135.33s |
|
|
|
|
|
+| 前端 Jest | `cd cfc-frontend && npx jest --ci` | 624 | 609 | 3 | 12 | 156.67s |
|
|
|
|
|
+| langgraph | 251 `POST /api/shell` → `.venv/bin/python -m pytest` | 51 | **48** | 3 | 0 | 136.47s |
|
|
|
|
|
+| 浏览器 E2E | 189(admin)+ 本机(fe/shop/health/dx) | 30 | 28 | 0 | 2 | 1.4m + 1.1m/19.8s/17.6s |
|
|
|
|
|
+| 线上 API | 4 文件显式点名(api-smoke/security/perf-compat/traceability) | 32 | 25 | 0 | 7 | 16.1s |
|
|
|
|
|
+| 根级黑盒 | `cd tests && npx jest --ci` | 23 | 7 | **16** | 0 | 8.65s |
|
|
|
|
|
+| **合计** | — | **3979** | **3893** | **61** | **25** | ≈45m(后端 40:12 主导) |
|
|
|
|
|
+
|
|
|
|
|
+> 通过率 **97.84%**;剔除 skip **98.46%**。环比 R173(3891/3979=97.79%):**总例数持平 3979**、**过 +2**(langgraph 46→48)、**红 63→61**、**跳 25 持平**。后端 3103 例与 R173 **逐类逐例零漂移(第 20 次)**;耗时 40:12(R173 51:52,**-11:40,B-173-3 观察改善**)。368 个测试类 368 份 surefire XML 全落盘、0 沉默、0 dump。
|
|
|
|
|
+
|
|
|
|
|
+### 3.4 可执行锚点双向核对
|
|
|
|
|
+
|
|
|
|
|
+| 指标 | 数值 |
|
|
|
|
|
+|---|---|
|
|
|
|
|
+| 场景数 / 被 TC 映射 | 218(含派生 3)/ **155(72.1%)** |
|
|
|
|
|
+| 用例台账表行(TC 总数) | 861(R173 口径)+21 派生 = 882 |
|
|
|
|
|
+| 异常流语义条数 | 502(→ 58.3% 口径随行数上升) |
|
|
|
|
|
+| 可执行锚点(资产口径,含 generated) | 115 / 882 = **13.0%** |
|
|
|
|
|
+| 资产文件扫描数 | 545 |
|
|
|
|
|
+| 孤儿锚点(执行有 / 台账无) | 显著存在 → G-170-4 延续 |
|
|
|
|
|
+
|
|
|
|
|
+> 口径声明:13.0% 为 `test_report_metrics.py --scene` 官方口径(资产含 `tests/e2e/api/generated`);严格口径(排除 generated、按唯一编号)历轮 ~18.5~20.7%。两套口径并存属 **B-124 长期未闭环**,同时给数、不择一掩盖。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 四、测试方案与执行档
|
|
|
|
|
+
|
|
|
|
|
+| 项 | 内容 |
|
|
|
|
|
+|---|---|
|
|
|
|
|
+| 目标 | 全量用例通过 + 覆盖 SRS/场景(含异常流);本轮聚焦「后端全量重跑取证 + 存量红是否漂移 + LLM 上游状态 + G12 派生用例入册」 |
|
|
|
|
|
+| 范围 | cfc-backend(全量实跑)· cfc-web · cfc-frontend · tests(根级 + e2e-live + e2e/api)· cfc-langgraph@251 |
|
|
|
|
|
+| 覆盖维度 | 功能(单元/集成/契约/API/E2E)、非功能(安全/性能/兼容)、流程与度量 |
|
|
|
|
|
+| **执行档** | **review(离线档,默认)**——未安装依赖、未启停服务、未联网装包、未改生产代码 |
|
|
|
|
|
+| 未授权未执行 | 依赖漏洞扫描 / 真实压测 / SAST 商业扫描(需联网,本轮无显式联网授权)→ 对应维度标注「未实测」 |
|
|
|
|
|
+| 排除项 | 微信真机、小程序审核链路、支付真实扣款(涉资金,需人工介入) |
|
|
|
|
|
+| 本机环境探针 | JDK `1.8.0_25` ✅ · Maven `3.6.1` ✅ · 9082 **未监听**(→ B-36 环境红) |
|
|
|
|
|
+| 节点探针 | 251:4096 **200** / 251:9000 `/health` **200** · 189:4090 **200** · 204:4090 **000**(B-95 第 34 轮) |
|
|
|
|
|
+
|
|
|
|
|
+> 自动化无人值守运行,按既定默认档位(review 离线)执行;未越过任何需联网/启停服务的边界。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 五、域结论表
|
|
|
|
|
+
|
|
|
|
|
+| 审查维度 | 负责域 | 结论 | 关键证据 |
|
|
|
|
|
+|---|---|---|---|
|
|
|
|
|
+| 单元·组件 | 单元域 | ⚠️ 有条件通过 | 后端 3103 例 **98.61%**;红 39 = 存量 18(零漂移)+ 未入库 GrowthPublic 5E + 新增契约预期 RED 16;前端 609/624(3 红为 S-cfc-132/133 预期 RED);管理端 116/116 |
|
|
|
|
|
+| 集成·接口·契约 | 集成域 | ⚠️ 部分 | 契约批次 30 绿 / 16 预期 RED 承袭;API 层 32 例 **0 红**;线上匿名 401 全部符合 |
|
|
|
|
|
+| 系统·验收·BDD | 系统域 | ⚠️ 部分 | E2E 28/28(双节点)+ dx 2 skip;无 BDD 资产;UAT 未签署 |
|
|
|
|
|
+| 测试保障 | 保障域 | ⚠️ 部分 | 冒烟 4/4;回归全量可复跑;**251 残留进程堆积暴露长驻进程无回收机制(B-126 新观察)** |
|
|
|
|
|
+| 性能·可靠性 | 性能域 | ⚠️ 部分 | 冒烟级并发无 5xx;后端全量耗时 **40:12**(R173 51:52,**-11:40 观察改善**);无真实压测 |
|
|
|
|
|
+| 安全 | 安全域 | ✅ 有条件通过 | DAST 11/11 + 匿名 6/6 401;SAST/依赖扫描未执行 |
|
|
|
|
|
+| 兼容·体验 | 兼容域 | ⚠️ 部分 | Chromium 单引擎;无障碍零资产 |
|
|
|
|
|
+| 流程·度量·代码 | 流程域 | ❌ 不通过 | CI 排除清单第 10 轮失真;锚点口径双轨;未入库测试资产长期游离(B-162-1) |
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 六、覆盖缺口清单
|
|
|
|
|
+
|
|
|
|
|
+| 编号 | 缺口类型 | 现状 | 风险 | 建议测试设计 | 优先级 | 闭环方式 |
|
|
|
|
|
+|---|---|---|---|---|---|---|
|
|
|
|
|
+| G-174-1 | 变异测试 | 无 PIT/Stryker | 断言强度不可度量 | 后端接 PIT(仅 `unit/` 包,阈值 40%) | P2 | 引入插件后跑基线批次 |
|
|
|
|
|
+| G-174-2 | BDD 规格 | 无 `.feature` | 需求→用例→代码链路断裂 | 对 S-cfc-16x 契约批用 Gherkin | P2 | 首批 5 个能力键试点 |
|
|
|
|
|
+| G-174-3 | 覆盖率 | 后端无 JaCoCo | 行覆盖空白 | 接 JaCoCo 与 surefire 同批出报告 | P1 | 出首份 line/branch 基线 |
|
|
|
|
|
+| G-174-4 | 无障碍 | 零资产 | 合规预期 | axe-core 接 admin 首页 | P3 | 接入后出违规清单 |
|
|
|
|
|
+| G-174-5 | 真实压测 | 仅 20 并发冒烟 | 容量未知 | k6 3 档(50/200/500 VU)需联网授权 | P2 | 授权后出 P95/错误率 |
|
|
|
|
|
+| G-174-6 | 锚点覆盖 | 13.0%(官方)/ ~20%(严格) | 追溯不足 | 统一 `TC-<域>-U<NN>` + 台账回填 | P1 | inventory 重生成后 G9 ≥ 60% |
|
|
|
|
|
+| G-174-7 | 251 长驻进程回收 | 2 个历史轮次 pytest 均残留 1h+ | 资源泄漏、配额占用、脏数据干扰后续派发 | kick 脚本增加 `--timeout` 硬杀 + 收尾清理钩子 | P1 | 连续 2 轮 251 零残留进程 |
|
|
|
|
|
+| G-174-8 | 后端全量耗时 | 40:12(R173 51:52,改善 -11:40) | 回归时间仍偏高(历史基线 45m) | `@SpringBootTest` 上下文复用 + 调度关停 | P2 | 同机同 HEAD 连续 2 轮 ≤45m |
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 七、五要素问题清单
|
|
|
|
|
+
|
|
|
|
|
+### P-174-1(P0,环境)langgraph 上游配额/凭据双重失效,3 例恒红(第 11 轮)
|
|
|
|
|
+- **① 问题描述**:251 节点 `pytest` 48 过 / 3 红;3 红全部落在 `test_auto_tag`(content_relevance / short_content / empty_content),日志实证 `RateLimitError 429 AgnesAI free limit` 与 `401 api key ****ab12 invalid`(较 R173 红数 5→3,配额有缓解但未根除)。
|
|
|
|
|
+- **② 测试 bug 点**:`cfc-langgraph/tests/test_auto_tag.py::test_auto_tag_content_relevance|short_content|empty_content`。
|
|
|
|
|
+- **③ 最优修改方案**:运维更换有效 LLM key 并升级 Token Plan;`intent_classifier.py:62` 异常兜底改为抛错或返回 `UNKNOWN`。
|
|
|
|
|
+- **④ 修改目的**:让 AI 能力回归「确定性可测」,langgraph 门禁转绿。
|
|
|
|
|
+- **⑤ 闭环**:251 连续 2 轮 51/51 且 `/api/v1/chat`、`/api/v1/analyze` 均 200,销号 B-142-2。
|
|
|
|
|
+
|
|
|
|
|
+### P-174-2(P0,CI)后端 CI 排除清单双向失真(第 10 轮未修)
|
|
|
|
|
+- **① 问题描述**:`.gitlab-ci.yml:61` 的 `BACKEND_OBSERVED_CLASSES`(33 类)与本轮实测红类双向差集:漏拦 + 陈旧并存。
|
|
|
|
|
+- **② 测试 bug 点**:`.gitlab-ci.yml:61`(清单本身);判定脚本缺失。
|
|
|
|
|
+- **③ 最优修改方案**:新增 `docs/tdd/tools/ci_class_diff.py` 自动双向差集,作为 CI `before_script` 校验。
|
|
|
|
|
+- **④ 修改目的**:恢复 CI 硬门禁「能红能绿」的可信度。
|
|
|
|
|
+- **⑤ 闭环**:连续 2 轮 CI 差集为空 + `backend-blocking-junit` 干净 HEAD 变绿,G11 转 ✅。
|
|
|
|
|
+
|
|
|
|
|
+### P-174-3(P1,度量/CI)API 层入口默认收集 990 例,口径可放大 31 倍(第 2 轮)
|
|
|
|
|
+- **① 问题描述**:`playwright.config.api.js` 无文件参数收集 990 例(覆盖 `generated/**`);本轮 32 例为显式点名 4 文件结果。
|
|
|
|
|
+- **② 测试 bug 点**:`tests/playwright.config.api.js:18`(`testMatch` 过宽)。
|
|
|
|
|
+- **③ 最优修改方案**:`testMatch` 收窄为显式白名单,`generated/**` 单列 `api-generated` project 标 `@slow`。
|
|
|
|
|
+- **④ 修改目的**:让「API 层 32 例」门禁口径可复现。
|
|
|
|
|
+- **⑤ 闭环**:不带文件参数跑该 config 仍为 32 例且 0 红。
|
|
|
|
|
+
|
|
|
|
|
+### P-174-4(P1,治理)3 个测试类长期未入库(第 6 轮未修)
|
|
|
|
|
+- **① 问题描述**:`GrowthPublicEndpointMappingTest`(5E)、`JwtInterceptorGrowthPolicyTest`、`ArticleTagsContractTest` 处于 `??` 未跟踪状态却被 `testCompile` 编译执行。
|
|
|
|
|
+- **② 测试 bug 点**:`cfc-backend/src/test/java/com/etotem/cfc/config/GrowthPublicEndpointMappingTest.java` 等 3 文件。
|
|
|
|
|
+- **③ 最优修改方案**:研发确认归属后入库或废弃删除。
|
|
|
|
|
+- **④ 修改目的**:让「执行过的用例」=「仓库里的用例」。
|
|
|
|
|
+- **⑤ 闭环**:`git status` 对测试目录零 `??`。
|
|
|
|
|
+
|
|
|
|
|
+### P-174-5(P1,Schema)`nutrition_age_dosage` 建表 SQL 永久失败(第 5 轮未修)
|
|
|
|
|
+- **① 问题描述**:`schema.sql:5354` 建表语句 INDEX 引用不存在的列 → 每次启动建表失败被吞。
|
|
|
|
|
+- **② 测试 bug 点**:`cfc-backend/src/main/resources/schema.sql:5354`。
|
|
|
|
|
+- **③ 最优修改方案**:删除该 INDEX 行 + `DatabaseInitializer` 对建表异常改为收尾汇总 ERROR。
|
|
|
|
|
+- **④ 修改目的**:消除「迁移静默失败」系统性风险。
|
|
|
|
|
+- **⑤ 闭环**:日志 grep `SQLSyntaxErrorException` = 0。
|
|
|
|
|
+
|
|
|
|
|
+### P-174-6(P2,可靠性)251 节点残留 pytest 进程堆积(B-126 实证,第 7 轮观察)
|
|
|
|
|
+- **① 问题描述**:本轮 kick 前发现 4 个历史残留 pytest(R150×2 挂 2h13m / R173×2 挂 1h07m)占资源、锁配额;本轮按 PID 清理后重派成功,但无自动回收机制。
|
|
|
|
|
+- **② 测试 bug 点**:`docs/tdd/tools/dispatch_251_pytest.cjs`(kick 无超时硬杀);R150 曾以「pkill 自伤」教训导致不敢清。
|
|
|
|
|
+- **③ 最优修改方案**:kick 前先按 `pytest` + 日志名精确匹配 PID 清理;kick 串加 `timeout 600` 包裹。
|
|
|
|
|
+- **④ 修改目的**:保证每轮 251 从干净状态派发,防配额/资源泄漏污染结论。
|
|
|
|
|
+- **⑤ 闭环**:连续 2 轮 kick 前 `ps grep pytest` = 0。
|
|
|
|
|
+
|
|
|
|
|
+### P-174-7(P2,测试基础设施)Playwright safe-delete 守卫拦截(第 2 轮,本轮已规避)
|
|
|
|
|
+- **① 问题描述**:R173 三组套件首启被 safe-delete 守卫拦截;本轮全部追加 `--output=_r174/<unit>` 一次性目录后全绿。
|
|
|
|
|
+- **② 测试 bug 点**:`tests/playwright.config.live.js:26` 等(`outputDir` 固定且每次启动清理)。
|
|
|
|
|
+- **③ 最优修改方案**:执行脚本统一注入 `--output=<runid>`;或 CI 侧 `preserveOutput: 'always'`。
|
|
|
|
|
+- **④ 修改目的**:消除工具链自身假失败,保证无人值守可复现。
|
|
|
|
|
+- **⑤ 闭环**:连续 3 次无人干预跑通全部套件(无 safe-delete)。
|
|
|
|
|
+
|
|
|
|
|
+### P-174-8(P2,环境)根级黑盒 16 红(9082 未监听,第 60 轮)
|
|
|
|
|
+- **① 问题描述**:`tests && npx jest` → 7 过 / 16 红,全部 `ECONNREFUSED 127.0.0.1:9082`。
|
|
|
|
|
+- **② 测试 bug 点**:`tests/integration/plan-chain.spec.js:21-22`(依赖 env 且无 webServer 自启)。
|
|
|
|
|
+- **③ 最优修改方案**:jest `globalSetup` 起 webServer 或前置探活 skip。
|
|
|
|
|
+- **④ 修改目的**:让「红」只代表真实缺陷。
|
|
|
|
|
+- **⑤ 闭环**:后端未启时 16 例转 skip。
|
|
|
|
|
+
|
|
|
|
|
+### P-174-9(P2,工具)langgraph pytest 退出码未落盘(第 7 轮)
|
|
|
|
|
+- **① 问题描述**:本轮日志末行 `3 failed, 48 passed ... 136.47s`,**无 EXIT= 行**(R173 修过 B-126 但本轮 kick 命令串内经 run 模式注入,`echo EXIT=$?` 在 setsid nohup 子 shell 生效时机仍不稳)。
|
|
|
|
|
+- **② 测试 bug 点**:`docs/tdd/tools/dispatch_251_pytest.cjs:40`(kick 串 `$?` 展开时机)。
|
|
|
|
|
+- **③ 最优修改方案**:内联命令统一 `bash -c '...; rc=$?; echo EXIT=$rc >> LOG'` 单引号包裹。
|
|
|
|
|
+- **④ 修改目的**:用例全绿与进程正常退出都可取证。
|
|
|
|
|
+- **⑤ 闭环**:连续 2 轮日志末尾出现 `EXIT=0`。
|
|
|
|
|
+
|
|
|
|
|
+### P-174-10(P2,治理/零漂移)后端存量红第 20 次零漂移,无产品级新增缺陷
|
|
|
|
|
+- **① 问题描述**:后端 39 红(33F+6E)与 R173 **逐类逐例一致**:存量装置/契约 18(11 类:EnergySystemFlow 6 / DimensionRegistryMap 3 / GuideModule 1E / OrchestrationEngine 1 / OrchestrationIntegration 1 / MembershipPaySwitch 1 / PaymentServiceORD 1 / WechatLogin 1 / WechatLoginContract 1 / TaskReviewScP11 1 / TeamProfitCron 1)+ 未入库 GrowthPublic 5E(B-162-1)+ 新契约预期 RED 16(MembershipPlanPurchase 7 / ShopOrderQueryRefund 4 / SupplierOrderFulfill 5)。
|
|
|
|
|
+- **② 测试 bug 点**:`cfc-backend/src/test/.../unit/*ContractTest.java`(预期 RED 承袭研发 S-cfc-166/168/169);`GrowthPublicEndpointMappingTest.java`(未入库 5E)。
|
|
|
|
|
+- **③ 最优修改方案**:预期 RED 待研发实现后定向复跑;未入库文件归口;存量装置类由研发逐类排查(历史长期挂账)。
|
|
|
|
|
+- **④ 修改目的**:让 G2 红例从「存量挂账」转「逐类销号」,恢复 G2 门禁可达。
|
|
|
|
|
+- **⑤ 闭环**:存量红类连续 2 轮递减(每轮 ≥1 类转绿),G2 ≤5。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 八、门禁结论
|
|
|
|
|
+
|
|
|
|
|
+| 门禁 | 项 | 阈值 | 实测 | 判定 |
|
|
|
|
|
+|---|---|---|---|---|
|
|
|
|
|
+| G1 | 全量通过率 | ≥98% | **97.84%**(剔 skip 98.46%) | ❌ |
|
|
|
|
|
+| G2 | 存量红例 | ≤5 | **61**(后端 39 + 根级 16 + 前端 3 + lg 3;其中存量装置 18、未入库 5E、预期 RED 19、环境 19) | ❌ |
|
|
|
|
|
+| G3 | 前端 Jest | 0 红(除预期 RED) | 609 过 / 3 红(全 S-cfc-132/133 预期 RED)/ 12 跳 | ⚠️ |
|
|
|
|
|
+| G4 | 管理端 Jest | 100% | 116/116 | ✅ |
|
|
|
|
|
+| G5 | 编译与产物完整性 | 0 错、无沉默类 | 2121 主源 + 374 测试源 0 错;368 类 / 368 XML,0 沉默 / 0 dump | ✅ |
|
|
|
|
|
+| G6 | 浏览器 E2E | 100%(skip 需有据) | 28/28 + 2 skip(dx 端点 404,B-DX-1) | ✅ |
|
|
|
|
|
+| G7 | langgraph | 100% | 48/51(3 红全 429/401 环境,较 R173 改善 2) | ❌ |
|
|
|
|
|
+| G8 | 线上匿名鉴权 | 全 401 | 6/6 = 401(含 `/api/admin/families/overview`) | ✅ |
|
|
|
|
|
+| G9 | 可执行锚点覆盖 | ≥80% | 13.0%(官方口径)/ ~20%(严格口径) | ❌ |
|
|
|
|
|
+| G10 | 双节点派发 | 189 + 251 均成功 | 189 admin 5/5 EXIT=0 + 251 pytest 48/51 | ✅ |
|
|
|
|
|
+| G11 | CI 硬门禁可用 | 能红能绿 | `BACKEND_OBSERVED_CLASSES`(33 类)漏拦 8 类 + 26 类已绿仍排除(第 10 轮) | ❌ |
|
|
|
|
|
+| G12 | 需求变更→用例同步 | 变更即更新 | 5 份需求变更派生用例 **+21 入册**(SC 241→244,G-1 闭环) | ✅ |
|
|
|
|
|
+| G13 | 零漂移 | 存量红逐例一致 | 后端存量 18(11 类)+ 未入库 5E 与 R173 逐类逐例一致(**第 20 次**);浏览器/API/管理端/前端/根级逐例一致 | ✅ |
|
|
|
|
|
+| G14 | 场景→用例映射 | ≥80% | 72.1%(155/215) | ❌ |
|
|
|
|
|
+
|
|
|
|
|
+**总判定:不通过(承袭)**。可用性维度的核心卡口未变:**G2 红例超阈、G7 langgraph 上游未恢复、G9/G14 追溯不足、G11 CI 门禁失真**。相对 R173 的正向:langgraph 45→48、后端耗时 51:52→40:12、派生用例 +21 入册(G-1 关闭)、251 残留进程清理;无任何产品级新增缺陷。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 九、方法论沉淀(本轮新增)
|
|
|
|
|
+
|
|
|
|
|
+1. **251 残留 pytest 进程会跨轮堆积**——本轮 kick 前发现 4 个历史残留(2 轮各 2 个,挂 1~2h),直接占 LLM 配额、干扰新派发。处置:先 `ps -eo pid,etime,cmd | grep pytest` 精确取 PID → `kill -9` → 再 kick。**禁用 `pkill -f pytest`**(pattern 匹配自身命令行,R150 教训复现)。
|
|
|
|
|
+2. **251 派发日志路径要内联命令串、不走过长 env 链**——本轮首次 `LOG=/tmp/r174_pytest.log node ... kick` 因 MSYS 路径改写导致远端日志落错位置,`tail` 只能看到 No such file;改为 `run "rm -f ...; setsid nohup bash -c '... > /tmp/r174_pytest.log...'"` 直接命令行内联即成功。
|
|
|
|
|
+3. **派生用例入册要成批做**——本轮把工作区 R173 后遗留的 7 个文件(5 份需求变更派生)一次性入册提交 `f8acc8c52`,避免多笔小提交污染 git 历史;SC 基线 241→244 同步更新 sc-key-map 与 TRACEABILITY 双主表。
|
|
|
|
|
+4. **cfc-web Jest 版本升级**(新观察):本次 `npx jest --ci` 在根目录跑失败(`--testPathPattern` 已改名 `--testPathPatterns`),改在各模块目录直接 `npx jest --ci` 正常(历轮口径不变)。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 附录 A:本轮命令(可复现)
|
|
|
|
|
+
|
|
|
|
|
+```bash
|
|
|
|
|
+# 后端全量(后台,tail 缓冲日志)
|
|
|
|
|
+cd cfc-backend && JAVA_HOME=/d/jdk1.8.0_25 /d/maven/apache-maven-3.6.1/bin/mvn -o -B clean test > /d/cfc/_r174_backend_test.log 2>&1
|
|
|
|
|
+
|
|
|
|
|
+# 管理端 / 前端 / 根级(各模块目录内)
|
|
|
|
|
+cd cfc-web && npx jest --ci
|
|
|
|
|
+cd cfc-frontend && npx jest --ci
|
|
|
|
|
+cd tests && npx jest --ci
|
|
|
|
|
+
|
|
|
|
|
+# 浏览器(本机;统一 --output 一次性目录规避 safe-delete 守卫)
|
|
|
|
|
+cd tests && npx playwright test -c playwright.config.live.js --project=frontend-mobile --reporter=list --workers=1 --output=../_r174/fe
|
|
|
|
|
+cd tests && npx playwright test -c playwright.config.live.js --project=shop-api --reporter=list --workers=1 --output=../_r174/shop
|
|
|
|
|
+cd tests && npx playwright test -c playwright.config.health.js --reporter=list --workers=1 --output=../_r174/health
|
|
|
|
|
+cd tests && npx playwright test -c playwright.config.live.js --project=dx-bridge --reporter=list --workers=1 --output=../_r174/dx
|
|
|
|
|
+
|
|
|
|
|
+# 线上 API(点名 4 文件)
|
|
|
|
|
+cd tests && npx playwright test -c playwright.config.api.js --reporter=list --workers=1 --output=../_r174/api \
|
|
|
|
|
+ e2e/api/api-smoke.spec.js e2e/api/nonfunc-security.spec.js \
|
|
|
|
|
+ e2e/api/nonfunc-perf-compat.spec.js e2e/api/traceability-p94-p95-c26.spec.js
|
|
|
|
|
+
|
|
|
|
|
+# 189 admin(远程 PowerShell)
|
|
|
|
|
+node _r164_189_admin.cjs kick && node _r164_189_admin.cjs read
|
|
|
|
|
+
|
|
|
|
|
+# 251 langgraph(先清残留 → kick → 单次 read;日志路径内联命令串)
|
|
|
|
|
+node _r164_251_lg.cjs run "ps -eo pid,etime,cmd | grep pytest | grep -v grep"
|
|
|
|
|
+node _r164_251_lg.cjs run "rm -f /tmp/r174_pytest.log; setsid nohup bash -c 'cd /sc-data/cfc/cfc-langgraph && .venv/bin/python -m pytest -q --ignore=tests/qna --ignore=tests/test_chat.py > /tmp/r174_pytest.log 2>&1; echo EXIT=\$? >> /tmp/r174_pytest.log' >/dev/null 2>&1 & echo KICKED"
|
|
|
|
|
+node _r164_251_lg.cjs run "tail -c 4000 /tmp/r174_pytest.log"
|
|
|
|
|
+
|
|
|
|
|
+# 度量
|
|
|
|
|
+python docs/tdd/tools/test_report_metrics.py --repo-root . --scene
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+## 附录 B:未实测与未授权项(不得视为通过)
|
|
|
|
|
+
|
|
|
|
|
+| 维度 | 状态 | 原因 |
|
|
|
|
|
+|---|---|---|
|
|
|
|
|
+| 变异测试 | 未实测 | 仓库无 PIT/Stryker,离线档无工具 |
|
|
|
|
|
+| SAST / 依赖漏洞扫描 | 未授权未执行 | 需联网(本机无显式联网授权) |
|
|
|
|
|
+| 真实压测 | 未授权未执行 | execute 档,需单独联网授权 |
|
|
|
|
|
+| 无障碍 / 可用性 | 无资产 | 仓库无 axe/WCAG 与量表 |
|
|
|
|
|
+| 微信真机 / 支付扣款 | 排除 | 涉资金与真机,需人工介入 |
|