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,按方案分四阶段调度八域专家,并最终产出缺口清单 / 五要素问题清单 / 门禁结论。确认前不执行任何测试命令。