You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

3.2 KiB

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。

$env:JAVA_HOME='D:\java\jdk'
& 'D:\maven\apache-maven-3.9.7\bin\mvn.cmd' '-Dtest=SkillTaxonomyMigrationTest,SkillCloudSeedDataIntegrationTest,SkillTaxonomyRepositoryTest,SkillCloudQueryServiceTest,SkillMatchServiceTest,SkillLearningPathServiceTest' test

结果:

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 本身均为升序,因此把实现改成:

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。
  • 外部内容主要通过精确模板断言和禁用词断言约束;生产类没有外部客户端依赖,因此本项不构成阻断。

未决问题

无。修复测试后需重新执行指定回归并复审。