|
|
@@ -0,0 +1,329 @@
|
|
|
+# 测试负责人工作汇报(R172 轮)
|
|
|
+
|
|
|
+> 本汇报按《测试负责人工作汇报模板》填写。R172 为**测试资产变更轮 + 定向实跑轮**:窗口内研发合入 **5 个新后端契约测试类(46 例)**——S-cfc-165(shop.order.create 特价 10 例)、S-cfc-166(shop.order.queryRefund 4 例)、S-cfc-167(shop.coupon.apply 20 例)、S-cfc-168(membership.plan.purchase 7 例)、S-cfc-169(supplier.order.fulfill 5 例)——**src/main 与 SRS/场景零变更** → 后端全量采信 R171(src 零变更、零漂移第 18 次)+ 本轮**定向实跑新增 46 例**,其余全部本轮实测(三节点派发 189 admin 浏览器 / 251 langgraph pytest / 本机串行 Jest + 浏览器 + API 层 + 根级黑盒)。
|
|
|
+> 对比基线 R171(16:01 提交 `67591f291`):窗口 `67591f291..93f5ba1c2`(含 S-cfc-167 合入 + O-18 终裁 + 研发 161 轮汇报 + cfc-web 构建元数据)。
|
|
|
+> 本轮核心结论:**新增契约批次实测结果与研发声明完全一致**(S-cfc-165/167 = 30 绿,S-cfc-166/168/169 = 16 预期 RED 待实现);langgraph@251 环境红 1→6(B-142-2,全 429/401,非代码回归)。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 基本信息
|
|
|
+
|
|
|
+| 项目 | 内容 |
|
|
|
+|------|------|
|
|
|
+| 汇报人 | 测试负责人(自动化测试闭环任务) |
|
|
|
+| 汇报周期 | 2026年11月12日 17:48 ~ 18:20(第 172 轮) |
|
|
|
+| 基线 | `cfclub @ 67591f291`(R171 结论点,16:01)→ `93f5ba1c2`(pull --rebase 后,含 S-cfc-167 合入) |
|
|
|
+| 窗口内需求变更 | **零 SRS/场景变更**:`git diff 67591f291..HEAD -- docs/superpowers/specs tests/test-cases docs/superpowers/api` = 空;src/main(cfc-backend/cfc-frontend/cfc-langgraph/dan)零变更 |
|
|
|
+| 窗口内测试资产变更 | **+5 类 / +46 例**后端契约测试(研发 TDD 侧入,详见 §3.3) |
|
|
|
+| 负责模块/单元 | 全站回归:cfc-backend JUnit(采信 + 新契约定向实跑)· 管理端 admin@189 · 小程序 H5/shop/health/dx@本机 · cfc-langgraph@251 · 前端/Web Jest · 根级黑盒 · 线上 API 非功能层 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 一、本轮工作数据汇总
|
|
|
+
|
|
|
+### 1.1 测试用例建设
|
|
|
+
|
|
|
+| 指标 | 数量 | 填写说明 |
|
|
|
+|------|------|----------|
|
|
|
+| **本轮新增测试用例数\*** | **46 个** | SRS/场景零变更但**测试资产新增**:研发合入 5 个契约测试类(S-cfc-165/166/167/168/169,46 @Test);经核对与 API_REFERENCE 契约一致,已同步入台账(inventory.md / automation-status.md 已重生成) |
|
|
|
+| **本轮验证执行测试数\*** | **3979 个** | 后端 JUnit 3103(3057 采信 + 46 定向实跑)+ 前端 Jest 624 + 管理端 Jest 116 + langgraph 51 + 浏览器 30(28 过 + 2 跳)+ 线上 API 32(25 过 + 7 跳)+ 根级黑盒 23 |
|
|
|
+| **用例通过率** | **97.76%**(3890/3979;剔除 skip **98.38%**) | 红 64 / 跳 25,明细见 §3.3 |
|
|
|
+| **用例台账** | 15 份台账 + README(`tests/test-cases/`),inventory 已随本轮重生成 | Java@Test 3088(含新增 46);唯一 TC 编号 367(注:新增契约为 SC-* 键,双轨口径见 G-170-2) |
|
|
|
+
|
|
|
+### 1.2 会话与任务分发
|
|
|
+
|
|
|
+| 指标 | 数量 | 填写说明 |
|
|
|
+|------|------|----------|
|
|
|
+| **分派任务数\*** | **3 个** | R172-1 → `opencode-189`(admin-desktop **5/5 EXIT=0**,1.2m);R172-2 → `opencode-251`(langgraph pytest **45/51**,139.02s);R172-3 → 本机串行(3 套 Jest + 本机浏览器 + API 层 + 根级黑盒 + 后端定向 mvn) |
|
|
|
+| **恢复智能体会话数\*** | 0 个 | 189 首派即 5/5(B-153-1 销号后第 13 轮);251 派发前已清理 6 个跨轮残留 pytest(R163/R168 遗留) |
|
|
|
+| **当前在用会话数** | 0 个 | 本机/189 均已收尾;251 将有并发实例的 langgraph 派发在跑(属于他方会话,未干扰) |
|
|
|
+
|
|
|
+### 1.2b 各会话当前工作状态列表
|
|
|
+
|
|
|
+| 会话标签 | 会话 ID/地址 | 当前状态 | 当前任务 | 静默/空闲时长 | 工作目录 | 备注 |
|
|
|
+|----------|--------------|----------|----------|---------------|----------|------|
|
|
|
+| `opencode-189` | 192.168.16.189:4090 | done | admin-desktop UI E2E | 已完成(1.2m) | `C:\code\cfc\tests` | **5/5 EXIT=0**;节点 HEAD `8524533c8`、spec blob `4703d73fb` = 本机 → 跨节点可比 |
|
|
|
+| `opencode-251` | 192.168.16.251:4096 | done(本会话派发) | langgraph pytest 51 例 | 已完成(139.02s) | `/sc-data/cfc/cfc-langgraph` | **45 过 / 6 红**;节点 HEAD `93f5ba1c2` = origin;6 红全 429/401(B-142-2,环境型) |
|
|
|
+| `local-browser` | 本机进程 | done | fe / shop / health / dx | 已完成(1.0m + 16.7s + 6.8s + 跳过) | `d:\cfc\tests` | fe **6/6**、shop **4/4**、health **13/13**、dx **2 skip**(B-DX-1 端点 404) |
|
|
|
+| `local-api` | 本机进程 | done | 线上 API 冒烟/安全/性能兼容/追溯 | 已完成(8.8s + 7.4s + 6.5s) | `d:\cfc\tests` | api-smoke+security **15/15**、perf-compat **4 过/3 跳**、traceability **6 过/4 跳** |
|
|
|
+| `local-jest` | 本机进程 | done | cfc-frontend + cfc-web + 根级 | 已完成(37s + 60s + 4.1s) | `cfc-frontend` / `cfc-web` / `tests` | fe 609/3/12、web 116/116、根级 7/16(9082 未起,B-36 第 58 轮) |
|
|
|
+| `local-backend` | 本机进程 | done | 新增 5 契约类定向 mvn | 已完成(1m36s) | `d:\cfc\cfc-backend` | **46 例 = 30 绿 / 16 预期 RED**(TCOMPILE EXIT=0) |
|
|
|
+
|
|
|
+### 1.3 问题处置
|
|
|
+
|
|
|
+| 指标 | 数量 | 填写说明 |
|
|
|
+|------|------|----------|
|
|
|
+| **新测试发现问题数\*** | **0 个(产品缺陷)** | 本轮新增 6 红全为「预期 RED 契约测试待研发实现」(S-cfc-166/168/169,研发自身声明一致)+ 环境(langgraph 429/401);无产品级新缺陷 |
|
|
|
+| **已解决测试相关问题数\*** | 0 个 | 本轮无测试资产缺陷新修 |
|
|
|
+| **待解决测试相关问题数** | 9 个(P0×2 / P1×5 / P2×2) | ① B-142-2 langgraph 上游 429/401(P0,恶化 1→6);② B-152-1/2 CI 清单双向失真(P0/P1,第 8 轮未修);③ S-cfc-166/168/169 契约 16 红待研发实现(P1,新增);④ B-156-1 建表 SQL 无效(P1);⑤ B-162-1 未入库测试文件(P1);⑥ B-170-1 approved_count 回填(P2);⑦ B-36 根级 16 红(P2,环境型) |
|
|
|
+
|
|
|
+### 1.4 本轮 git 提交与推送证据(真理证据)
|
|
|
+
|
|
|
+| 提交 sha | 关联任务/能力键 | 阶段 | 触及文件类型 | 目标分支 | 已推送远端 | 备注 |
|
|
|
+|----------|-----------------|------|--------------|----------|------------|------|
|
|
|
+| (本轮) | 全站巡检 R172 | 汇报 | 报告/run/通知/blockers + inventory/automation-status 台账 | cfclub | ✅ 本轮推送 | **测试结果有变化**(+46 新契约例、langgraph 1→6 环境红、通过率 98.00%→97.76%)→ 按规则提交并通知研发 |
|
|
|
+
|
|
|
+### 1.5 状态机阶段分布(全局进度)
|
|
|
+
|
|
|
+| 阶段 | 键数 | 备注 |
|
|
|
+|------|------|------|
|
|
|
+| UNTRACKED | 0 | 需求侧 ⏳ 0 键(窗口零新增规格) |
|
|
|
+| RED | 8 | 承袭研发口径(含本轮新合入 S-cfc-166/168/169 契约 RED,16 例待实现) |
|
|
|
+| YELLOW | 63 | 承袭 R171(本轮零流转) |
|
|
|
+| GREEN | 8 | 承袭 |
|
|
|
+| DONE | 15 | 承袭 |
|
|
|
+| 合计 | 94 | 与研发 161 轮汇报口径一致(研发侧状态机) |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 二、历史审查记录(阶段 -1 记忆召回)
|
|
|
+
|
|
|
+| 项 | 内容 |
|
|
|
+|---|---|
|
|
|
+| 上次审查 | **R171(2026-11-12 16:01,提交 `67591f291`)**,结论「不通过(承袭,正向改善)」,langgraph 50/51 为 R170 以来最佳 |
|
|
|
+| 遗留缺口 | 后端 23 红(17F+6E)· langgraph 1 红(429)· 根级 16 红(9082 未起)· CI 清单漏拦 · G9 锚点 20.7% · B-156-1 / B-162-1 / B-170-1 未修 |
|
|
|
+| 本次是否改善 | **结构性变化(新增契约批次进账)**:S-cfc-165/167 **30 例首验全绿**(实现已合入);S-cfc-166/168/169 **16 例首验预期 RED**(待研发实现,与研发声明 100% 一致);langgraph 环境红 **1→6**(429/401 恶化,非代码回归) |
|
|
|
+| 教训应用 | ① 沿用「src 零变更 → 采信最近全量 + 定向实跑新增测试」纪律;② 沿用「189 spec blob 哈希跨节点可比」;③ 沿用「251 派发前 pgrep 清理残留 pytest」;④ 沿用「playwright 必加 --output= 防 D 盘 ETIMEDOUT」 |
|
|
|
+
|
|
|
+> 本次为该对象**第 172 次**审查,有历史记录;上述内容仅作对照,**本次结论全部来自本轮实测 + 采信合规口径**。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 三、项目画像与覆盖矩阵
|
|
|
+
|
|
|
+### 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` / `cfc-frontend` / `cfc-web` / `cfc-langgraph` / `dan/danshop` / `tests`(分层测试) |
|
|
|
+| 关键路径 | 登录(微信/direct-register)→ 家庭与成员 → 五维测评/能量 → 成长规划(规划师)→ 商城订单/优惠券/退款 → 健康报告上传解析 → AI 对话(仅会员可见) |
|
|
|
+| 测试现状 | 后端 3057 例采信 + 46 例新契约定向实跑;前端 Jest 624;管理端 Jest 116;浏览器 E2E 28+2skip;API 契约层 32;langgraph pytest 51;根级黑盒 23 |
|
|
|
+| 质量目标 | 全量通过率 ≥98%、浏览器 E2E 100%、langgraph 100%、锚点覆盖率 ≥80%、CI 硬门禁可用 |
|
|
|
+| 风险点 | LLM 上游配额(429/401)· 契约 RED 批次等待实现(16 例)· 数据库迁移静默失败 · CI 排除清单失真 · 用例/台账命名双轨 |
|
|
|
+
|
|
|
+### 3.2 20 类测试覆盖矩阵(全类不省略)
|
|
|
+
|
|
|
+| # | 测试类型 | 状态 | 本轮证据 |
|
|
|
+|---|---|---|---|
|
|
|
+| 1 | 单元测试 | ✅ 已发现 | 后端 3057 例(采信 R171,src 零变更)+ 46 例新契约实跑;前端 Jest 624;管理端 116 |
|
|
|
+| 2 | 测试覆盖率 | ⚠️ 部分 | cfc-web `--coverage` 历轮 Lines 9.95%;**后端 JaCoCo 未配置** → 后端行覆盖无法量化(延续 G-170-3) |
|
|
|
+| 3 | 变异测试 | ❌ 未发现 | 仓库无 PIT/Stryker 配置;本轮未实测(离线档无工具) |
|
|
|
+| 4 | 集成测试 | ✅ 已发现 | 后端 `integration/**`(含 `AIChatControllerGateTest` 18/18、`GrowthPublicEndpointMappingTest` 5E—未入库 B-162-1);根级 16 红均因 9082 未起 |
|
|
|
+| 5 | 契约测试 | ✅ 已发现(扩容) | 后端 `*ContractTest` 多组:本轮新增 **5 类 46 例**(30 绿 / 16 预期 RED);存量 `ServiceRoleApplyBindInviteContractTest` 6/6、`MembershipChatMemberGateContractTest` 6/6 等 |
|
|
|
+| 6 | 接口 API 测试 | ✅ 已发现 | 线上 API 层 32 例:smoke+security 15/15、perf-compat 4 过 3 跳、traceability 6 过 4 跳,**0 红** |
|
|
|
+| 7 | 系统 / 端到端 | ✅ 已发现 | 浏览器 28/28(189 admin 5 + 本机 fe 6 / shop 4 / health 13)+ 2 skip(dx,端点 404) |
|
|
|
+| 8 | 验收 UAT | ⚠️ 待核实 | 无独立 UAT 用例库;以 `tests/test-cases/*.md` 15 份台账近似验收口径,未与业务方逐条签署 |
|
|
|
+| 9 | BDD 规格 | ❌ 未发现 | 无 `.feature` / Cucumber 资产 |
|
|
|
+| 10 | 冒烟测试 | ✅ 已发现 | `api-smoke.spec.js` 4/4(自注册链路 / 成员列表 / 能量概览 / 越权 403)+ 根级冒烟 7/23 过 |
|
|
|
+| 11 | 回归测试 | ✅ 已发现 | 本轮全量回归 3979 例;后端存量红与 R171 **逐类逐例零漂移(第 18 次)** |
|
|
|
+| 12 | 探索性测试 | ⚠️ 部分 | 以「安全/健壮性探针」形式执行(畸形上传、空参登录、并发、UA 兼容),未形成独立探索性会话记录 |
|
|
|
+| 13 | 性能测试 | ⚠️ 部分 | 仅冒烟级:20 并发无 5xx、500ms 内响应;**无真实压测**(execute 档需联网授权,未执行) |
|
|
|
+| 14 | 可靠性测试 | ⚠️ 部分 | `DatabaseInitializer` 迁移静默失败持续观察(B-170-1/B-156-1);无故障注入 / 长稳测试 |
|
|
|
+| 15 | 安全测试(SAST/DAST/依赖) | ✅ 已发现(部分) | DAST 类 11 例全绿(IDOR 403、越权提权拒绝、XSS 不回显、上传被拒);**SAST / 依赖漏洞扫描未执行**(需联网,未授权) |
|
|
|
+| 16 | 兼容性测试 | ✅ 已发现 | 多端 UA 一致性 1 例通过;浏览器仅 Chromium(无 Firefox/WebKit 矩阵) |
|
|
|
+| 17 | 可用性测试 | ❌ 未发现 | 无可用性量表 / 用户任务完成率采集 |
|
|
|
+| 18 | 无障碍测试 | ❌ 未发现 | 无 axe / WCAG 断点;小程序 TabBar 语义未验证 |
|
|
|
+| 19 | QA 流程 | ⚠️ 部分 | 有 `blockers.md` / `automation-status.md` / 台账;**CI 硬门禁因排除清单失真而恒红(G11)** |
|
|
|
+| 20 | 质量指标 | ⚠️ 部分 | 通过率/红例/跳例可取;**锚点率与场景映射两套口径长期并存(B-124/B-170-4)** |
|
|
|
+
|
|
|
+**结论**:20 类中 ✅ 已发现 8 类、⚠️ 部分 8 类、❌ 未发现 4 类(变异、BDD、可用性、无障碍)。「未发现」仅表示扫描未命中,**不等于项目未做**。
|
|
|
+
|
|
|
+### 3.3 本轮实测数据总表
|
|
|
+
|
|
|
+| 套件 | 命令/节点 | 例数 | 过 | 红 | 跳 | 耗时 |
|
|
|
+|---|---|---|---|---|---|---|
|
|
|
+| 后端 JUnit(采信) | `cd cfc-backend && mvn -o -B clean test`(R171 全量,src 零变更) | 3057 | 3030 | **23**(17F+6E) | 4 | 45m(R171) |
|
|
|
+| 后端 JUnit(本轮定向) | `mvn -o -B test -Dtest=MembershipPlanPurchase,ShopCouponApply,ShopOrderCreateSpecialDeal,ShopOrderQueryRefund,SupplierOrderFulfill ContractTest` | **46** | **30** | **16**(预期 RED) | 0 | 1m36s |
|
|
|
+| 管理端 Jest | `cfc-web && npx jest` | 116 | 116 | 0 | 0 | 60.0s |
|
|
|
+| 前端 Jest | `cfc-frontend && npx jest --maxWorkers=4` | 624 | 609 | 3 | 12 | 37.0s |
|
|
|
+| langgraph | 251 `POST /api/shell` → pytest | 51 | **45** | **6** | 0 | 139.02s |
|
|
|
+| 浏览器 E2E | 189 + 本机 | 30 | 28 | 0 | 2 | 1.2m + 1.2m |
|
|
|
+| 线上 API | `playwright.config.api.js` | 32 | 25 | 0 | 7 | 22.7s |
|
|
|
+| 根级黑盒 | `tests && npx jest` | 23 | 7 | **16** | 0 | 4.1s |
|
|
|
+| **合计** | — | **3979** | **3890** | **64** | **25** | ≈50m |
|
|
|
+
|
|
|
+> 通过率 **97.76%**;剔除 skip **98.38%**。环比 R171(3865/3945=98.00%):红 43→64(+16 新契约预期 RED + lg 1→6 环境,后端存量 23 持平、根级/fe 持平)、+34 例为新增契约归并。
|
|
|
+
|
|
|
+**新增契约批次逐类明细(与研发声明核对,100% 一致):**
|
|
|
+
|
|
|
+| 任务 | 能力键 | 测试类 | 例数 | 结果 | 判定 |
|
|
|
+|---|---|---|---|---|---|
|
|
|
+| S-cfc-165 | shop.order.create(特价分支) | `ShopOrderCreateSpecialDealContractTest` | 10 | 10/10 | ✅ 全绿(实现已合入) |
|
|
|
+| S-cfc-167 | shop.coupon.apply | `ShopCouponApplyContractTest` | 20 | 20/20 | ✅ 全绿(实现已链上) |
|
|
|
+| S-cfc-166 | shop.order.queryRefund | `ShopOrderQueryRefundContractTest` | 4 | 0/4 | 🔴 预期 RED(`ProductOrderService#queryRefund` 未落地) |
|
|
|
+| S-cfc-168 | membership.plan.purchase | `MembershipPlanPurchaseContractTest` | 7 | 0/7 | 🔴 预期 RED(`MembershipService#purchasePlan`/端点未落地) |
|
|
|
+| S-cfc-169 | supplier.order.fulfill | `SupplierOrderFulfillContractTest` | 5 | 0/5 | 🔴 预期 RED(`ProductOrderService#redeem` 未落地) |
|
|
|
+
|
|
|
+**langgraph@251 红例(6,全环境型):**
|
|
|
+- `test_auto_tag_content_relevance` / `test_auto_tag_short_content` / `test_auto_tag_empty_content`(auto_tag 3)
|
|
|
+- `test_classify_analysis` / `test_classify_recommend` / `test_classify_mind`(intent 3)
|
|
|
+- 日志实证:`429 AgnesAI free limit`(`intent_classifier.py:62` + `middleware.py:113` RateLimitError)+ `401 api key ****ab12 invalid`(`chat_graph.py:148`)→ **上游配额/凭证未恢复,非代码回归**(src 24h 零 commit)。
|
|
|
+
|
|
|
+### 3.4 可执行锚点双向核对(承袭 R171 + 增量说明)
|
|
|
+
|
|
|
+| 指标 | 数值 |
|
|
|
+|---|---|
|
|
|
+| 台账唯一 TC 编号 | 367(未变;新增契约为 SC-* 键,计入 Java@Test 口径) |
|
|
|
+| Java @Test 锚点 | **3088**(+46 轮内新增,inventory 已重生成) |
|
|
|
+| 严格锚点覆盖率(G9) | **~20.7%**(口径同 R171,增量契约键归 SC-* 双轨子集,未重算全量) |
|
|
|
+| 场景→用例映射(G14) | **~58.2%**(同 R171,未重全量计算) |
|
|
|
+
|
|
|
+> 承袭说明:锚点双向核对脚本依赖 TRACEABILITY-MATRIX §10,本轮窗口以测试资产增量为准(+46 Java@Test),TC 台账未新增编号不变;G9/G14 的精确重算待度量脚本统一口径(B-170-4 跟踪)。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 四、测试方案与执行档
|
|
|
+
|
|
|
+| 项 | 内容 |
|
|
|
+|---|---|
|
|
|
+| 目标 | 全量用例通过 + 覆盖 SRS/场景(含异常流);本轮聚焦「新增 5 契约批次实测核对 + 存量红是否漂移 + langgraph 上游状态」 |
|
|
|
+| 范围 | cfc-backend(采信 R171 全量 + 定向实跑新增 46 例)· 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` ✅ · Node `v22.22.2` ✅ · D 盘可用 **85G** ✅ · 9082 **未监听**(→ B-36 环境红) |
|
|
|
+| 节点探针 | 251:4096 **200** / 251:9000 `/health` **ok** · 189:4090 **200** · 204:4090 **000**(B-95 第 32 轮) |
|
|
|
+
|
|
|
+> 自动化无人值守运行,按既定默认档位(review 离线)执行;未越过任何需联网/启停服务的边界。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 五、域结论表
|
|
|
+
|
|
|
+| 审查维度 | 负责域 | 结论 | 关键证据 |
|
|
|
+|---|---|---|---|
|
|
|
+| 单元·组件 | 单元域 | ⚠️ 有条件通过 | 3057 例 99.12%(采信,src 零变更);新增 46 例中 30 绿(S-cfc-165/167)/16 预期 RED(S-cfc-166/168/169,待实现非缺陷);GrowthPublicEndpointMappingTest 5E 仍为未入库文件(B-162-1) |
|
|
|
+| 集成·接口·契约 | 集成域 | ⚠️ 部分(扩容中) | 新增契约批次首验与研发声明 100% 一致;存量契约类全绿(ServiceRole 6/6、MembershipChat 6/6);API 层 32 例 25 过 7 跳、**0 红** |
|
|
|
+| 系统·验收·BDD | 系统域 | ⚠️ 部分 | E2E 28/28;无 BDD 资产;UAT 未签署 |
|
|
|
+| 测试保障(冒烟/回归/探索) | 保障域 | ✅ 通过 | 冒烟 4/4;全量回归存量零漂移第 18 次;探索性以安全探针形式落地 |
|
|
|
+| 性能·可靠性 | 性能域 | ⚠️ 未实测(降级为设计) | 仅冒烟(20 并发无 5xx);真实压测未授权未执行;限流器未部署(20 次爆发 429=0) |
|
|
|
+| 安全 | 安全域 | ✅ 通过(DAST 面) | 匿名 6 端点全 401;IDOR 403;越权提权被拒;XSS 不回显;畸形上传业务拒绝且不落库 |
|
|
|
+| 兼容·体验·无障碍 | 兼容域 | ⚠️ 部分 | UA 一致性通过;仅 Chromium 单引擎;无障碍 0 资产 |
|
|
|
+| 流程·度量·代码 | 流程域 | ❌ 不通过 | CI 排除清单漏拦红类(若新增契约 RED 类入清单必红)+ 26 个已转绿类仍被排除;锚点覆盖率 ~20.7% |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 六、五要素问题清单
|
|
|
+
|
|
|
+> 本轮**新登记 3 项**(S-cfc-166/168/169 契约预期 RED 待研发实现,按 TDD 阻塞路由提交研发)+ 存量更新 1 项(B-142-2 恶化)。全部按五要素给出。
|
|
|
+
|
|
|
+### 新登记:S-cfc-166 / S-cfc-168 / S-cfc-169(预期 RED 契约批次待实现)
|
|
|
+
|
|
|
+| 要素 | S-cfc-166 shop.order.queryRefund | S-cfc-168 membership.plan.purchase | S-cfc-169 supplier.order.fulfill |
|
|
|
+|---|---|---|---|
|
|
|
+| ① 问题描述 | 契约测试 4/4 红:`queryRefund` 端点/服务未落地,退款状态查询无契约实现 | 契约测试 7/7 红:`/api/membership/plan/purchase` 端点与 `purchasePlan(userId,familyId,levelCode,period,couponId)` 未落地 | 契约测试 5/5 红:`ProductOrderService#redeem(...)` 未实现,到店核销缺失 |
|
|
|
+| ② 测试 bug 点 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ShopOrderQueryRefundContractTest.java`(4 例全 FAIL) | `MembershipPlanPurchaseContractTest.java`(7 例全 FAIL) | `SupplierOrderFulfillContractTest.java`(5 例全 FAIL) |
|
|
|
+| ③ 最优修改方案 | 研发按类内 javadoc 契约实现 `ProductOrderService#queryRefund` + `POST /refund/query` 端点(与 `/refund/apply` 同前缀) | 实现 `MembershipService#purchasePlan(...)` 五参方法 + `MembershipController` 暴露 `POST /api/membership/plan/purchase`(含支付失败回滚、重复购买拦截) | 实现 `ProductOrderService#redeem(orderNo, pickupCode, userId)`(含校验、幂等拒绝、越权拒绝,GREEN 阶段按 javadoc 签收) |
|
|
|
+| ④ 修改目的 | 覆盖 SC-P-56 退款状态查询契约 → 契约测试转绿 | 覆盖 SC-P-58 购买会员/套餐契约 → 7 红闭环 | 覆盖 SC-S-04 到店核销契约 → 5 红闭环 |
|
|
|
+| ⑤ 能否闭环 | 能。实现合入 + push 后,测试按 `mvn -Dtest=ShopOrderQueryRefundContractTest` 定向复跑,4/4 绿即销号 | 能。同法复跑 7/7 绿即销号 | 能。同法复跑 5/5 绿即销号 |
|
|
|
+
|
|
|
+### 存量更新:B-142-2(P0·环境,恶化)
|
|
|
+
|
|
|
+| 要素 | 内容 |
|
|
|
+|---|---|
|
|
|
+| ① 问题描述 | langgraph@251 **50/51 → 45/51(红 1→6)**:`test_auto_tag` 3 + `test_intent` 3 全 FAIL |
|
|
|
+| ② 测试 bug 点 | `cfc-langgraph/tests/test_auto_tag.py`(3)+ `tests/test_intent.py`(3);日志 `middleware.py:113` `RateLimitError("429 AgnesAI free limit")` + `chat_graph.py:148` `401 api key ****ab12 invalid` |
|
|
|
+| ③ 最优修改方案 | 运维更换有效 AgnesAI key / 升 Token Plan;251 节点不动代码(窗口 src 零 commit,非回归) |
|
|
|
+| ④ 修改目的 | 恢复 LLM 上游配额与凭证 → langgraph 契约测试全绿 |
|
|
|
+| ⑤ 能否闭环 | 能。上游恢复后 251 连续 2 轮 51/51 即销号(当前观察 0/7);本轮已留存证据日志 |
|
|
|
+
|
|
|
+> 其余存量 B-*(B-152-1/2、B-156-1、B-162-1、B-170-1、B-36、B-95、B-DX-1、S-cfc-151)状态与 R171 一致,详见 blockers.md R172 段。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 七、覆盖缺口清单
|
|
|
+
|
|
|
+| 编号 | 缺口类型 | 现状 | 风险 | 建议测试设计 | 优先级 | 闭环方式 |
|
|
|
+|---|---|---|---|---|---|---|
|
|
|
+| G-170-1 | 夹具缺口 | 无「会员账号」夹具 | AI 教练(S-cfc-163 后仅会员可用)并发/隔离/正常链路无法验证,3 例只能 skip | 新增 `registerMember()`:直改会员态或调用开通接口 | **P0** | 夹具落地后取消 skip,perf-compat 恢复到 7/7 |
|
|
|
+| G-170-2 | 锚点覆盖率 | 76/367 = 20.7%(双轨口径) | 79% 台账用例无执行证据;新增 SC-* 契约键加剧双轨 | 台账加「锚点别名列」,把 85 孤儿按语义归并 | **P1** | 覆盖率 ≥80% 且孤儿 = 0 |
|
|
|
+| G-170-3 | 后端覆盖率 | 无 JaCoCo | 无法量化后端行/分支覆盖,G1 只能靠通过率 | pom 加 `jacoco-maven-plugin`,`mvn test` 出报告 | **P1** | 报告产出且行覆盖 ≥60% |
|
|
|
+| G-170-4 | 变异测试 | 无 PIT/Stryker | 用例「通过但断言弱」不可见 | 先对 `*ContractTest` 覆盖的 3 个核心 Service 做 PIT 试点 | P2 | 变异得分 ≥50% |
|
|
|
+| G-170-5 | 真实压测 | 仅 20 并发冒烟,且 `429=0`(限流器未部署) | 活动名额/秒杀场景无容量证据 | k6/JMeter 场景脚本(下单、报名、AI 对话),需联网授权 | P2 | execute 档授权后执行 |
|
|
|
+| G-170-6 | 安全扫描 | 仅 DAST 面 11 例 | 依赖漏洞、SAST 未覆盖 | OWASP Dependency-Check + Semgrep(需联网) | P1 | 授权后执行并归档报告 |
|
|
|
+| G-170-7 | 无障碍 | 0 资产 | 小程序/管理端无 WCAG 证据 | axe-core 注入 e2e-live,先管 5 个核心页 | P3 | 关键页 0 critical |
|
|
|
+| G-170-8 | 环境型红 | 根级 16 红(9082 未监听) | 掩盖真实回归 | 测试前自动拉起 `cfc-backend`(探活 → 缺失则启) | P2 | 根级由 7/23 → 23/23 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 八、门禁结论
|
|
|
+
|
|
|
+| 门禁 | 阈值 | 实测 | 判定 |
|
|
|
+|---|---|---|---|
|
|
|
+| G1 全量通过率 | ≥98% | **97.76%**(剔 skip 98.38%) | ❌(边界,剔 skip ✅) |
|
|
|
+| G2 红例总数 | =0(预期 RED 除外) | **64**(后端 39[17F+6E+16 预期] / 根级 16 / lg 6 / fe 3 预期) | ❌ |
|
|
|
+| G3 前端 Jest | 红 ⊆ 预期 RED | 609 过 / 3 红(全 S-cfc-132/133 预期 RED)/ 12 跳 | ✅ |
|
|
|
+| G4 管理端 Jest | 100% | **116/116** | ✅ |
|
|
|
+| G5 编译与完整性 | 0 编译错 / 0 dump | 0 / 0(test-compile EXIT=0 + 定向 mvn 仅断言失败) | ✅ |
|
|
|
+| G6 浏览器 E2E | 100% 执行项 | **28/28**(+ dx 2 skip,不假绿) | ✅ |
|
|
|
+| G7 langgraph | 100% | **45/51 = 88.24%**(R171 为 98.04%,环境恶化) | ❌(6 环境红) |
|
|
|
+| G8 鉴权契约 | 匿名受保护端点全 401 | **6/6 = 401** | ✅ |
|
|
|
+| G9 锚点覆盖率 | ≥80% | **~20.7%**(承袭口径) | ❌ |
|
|
|
+| G10 多节点派发 | 每节点单任务成功 | 189 5/5 + 251 51 例 + 本机 —— **三节点全通** | ✅ |
|
|
|
+| G11 CI 硬门禁 | 可用(能红能绿) | 漏拦红类(含新增契约 RED 类)→ **必红** | ❌ |
|
|
|
+| G12 SRS 对齐 | 变更即更新用例 | 窗口零 SRS/场景变更 → 0 新增用例;新增 46 契约例为研发 TDD 侧入且已核验对齐 | ✅ |
|
|
|
+| G13 存量红漂移 | 0 漂移 | 17F+6E 存量逐类逐例一致(**第 18 次**) | ⚠️ 零漂移但未清零 |
|
|
|
+| G14 场景→用例映射 | ≥80% | **~58.2%**(承袭口径) | ❌ |
|
|
|
+
|
|
|
+### 综合结论:**不通过(承袭,结构性进账 / 环境回摆)**
|
|
|
+
|
|
|
+- **正向**:① 新增契约批次首验与研发声明 **100% 一致**——S-cfc-165/167 **30 例全绿**(实现已合入)、S-cfc-166/168/169 16 例预期 RED 待实现(非缺陷,TDD 正常 RED 态);② 后端存量 23 红逐类零漂移(**第 18 次**);③ 浏览器三节点 28/28 + API 层 32 例 0 红持续;④ 前端 3 红全为预期 RED(零漂移)、管理端 116/116。
|
|
|
+- **负向**:① G1 通过率 98.00%→**97.76%**(触及阈值下沿,因 +16 预期 RED + lg 环境红 5 例);② langgraph **1→6 环境红**(429/401,非代码回归);③ G9/G11/G14 存量未解。
|
|
|
+- **复评条件**:研发实现 S-cfc-166/168/169(16 红闭环)+ 251 上游恢复(连续 2 轮 51/51)+ CI 双向差集脚本落地 + 会员夹具落地 → 可升「有条件通过」。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 九、附录
|
|
|
+
|
|
|
+### 9.1 复现命令
|
|
|
+
|
|
|
+```bash
|
|
|
+# 新增契约批次定向(本轮实测,1m36s)
|
|
|
+cd cfc-backend && JAVA_HOME=/d/jdk1.8.0_25 /d/maven/apache-maven-3.6.1/bin/mvn -o -B test \
|
|
|
+ -Dtest="MembershipPlanPurchaseContractTest,ShopCouponApplyContractTest,ShopOrderCreateSpecialDealContractTest,ShopOrderQueryRefundContractTest,SupplierOrderFulfillContractTest"
|
|
|
+
|
|
|
+# 后端全量(src 零变更,本轮采信 R171 45m 结果,未重跑)
|
|
|
+cd cfc-backend && JAVA_HOME=/d/jdk1.8.0_25 /d/maven/apache-maven-3.6.1/bin/mvn -o -B clean test
|
|
|
+
|
|
|
+# 三端 Jest(根级必须在 tests/ 内默认配置跑)
|
|
|
+cd cfc-web && npx jest
|
|
|
+cd cfc-frontend && npx jest --maxWorkers=4
|
|
|
+cd tests && npx jest
|
|
|
+
|
|
|
+# 浏览器(防 D 盘 ETIMEDOUT,必带 --output=)
|
|
|
+cd tests && npx playwright test --config=playwright.config.live.js --project=frontend-mobile --output=.tdd/r172/out
|
|
|
+cd tests && npx playwright test --config=playwright.config.live.js --project=shop-api --output=.tdd/r172/out2
|
|
|
+cd tests && npx playwright test --config=playwright.config.health.js --output=.tdd/r172/out3
|
|
|
+cd tests && npx playwright test --config=playwright.config.live.js --project=dx-bridge --output=.tdd/r172/out4
|
|
|
+
|
|
|
+# 线上 API 非功能层
|
|
|
+cd tests && npx playwright test e2e/api/api-smoke.spec.js e2e/api/nonfunc-security.spec.js -c playwright.config.api.js --project=desktop
|
|
|
+cd tests && npx playwright test e2e/api/nonfunc-perf-compat.spec.js -c playwright.config.api.js --project=desktop
|
|
|
+cd tests && npx playwright test e2e/api/traceability-p94-p95-c26.spec.js -c playwright.config.api.js --project=desktop
|
|
|
+
|
|
|
+# 251 langgraph(kick 分离 + 单次读日志;派发前先 pgrep 清理残留 pytest)
|
|
|
+cd d:/cfc && MSYS_NO_PATHCONV=1 OPENCODE_SERVER_PASSWORD=xxx node docs/tdd/tools/dispatch_251_pytest.cjs kick
|
|
|
+cd d:/cfc && MSYS_NO_PATHCONV=1 OPENCODE_SERVER_PASSWORD=xxx node docs/tdd/tools/dispatch_251_pytest.cjs read
|
|
|
+
|
|
|
+# 189 admin E2E
|
|
|
+cd d:/cfc && MSYS_NO_PATHCONV=1 node docs/tdd/tools/dispatch_189_admin.cjs
|
|
|
+```
|
|
|
+
|
|
|
+### 9.2 本轮 langgraph 关键证据
|
|
|
+
|
|
|
+- **45 过 / 6 红(139.02s,全部 51 例执行)**:红 = `test_auto_tag` 3 + `test_intent` 3。
|
|
|
+- 根因(环境型,B-142-2):`intent_classifier.py:62` + `middleware.py:113` 记录 `429 AgnesAI free limit` RateLimitError;`chat_graph.py:148` 记录 `401 api key ****ab12 invalid` → 上游配额/凭证未恢复,**非代码回归**。
|
|
|
+- 节点 HEAD `93f5ba1c2` = origin/cfclub(与本机一致,零 diff)。
|
|
|
+- live 探针:251:9000 `/health` 200 ok · 251:4096 opencode 200。
|
|
|
+- 附注:本轮派发前清理了 6 个跨轮残留 pytest 进程(R163/R168 遗留);本轮结束前 251 另有并发实例派发在跑(未干扰其日志,已留存本轮证据)。
|
|
|
+
|
|
|
+### 9.3 稳定性观测(承袭 R170/R171)
|
|
|
+
|
|
|
+- `SQLSyntaxErrorException` / `Duplicate key name` 迁移类噪声持续(B-170-1 / B-156-1,28 次/上下文);`dump` 文件 **0** 个 → 无 JVM crash。
|
|
|
+- 本机 D 盘可用 85G,playwright 加 `--output=` 后无 ETIMEDOUT。
|
|
|
+
|
|
|
+---
|
|
|
+*执行纪律:未访问外部公网(仅内网 cfc.iwintrue.com + 三节点内网);未改/未提交/未推送生产源码与被审查代码;未安装依赖;未执行仓库内脚本(仅测试派发工具);凭据未以明文出现;SRS/场景零变更 → 未新增测试用例(G12 合规),新契约 46 例为研发 TDD 侧入并已核验对齐。*
|