# W2-T7 独立评审报告 ## Verdict **FAIL** - 提交:`fca1160 feat: add skill learning path service` - 评审对象:`SkillLearningPathService`、`SkillLearningPathItem`、`SkillLearningPathResponse`、`SkillLearningPathServiceTest` - 阻断项:1 项 Important - 结论:生产实现整体符合 T7 行为契约,但核心顺序行为缺少可证伪的回归测试,不能放行 T8。 ## 独立测试 执行环境:JDK 17.0.16、Maven 3.9.7。 ```powershell $env:JAVA_HOME='D:\java\jdk' & 'D:\maven\apache-maven-3.9.7\bin\mvn.cmd' '-Dtest=SkillTaxonomyMigrationTest,SkillCloudSeedDataIntegrationTest,SkillTaxonomyRepositoryTest,SkillCloudQueryServiceTest,SkillMatchServiceTest,SkillLearningPathServiceTest' test ``` 结果: ```text Tests run: 49, Failures: 0, Errors: 0, Skipped: 0 BUILD SUCCESS Total time: 1:00 min ``` ## Important ### T7-I1:测试无法阻止学习路径按名称重排 - 文件:`mydreamjob-server/src/test/java/com/mydreamjob/skill/SkillLearningPathServiceTest.java:98-117` - 相关实现:`mydreamjob-server/src/main/java/com/mydreamjob/skill/SkillLearningPathService.java:35-38` 现有单测的 `missing` 顺序为: - `First` / `skillId=31` / `heat=1.00` - `Second` / `skillId=32` / `heat=10.00` - `Third` / `skillId=33` / `heat=5.00` 期望输出保持该输入顺序。但输入的名称和 `skillId` 本身均为升序,因此把实现改成: ```java missingSkills.stream() .sorted(Comparator.comparing(SkillCloudItem::nameZh)) .map(...) ``` 后,单测仍会通过。真实数据集成测试 `SkillLearningPathServiceTest.java:62-76` 使用职位 1,其当前 TOP10 全部为相同热度,名称顺序也已符合词云次级排序,因此同样无法发现该重排缺陷。 T7 的要求是严格复用 `SkillMatchService` 返回的 `missingSkills` 顺序,不自行排序;该回归会破坏 REQ-LP-2。测试需要使用不会被名称排序或 `skillId` 排序偶然保持一致的缺失技能顺序,最好增加多热度分组的真实数据场景。 ## 已通过检查 - 学习路径只遍历 `matchResponse.missingSkills()`,未消费已命中技能;优先级从 1 连续生成。 - 编程语言、框架、工具、通用四类模板均已实现;未知、空模板编码及分类不存在时回退通用模板。 - 建议包含技能名,精确断言中未出现 URL、课程链接、讲师、价格、时长、完成度或 AI 内容。 - 无缺口时返回 `total=0` 和空列表,且不访问分类仓储。 - 重复调用返回相同顺序、优先级和建议。 - `SkillLearningPathItem` 仅包含技能 ID、技能名、分类 ID、分类名、优先级和建议,不含隐私字段。 - 服务使用只读事务;未发现持久化或外部服务调用。 - 提交只新增 4 个指定文件,未包含 T8 及后续实现。 ## Minor - `SkillLearningPathServiceTest.java:195-221` 覆盖了 null 模板编码、未知模板和分类不存在,但未直接覆盖 `skill.categoryId()==null`;实现已在 `SkillLearningPathService.java:57-58` 回退 GENERAL。 - 外部内容主要通过精确模板断言和禁用词断言约束;生产类没有外部客户端依赖,因此本项不构成阻断。 ## 未决问题 无。修复测试后需重新执行指定回归并复审。