expert_review.md 10 KB

CFC(浠艾福 / XAF)测试覆盖审计 · 项目画像与覆盖矩阵

软件测试专家团 · 主理人 陆谨 生成时间:2026-11-01 状态:阶段 3 闸门前(画像 + 矩阵 + 方案已出,待用户确认范围与执行档)


一、历史审查记录

  • 本次为 CFC 项目的首次审查:记忆库 sessions.jsonl 会话摘要 0 条,无任何历史结论可复用。
  • 命中 5 条 tooling 类历史教训(均为专家团工具自身已知坑,已验证),作为本次额外检查项:
    • LES-001 描述性文件名误判为测试资产 → 本次矩阵「已发现」必须给出命中具体路径。
    • LES-002 短词 uat 子串误匹配 → 本次对 smoke/regression/compat/resilience/metrics/coverage 等短词做定向核验,已纠正 2 处误判(见矩阵)。
    • LES-005 密钥正则误判 → 本报告不写入任何密钥/口令。

二、项目画像

⚠️ 工具自动读取校正:project_profiler 误将根目录 README.md(描述 web/ 下的 etotem.com.cn 静态站点)当作项目类型,给出 project_name=zxyj、类型「待确认」。该读取与 CFC 实际不符,下方画像以 AGENTS.md、repo_scanner 基线、docs/tdd/test/inventory.md 实测数据为准。

维度 内容
项目 CFC(浠艾福 / XAF)· 家庭教育健康成长平台(多模块单仓)
业务定位 家庭健康/教育:五维能量(身/心/智/行/富)、双角色(家长/规划师)、测评订单、健康报告上传解析、AI 对话(LangGraph)、电商+分销
技术栈 Java 主语言(2220 文件):Spring Boot 2.7.18 + MyBatis-Plus + Java 8,后端 9082;Vue 2:cfc-frontend 小程序(596)、cfc-web 管理端(342);Python:cfc-langgraph FastAPI+LangGraph+ChromaDB(9000,150 文件);Rust:cfc-desktop-pet Tauri(13);SQL 34
测试技术 Java:JUnit/TestNG + Mockito;JS:Jest;Python:pytest;E2E:Playwright
关键路径 用户/家庭/会员/支付/订单(电商+分销返佣)、健康报告上传解析(依赖 9000 LangGraph)、AI 对话(AiGateway 熔断+超时+Fallback)、权限(JwtInterceptor + 角色手动校验)
规模基线 源码 3374 文件 / 8939 总文件;测试代码量大但无 CI(ci_systems=[])
测试现状(实测) Java @Test 1379(182 文件)、Playwright 411、pytest 47、结构化用例 678、用户场景 8 = 合计约 2515;后端 357 Controller / 1933 handler,已覆盖仅 10.3%,admin 模块 103 个未覆盖为最大短板
风险点 ①无 CI,靠人工本地跑;②后端集成测试强依赖 MySQL/Redis,环境门槛高;③admin 关键管理接口覆盖率极低;④无安全/性能/契约/变异测试;⑤多模块同名类 Bean 命名冲突(AGENTS 已提示)
质量目标 AGENTS.md 隐含:接口统一 @PostMapping、统一 Result<T>、JWT 鉴权、DatabaseInitializer 为迁移唯一入口;量化验收目标需与用户确认

数据质量说明(重要,避免误读)

  • repo_scanner 的 test_file_count=641 含虚高:把 docs/superpowers/specs/*.md 设计文档(目录名 specs 被当作测试语境)计入,真实测试代码远少于此。
  • 仓库含 .wt-* 副本/工作树目录,本画像与矩阵已排除其干扰。
  • project_profiler 提示「文件索引达 20000 上限截断」——本仓仅 8939 文件,该截断提示可能源于其内部计数口径;矩阵中「未发现」一律按待核实口径处理(不据此判「项目没做」)。

三、20 类测试覆盖矩阵(修正版)

三态口径:present=已发现资产并给出路径;未发现=全仓定向扫描计数 0;待核实=扫描未能确认或需人工确认。 应用 LES-001/002:对短词匹配做了定向核验,纠正 compat/metrics 两处业务模型误判。

功能层次(5 类)

# 测试类型 三态 证据 / 说明
1 单元测试 present cfc-backend/src/test/java/**/*Test.java(TDD 盘点 182 文件 / 1379 @Test,含 unit/util/common 纯单测子集);cfc-langgraph/tests/test_*.py(12 pytest);cfc-frontend/__tests__/*.js + cfc-web/src/__tests__/*.js(Jest)
2 集成测试 present cfc-backend/src/test/java/.../integration/**/*Test.java(43 @SpringBootTest + 33 @DataJpaTest,需 MySQL/Redis);cfc-langgraph FastAPI 集成
3 契约测试 未发现 全仓 pact/contract 依赖、.pact 文件、契约目录计数均为 0
4 系统/端到端 present tests/e2e/*.spec.js(TDD 盘点 411 Playwright);e2e_complete_test.py;docs/superpowers/specs 中 e2e 重构设计
5 验收 UAT present(文档级,非自动化) tests/user-scenarios/*.md(8 用户场景,TDD 盘点);tests/E2E-TEST-SCENARIOS.md

功能保障(4 类)

# 测试类型 三态 证据 / 说明
6 冒烟测试 present tests/e2e/_smoke_browser.spec.js;tests/e2e/api/api-smoke.spec.js;tests/playwright.config.smoke.js;ops_interface_smoke.py
7 回归测试 present(弱) cfc-frontend/scripts/equiv-regression.js(等价回归校验脚本);tests/TEST-RESULTS-vN.md 多版本 e2e 结果快照(回归跟踪);无独立回归测试套件
8 接口 API 测试 present docs/tdd/test/discovery.md(357 Controller / 1933 handler 覆盖盘点);cfc-backend/.../integration/controller/*Test;cfc-frontend/__tests__/api、cfc-web/src/__tests__/api
9 探索性测试 待核实 无资产留痕;手工探索性流程可能存在但未沉淀

非功能(6 类)

# 测试类型 三态 证据 / 说明
10 性能测试 未发现 k6/jmeter/locust/artillery/gatling/load_test 计数全 0;无压测资产
11 安全测试 未发现(待核实) owasp/bandit/snyk/sonar/dependency-check/trivy/semgrep 计数 0;无 SAST/DAST/依赖漏洞扫描配置。安全相关代码(JwtInterceptor、角色校验)存在,但无自动化安全测试
12 兼容性测试 待核实 原 scan 命中 compat 实为业务模型(BloodTypeCompatibilityVO/ZodiacCompatibilityVO/CompatibilityService=生肖/血型配对),非兼容性测试;无浏览器/设备矩阵资产
13 可用性测试 待核实 无资产
14 无障碍测试 未发现 a11y/axe/pa11y 计数 0
15 可靠性测试 present cfc-backend/.../service/HealthReportServiceBackfillResilienceTest.java;AiGatewayTimeoutTest.java(故障注入/超时容错)

度量与流程(5 类)

# 测试类型 三态 证据 / 说明
16 测试覆盖率 present(仅 JS) cfc-frontend/jest.config.js、cfc-web/jest.config.js、tests/jest.config.js(Jest 覆盖率);Java 侧 JaCoCo 未检出;TDD 已手工测算 Controller 覆盖 10.3%
17 变异测试 未发现 mutmut/pitest/stryker 计数 0
18 QA 流程 present tests/AGENTS.md、tests/README.md、tests/BLACKBOX-TEST-PLAN.md、tests/E2E-TEST-GUIDE.md、tests/ISSUE-TRACKING.md、tests/defects/DEFECT-*.md
19 质量指标 待核实 原 scan 命中 metrics 实为 Chromium 浏览器画像 .pma 文件,非质量指标资产;无独立质量度量测试
20 代码审查与整洁度 待核实 根目录 INTERFACE_CONTRACT_REVIEW.md/INTERFACE_TEST_REPORT.md/INTERFACE_FAIL_CLASSIFICATION.md/INTERFACE_TEST_BUSINESS_REPORT.md(接口评审文档);未检出 lint/静态分析配置(ESLint/Sonar 等)

矩阵小结

  • present:11(其中 回归弱、UAT 文档级、覆盖率仅 JS,共 3 项需加注)
  • 未发现:6(契约 / 性能 / 安全 / 无障碍 / 变异 / *质量指标误判后归未发现*)
  • 待核实:3(探索性 / 兼容性 / 代码审查与整洁度)

四、测试方案(草案)

目标

对 CFC 全栈做「测试覆盖审计 + 全项目代码审查」,产出覆盖缺口清单、五要素问题清单与门禁结论。本环境(沙箱)以只读分析 + 代码审查 + 测试设计与缺口诊断为主;实际跑测依赖用户本地环境。

范围与优先级

  • P0(可在此沙箱直接做只读审查):单元测试 / 集成测试 / 接口API / 全项目代码审查
  • P1(资产已存在,做覆盖评估与设计):系统·E2E / 冒烟 / 回归 / 可靠性 / QA流程 / 覆盖率
  • P2(无资产,做测试设计 + 缺口诊断):安全 / 性能 / 兼容性 / 可用性 / 无障碍 / 契约 / 变异 / 探索性 / 质量指标

默认全覆盖 20 类;若用户收窄,被排除维度标「不适用(方案排除)」,不算缺失。

执行档与降级

  • 默认档位:review(离线白名单)。
  • 本沙箱实测:无 mvn、无 pytest 模块、Playwright 需浏览器+后端 9082 → 单元/集成/E2E/pytest 的实际运行将标记为「未实测」并降级为测试设计 + 缺口诊断,绝不伪造成通过。
  • 唯一能真做的只读项:全项目代码审查(源码可直读)+ 静态证据分析。
  • 联网命令(依赖漏洞扫描、压测)属 execute 档,需用户单独显式授权;本沙箱网络受限,即便授权也可能需落用户本地。

排除项

  • 不修改/删除/提交/推送被审查代码(全程只读)。
  • 不安装依赖、不执行仓库内脚本、不跑白名单外命令。
  • 不替代研发做重构或上线决策。

五、执行档申请(待用户确认)

项 申请
审查范围 默认全覆盖 20 类(可收窄)
执行档 review(离线白名单);execute(联网)需另行授权
本环境可实测 仅全项目代码审查(只读);其余测试运行项降级为设计+缺口诊断
需用户本地 Java 单测/集成、Python、Playwright 实际跑测(沿用 docs/tdd/test/runbook.md)

下一步(阶段 3 闸门):请用户确认「范围 + 执行档」后,主理人建立团队 test-cfc,按方案分四阶段调度八域专家,并最终产出缺口清单 / 五要素问题清单 / 门禁结论。确认前不执行任何测试命令。