SRS.md 21 KB

CFC · TDD 覆盖台账(自动发现 · 不发明)

生成依据:tdd-orchestrator/scripts/discover_tests.py 对 cfc-backend 的只读扫描。 本仓库模式:TDD 编排器在 CFC 的定位是 发现 / 格式化 / 跟踪已有测试, 不创建测试用例、不发明需求缺口。所有数据来自仓库真实测试源代码。完整明细见 docs/tdd/test/discovery.md。 跨源测试用例总台账(含 tests/ 目录下的结构化用例 / Playwright / Python)见 docs/tdd/test/inventory.md——每条均标注来源锚点,进度回写落在 .tdd/test-progress.json 侧车(不破坏原结构)。

SRS 能力键(TDD 池源)

CFC 采用「发现模式」:不在本文档播种任何 ⏳ 虚构缺口键。 能力键池由 discovery.md 的真实覆盖缺口(uncovered / partial 控制器)推导; 若要把某缺口转化为测试任务,走 tdd_orchestrate.py --add-task <unit.domain.action> --requirement <源> --design <源> 显式入池(须带溯源锚点)。

一、整体汇总

指标 数值
控制器总数 356
handler 方法总数 1918
handler 已覆盖 198 (10%)
控制器-已全覆盖(covered) 16
控制器-部分覆盖(partial) 68
控制器-未覆盖(uncovered) 271
控制器-无 handler 1
测试文件数 182
@Test 方法总数 1371
含跳过/假设项(test 级 partial) 4

二、模块覆盖分布(按 handler 覆盖率,降序)

模块 控制器 handler 已覆盖 覆盖率
admin 120 648 28 4%
guide 19 121 26 21%
family 15 94 15 16%
HealthReportController.java 1 59 0 0%
product 6 49 13 27%
content 5 32 5 16%
mind 8 32 3 9%
DanAssessmentController.java 1 29 0 0%
task 3 28 0 0%
HealthKnowledgeBaseController.java 1 28 1 4%
assessment 6 27 1 4%
auth 2 21 14 67%
growth 2 20 4 20%
ai 5 20 4 20%
diet 5 19 0 0%
MembershipController.java 1 17 4 24%
fatloss 4 16 0 0%
CircleController.java 1 16 1 6%
OrchestrationController.java 1 15 0 0%
recommendation 5 15 0 0%
KeyPersonController.java 1 14 0 0%
nutrition 2 14 0 0%
ActivityController.java 1 13 6 46%
CommissionController.java 1 13 1 8%
HealthPlanController.java 1 13 1 8%
user 3 12 0 0%
stats 1 12 4 33%
wish 1 12 11 92%
BadgeController.java 1 11 0 0%
wealth 3 11 0 0%
reward 2 11 0 0%
CouponController.java 1 10 0 0%
TaskTemplatePackageController.java 1 10 0 0%
UserController.java 1 10 0 0%
subscription 1 10 1 10%
GutHealthProjectController.java 1 9 0 0%
MarketController.java 1 9 0 0%
PearlController.java 1 9 0 0%
butler 2 9 1 11%
EnergyController.java 1 9 5 56%
ContactController.java 1 8 0 0%
DanReportController.java 1 8 0 0%
FamilyChallengeController.java 1 8 0 0%
PurchaseController.java 1 8 0 0%
dan 1 7 0 0%
planner 1 7 0 0%
ShareController.java 1 7 0 0%
StreetController.java 1 7 0 0%
tianpan 1 7 0 0%
shop 4 7 1 14%
DoaController.java 1 7 1 14%
ContactMatchController.java 1 6 0 0%
CouponGiftController.java 1 6 0 0%
FamilyEarningsController.java 1 6 0 0%
FamilyPlatformBalanceController.java 1 6 0 0%
PackagePaymentController.java 1 6 0 0%
PromotionMaterialController.java 1 6 0 0%
ServiceRoleApplicationController.java 1 6 0 0%
config 4 6 2 33%
FoodRecommendController.java 1 6 2 33%
IndicatorController.java 1 6 2 33%
cart 1 5 0 0%
HealthCircleController.java 1 5 0 0%
HealthGrowthRecordController.java 1 5 0 0%
MealRecommendController.java 1 5 0 0%
MediaController.java 1 5 0 0%
MiniGameController.java 1 5 0 0%
ReportMemberPermissionController.java 1 5 0 0%
parent 2 5 2 40%
ActivityOrderController.java 1 5 1 20%
DailyCheckinController.java 1 5 4 80%
GameRecordController.java 1 5 1 20%
HealthDimensionController.java 1 5 4 80%
HealthMealController.java 1 5 1 20%
InviteController.java 1 5 2 40%
PointsExchangeController.java 1 5 1 20%
SurveyController.java 1 5 1 20%
AttributionController.java 1 4 0 0%
DistributionInviteController.java 1 4 0 0%
HealthCheckinController.java 1 4 0 0%
HealthStatusController.java 1 4 0 0%
HomeController.java 1 4 0 0%
MicroActionController.java 1 4 0 0%
RegionController.java 1 4 0 0%
UserIntentController.java 1 4 0 0%
VirtualPayController.java 1 4 0 0%
wisdom 2 4 0 0%
ConsentController.java 1 4 2 50%
OctopusController.java 1 4 1 25%
ActivityFeedbackController.java 1 3 0 0%
ActivityMaterialController.java 1 3 0 0%
DailyFeedbackController.java 1 3 0 0%
GrowthController.java 1 3 0 0%
GrowthTaskController.java 1 3 0 0%
HealthExerciseController.java 1 3 0 0%
InviteCardController.java 1 3 0 0%
PromotionController.java 1 3 0 0%
ReportParserController.java 1 3 0 0%
ReportSummaryController.java 1 3 0 0%
UserSegmentationController.java 1 3 0 0%
CfCommissionController.java 1 3 1 33%
ReportSurveyController.java 1 3 1 33%
ReviewController.java 1 3 1 33%
vendor 1 3 1 33%
CfBalanceController.java 1 3 3 100%
IndicatorFavoriteController.java 1 3 3 100%
CfTransferController.java 1 2 0 0%
CircleChallengeController.java 1 2 0 0%
DataPermissionController.java 1 2 0 0%
HealthAlertController.java 1 2 0 0%
HealthMeditationController.java 1 2 0 0%
HealthScoreController.java 1 2 0 0%
HealthSleepController.java 1 2 0 0%
InviteMilestoneController.java 1 2 0 0%
notice 1 2 0 0%
OnboardingController.java 1 2 0 0%
PackageLogisticsController.java 1 2 0 0%
ProblemPackageController.java 1 2 0 0%
profile 1 2 0 0%
RecommendController.java 1 2 0 0%
ReferralLeaderboardController.java 1 2 0 0%
publicapi 1 2 0 0%
UserNotificationController.java 1 2 0 0%
UserNutritionProfileController.java 1 2 0 0%
WithdrawalController.java 1 2 0 0%
XiaoeWebhookController.java 1 2 0 0%
sncp 1 2 0 0%
BasicQuotaController.java 1 2 1 50%
EmiReportController.java 1 2 1 50%
HealthWaterController.java 1 2 1 50%
NutritionistController.java 1 2 1 50%
ProblemSurveyController.java 1 2 1 50%
PromotionCommissionController.java 1 2 1 50%
StreakController.java 1 2 2 100%
AbilityController.java 1 1 0 0%
CommonController.java 1 1 0 0%
ContentFilterController.java 1 1 0 0%
FamilyHealthController.java 1 1 0 0%
HealthInteractionController.java 1 1 0 0%
HealthPlanPublicController.java 1 1 0 0%
HealthTimelineController.java 1 1 0 0%
HomeBannerController.java 1 1 0 0%
PosterTemplateController.java 1 1 0 0%
ProblemDomainController.java 1 1 0 0%
SeedEnergyController.java 1 1 0 0%
ZodiacEnergyController.java 1 1 0 0%
DailyTaskController.java 1 1 1 100%
special 1 1 1 100%
UnlockController.java 1 1 1 100%
mcp 1 0 0 0%

三、未覆盖控制器(真实缺口 · Top 40)

以下控制器无任何 handler 被测试命中,是真实扫描得到的覆盖缺口。

  • AdminController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminController.java,65 方法)
  • HealthReportController(cfc-backend/src/main/java/com/etotem/cfc/controller/HealthReportController.java,59 方法)
  • DanAssessmentController(cfc-backend/src/main/java/com/etotem/cfc/controller/DanAssessmentController.java,29 方法)
  • AdminArticleController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminArticleController.java,22 方法)
  • TaskController(cfc-backend/src/main/java/com/etotem/cfc/controller/task/TaskController.java,18 方法)
  • FamilyUserController(cfc-backend/src/main/java/com/etotem/cfc/controller/family/FamilyUserController.java,17 方法)
  • AdminInventoryController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminInventoryController.java,16 方法)
  • FamilyInviteController(cfc-backend/src/main/java/com/etotem/cfc/controller/family/FamilyInviteController.java,15 方法)
  • OrchestrationController(cfc-backend/src/main/java/com/etotem/cfc/controller/OrchestrationController.java,15 方法)
  • KeyPersonController(cfc-backend/src/main/java/com/etotem/cfc/controller/KeyPersonController.java,14 方法)
  • AdminCouponController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminCouponController.java,12 方法)
  • SupplySystemController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/SupplySystemController.java,12 方法)
  • BadgeController(cfc-backend/src/main/java/com/etotem/cfc/controller/BadgeController.java,11 方法)
  • SupplyHierarchyController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/SupplyHierarchyController.java,11 方法)
  • TrainingPlanController(cfc-backend/src/main/java/com/etotem/cfc/controller/guide/TrainingPlanController.java,11 方法)
  • AdminGuideController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminGuideController.java,10 方法)
  • CouponController(cfc-backend/src/main/java/com/etotem/cfc/controller/CouponController.java,10 方法)
  • GuideController(cfc-backend/src/main/java/com/etotem/cfc/controller/guide/GuideController.java,10 方法)
  • ProcurementTaskController(cfc-backend/src/main/java/com/etotem/cfc/controller/product/ProcurementTaskController.java,10 方法)
  • TaskTemplatePackageController(cfc-backend/src/main/java/com/etotem/cfc/controller/TaskTemplatePackageController.java,10 方法)
  • TeacherController(cfc-backend/src/main/java/com/etotem/cfc/controller/guide/TeacherController.java,10 方法)
  • UserController(cfc-backend/src/main/java/com/etotem/cfc/controller/UserController.java,10 方法)
  • AdminButlerController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminButlerController.java,9 方法)
  • FamilyMembersController(cfc-backend/src/main/java/com/etotem/cfc/controller/family/FamilyMembersController.java,9 方法)
  • FileRecordController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/FileRecordController.java,9 方法)
  • GutHealthProjectController(cfc-backend/src/main/java/com/etotem/cfc/controller/GutHealthProjectController.java,9 方法)
  • KnowledgeBaseController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/KnowledgeBaseController.java,9 方法)
  • MarketController(cfc-backend/src/main/java/com/etotem/cfc/controller/MarketController.java,9 方法)
  • PearlController(cfc-backend/src/main/java/com/etotem/cfc/controller/PearlController.java,9 方法)
  • PpointConfigAdminController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/PpointConfigAdminController.java,9 方法)
  • AdminActivityController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminActivityController.java,8 方法)
  • AdminAuthController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminAuthController.java,8 方法)
  • ArticleCommentController(cfc-backend/src/main/java/com/etotem/cfc/controller/content/ArticleCommentController.java,8 方法)
  • ContactController(cfc-backend/src/main/java/com/etotem/cfc/controller/ContactController.java,8 方法)
  • DanReportController(cfc-backend/src/main/java/com/etotem/cfc/controller/DanReportController.java,8 方法)
  • FamilyChallengeController(cfc-backend/src/main/java/com/etotem/cfc/controller/FamilyChallengeController.java,8 方法)
  • PurchaseController(cfc-backend/src/main/java/com/etotem/cfc/controller/PurchaseController.java,8 方法)
  • SupplyManageController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/SupplyManageController.java,8 方法)
  • SysMenuController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/SysMenuController.java,8 方法)
  • TaskReminderController(cfc-backend/src/main/java/com/etotem/cfc/controller/task/TaskReminderController.java,8 方法)
  • …(其余 231 个见 discovery.md)

四、部分覆盖控制器(已做一部分测试)

这些控制器已有测试但只覆盖了部分方法——即「已经做了一部分测试的情况,要能够找到」。

  • HealthKnowledgeBaseController:覆盖 1/28,未覆盖:batchQuery、list、add、update、delete、importKnowledgeBase、queryBacteria、batchQueryBacteria、queryIndicator、queryFood
  • ProductOrderController:覆盖 7/19,未覆盖:myOrderCounts、vendorConfirm、reviewUpdate、ship、applyRefund、handlePaymentSuccess、notify、activityAudit、activitySignIn、activityComplete
  • AuthController:覆盖 14/18,未覆盖:setSwitchPassword、verifyToken、ssoTicket、ssoLogin
  • GuideManagementController:覆盖 3/17,未覆盖:resubmitApplication、getUserApplications、getApplicationRecords、generateInviteCode、getInviteCodes、validateInviteCode、getChildGuides、getAllChildGuides、getParentGuide、getGuidePackageTemplates
  • MembershipController:覆盖 4/17,未覆盖:getAllLevels、getMyMembership、getUpgradeRecords、upgradeOrder、activateTrial、createOrder、continueOrder、getPricingPlans、getMembershipCompare、paymentNotify
  • ArticleController:覆盖 4/16,未覆盖:relatedProducts、related、relatedByProduct、getArticleAudio、reportReadingTime、readingStats、dailyTip、aiQuestions、submitAnswers、publish
  • CircleController:覆盖 1/16,未覆盖:myCircles、discover、join、leave、create、update、pendingMembers、approve、feed、multiFeed
  • ReportParserAdminController:覆盖 1/15,未覆盖:listTypes、toggleType、deleteType、listFingerprints、saveFingerprint、deleteFingerprint、listImports、uploadImport、approveImport、rejectImport
  • ActivityController:覆盖 6/13,未覆盖:submitReview、register、cancelRegistration、myRegistrations、registrationRoster、checkin、checkinReview
  • CommissionController:覆盖 1/13,未覆盖:list、team、stats、balance、teamList、funnel、teamConsumption、myReferrer、teamTree、teamGrowthCurve
  • GrowthRecordController:覆盖 4/13,未覆盖:getRecordList、getChildRecords、getRecordDetail、deleteRecord、syncExternalResult、createFromUpload、createSupplement、checkDuplicate、getSupplements
  • HealthPlanController:覆盖 1/13,未覆盖:generate、regenerateSection、save、confirm、list、detail、planTasks、availableTeachers、listPendingReview、updatePlan
  • StatsController:覆盖 4/12,未覆盖:getDashboardSummary、getRevenueStats、getMembershipStats、childOverview、familySummary、pointsRanking、getTrafficAnalytics、recordProductView
  • WishController:覆盖 11/12,未覆盖:priceAlias
  • PaymentController:覆盖 5/11,未覆盖:createWechatNativePay、getPaymentStatus、getOAuth2Url、oauth2Callback、handleV3Notify、generateQrCode
  • AdminVirtualTeamController:覆盖 1/10,未覆盖:list、create、update、toggle、addMember、removeMember、updateMember、userTeams、tree
  • GuideFamilyTaskController:覆盖 8/10,未覆盖:unbindFamily、getDashboardStats
  • SubscriptionController:覆盖 1/10,未覆盖:getPlans、createOrder、subscribe、cancel、setAutoRenew、getMyBenefits、checkBenefit、getTier、updateTier
  • AIChatController:覆盖 3/9,未覆盖:reportAnalyze、deleteConversation、sendNutritionMessage、sendHealthCoachMessage、sendHealthButlerMessage、transcribe
  • AdminProductController:覆盖 1/9,未覆盖:list、review、shelve、detail、create、update、copy、delete
  • EnergyController:覆盖 5/9,未覆盖:configureSourceRatios、getScoreHistory、getFamilyScoreHistory、getWealthDetail
  • FiveDimensionSelfCheckController:覆盖 3/9,未覆盖:submit、getHistory、ignoreSelfCheck、generatePlan、getTrendAnalysis、aiGenerateQuestions
  • ProductController:覆盖 6/9,未覆盖:updateImages、specMap、relatedProducts
  • CognitiveController:覆盖 1/8,未覆盖:getChildCognitiveScores、getFamilyCognitiveScores、updateCognitiveScore、getRecommendations、createTaskFromRecommendation、getNorms、submitSelfTest
  • GuideTeamController:覆盖 6/8,未覆盖:checkStatus、leaveTeam
  • DoaController:覆盖 1/7,未覆盖:createStage、stageDetail、cancelStage、submitPlan、submitReview、weekList
  • EmotionCheckinController:覆盖 2/7,未覆盖:create、list、stats、weeklyReport、recognizeEmotion
  • AdminEnergyConfigController:覆盖 1/6,未覆盖:sourceList、sourceSave、sourceDelete、dailyLimits、dailyLimitSave
  • AdminGuidePopupController:覆盖 1/6,未覆盖:list、create、update、delete、stats
  • AdminPlannerExamController:覆盖 1/6,未覆盖:papers、createPaper、updatePaper、deletePaper、saveQuestions
  • AdminSpecialPriceController:覆盖 4/6,未覆盖:list、update
  • ButlerController:覆盖 1/6,未覆盖:apply、getProfile、updateProfile、getServiceRecords、getCommissions
  • FoodRecommendController:覆盖 2/6,未覆盖:getIndex、getHistory、getByFamily、getCautionFoods
  • IndicatorController:覆盖 2/6,未覆盖:quickLookup、sourceTypes、periods、correlationList
  • ActivityOrderController:覆盖 1/5,未覆盖:create、pay、handlePaymentSuccess、notify
  • AdminCommissionConfigController:覆盖 1/5,未覆盖:getConfig、updateConfig、settle、refund
  • AdminOrgStatsController:覆盖 2/5,未覆盖:families、active、revenue
  • DailyCheckinController:覆盖 4/5,未覆盖:detail
  • GameRecordController:覆盖 1/5,未覆盖:getHistory、getBestScores、getStats、getLeaderboard
  • HealthDimensionController:覆盖 4/5,未覆盖:radarData
  • …(其余 28 个见 discovery.md)

五、使用说明

  • 刷新覆盖台账:python3 tdd-orchestrator/scripts/discover_tests.py --project <repo> --out docs/tdd/test/discovery.md
  • 本台账与 discovery.md 均为只读扫描产物,不改动任何源码。

六、跨源测试用例总台账(含 tests/ 目录 · 标注来源)

此前仅扫了 cfc-backend/src/test/java,漏掉了仓库根 tests/ 下的一整套测试资产。 现已由 tdd-orchestrator/scripts/test_inventory.py 全源编目,产出 docs/tdd/test/inventory.md。

  • 结构化测试用例 tests/test-cases/*.md:678 条(TC-A-01 等全局唯一编号,正常流/异常流/权限流三类),每条自带 对应 e2e 与 关联需求/设计(控制器);来源锚点 = tests/test-cases/<文件>.md#<TC编号>。
  • Playwright tests/**/*.spec.js:70 文件 / 411 用例(e2e + integration + api 冒烟)。
  • Python(pytest) cfc-langgraph/tests + tools/xaf_agent_hub/tests:12 文件 / 55 用例。
  • Java 后端测试 cfc-backend/src/test/java:182 文件 / 1371 @Test(方法级覆盖见 discovery.md)。
  • 用户场景 tests/user-scenarios/*.md:8 文件(上游输入,201 个场景 SC-角色-NN)。
  • 合计 950 条编目锚点 / 2515 个用例·方法,每条均带来源锚点。

回写进展机制(不破坏原项目结构)

进度不写回 tests/ 与 cfc-backend/src/test/java 下的原始测试文件,而是落在本地侧车 .tdd/test-progress.json(与 config.json 同目录,本地不推送):

// .tdd/test-progress.json
{ "schema": "tdd-test-progress/v1",
  "sources": [ { "anchor", "source_type", "source_path", "local_id", ...meta }, ... ],
  "progress": { "<anchor>": { "status":"pass|fail|executed|blocked|untracked", "at":ISO, "by":"", "note":"" } } }
  • anchor = source_path#local_id(如 tests/test-cases/admin.md#TC-A-01、tests/e2e/admin-panel.spec.js#<用例标题>、cfc-langgraph/tests/test_intent.py#test_classify_chat)。
  • 回写时仅更新 progress[anchor];原始 .md/.spec.js/.py 一律不动,原项目结构零侵入。
  • 用 test_inventory.py --emit-progress 可(重新)播种 anchors(保留已有 progress)。若需团队共享进度,可将该侧车移到 docs/tdd/ 并推送(默认留本地,呼应 config 本地化约定)。