Files
TARE-Learn/slidev/pages/day5/m13-historical-code-governance.md
T
smart 67837df8d0 docs: 更新TRA编程培训课程材料、课件与AI技能交付包
- 新增全套考试卷、评估卷、参考答案与考试培训包模板
- 修正slidev培训课件:调整模块标题、链路图缩放,替换工单示例为通用业务对象
- 修正课堂红线表述为证据红线,将小组作业调整为个人作业要求
- 新增权限、状态流转、审计日志、看板指标四类可复用业务规则块
- 整理AI工程技能交付包,迁移旧资产至客户专属交付包并统一术语
- 新增考试输出模板与TRAE使用记录文档
2026-08-08 11:00:36 +08:00

12 KiB

模块 13:历史代码治理、类型契约与测试补齐

Rule、Skill、Agent 和 MCP 解决的是“如何沉淀判断”。

回到真实项目,历史代码治理还需要回答:哪些结构可以调整、哪些行为必须保持、类型是否真的表达了接口契约,以及测试到底覆盖到哪里。

职责结构
行为基线
命令模型
类型契约
测试矩阵
断言边界

派车重构的候选职责结构

当前 assign 保持事务编排入口,候选拆分只调整内部职责,不改变 Controller、接口或写入顺序:

assign(vo)  @Transactional
  |- 校验申请:存在、已审批、未重复派车
  |- 校验车辆:存在、可用、时间不冲突
  |- 校验司机:按 needDriver 决定必填、可用、时间不冲突
  |- 创建派车任务:写入申请、车辆、司机、计划时间与状态
  `- 预占车辆:AVAILABLE -> RESERVED
可调整的内部边界 不能借拆分改变的行为
私有校验方法、局部命名、组装对象的位置 事务边界、拒绝顺序、接口字段、派车与车辆的写入语义

用行为基线验收无损重构

assign 的当前源码可先整理为行为基线;重构后的代码和测试都应逐项回到这张表。

输入条件 预期结果 允许的写入
申请不存在、未完成或已派车 拒绝派车 无派车任务、无车辆状态变更
车辆不存在、不可用或时间冲突 拒绝派车 无派车任务、无车辆状态变更
需要司机但未提供,或司机不可用/冲突 拒绝派车 无派车任务、无车辆状态变更
所有前置条件满足 创建 DISPATCHED 派车任务 车辆由 AVAILABLE 变为 RESERVED
“无损”不是代码未报错,而是每个拒绝路径和成功副作用仍与基线一致。

类型治理要分开命令、实体与展示模型

派车模块已有一组可对照的模型边界:

模型 当前字段范围 应承担的职责
OfficialVehicleDispatchVo applyId、carId、可选 driverId、remark 派车命令的唯一输入
OfficialVehicleDispatch ID、调度人、时间、状态、取消原因等 服务端持久化与列表展示结果
前端 OfficialVehicleDispatchVo 与派车命令相同的四类字段 提交时只发送用户可提供的内容
前端 OfficialVehicleDispatch 读取列表中的状态、时间和调度人等 展示与操作条件判断
命令类型不是实体类型的 `Partial`:状态、时间和操作人不应由派车表单决定。

类型差异必须形成可执行的核验用例

审批结果和申请状态的定义差异,不能只记录在问题单中,应转换为可验证的契约。

核验对象 输入或观察值 需要确认的结论
审批命令 pass、reject、PASS、REJECT 哪些值能被接口接受;拒绝时返回什么语义
审批表单 单选组件实际提交的 result 页面提交值是否与接口契约一致
申请状态 1、"1" 及接口返回值 前端渲染和状态判断使用的唯一表示
类型定义 联合类型、表单选项、后端常量 三处是否指向同一组允许值
类型契约完成的标准是“能执行的接受与拒绝用例”,不是文档里多了一行枚举。

取消派车的测试用例应覆盖状态与副作用

场景 期望行为 当前证据状态
cancelReason 全空白 立即拒绝,不访问后续依赖 已有 Service 单测
派车任务不存在 拒绝,不更新派车或车辆 待补
派车状态不是 DISPATCHED 拒绝,不释放车辆 待补
任务可取消且车辆存在 记录取消原因,派车变 CANCELLED,车辆变 AVAILABLE 待补
任务可取消但车辆记录缺失 派车仍完成取消,避免空指针 待补,当前源码有空值保护
测试用例的粒度应跟随状态与副作用,不以“覆盖了 cancel 方法”作为完成标准。

断言要与被测层级匹配

被测层级 当前可见证据 应断言什么 不能替代什么
Controller Mockito 验证 cancel 的委派与结果消息 接口是否交给正确的 Service 参数 Service 内部状态和持久化行为
Service 拒绝路径 空白原因抛出异常 不满足条件时无后续写入或资源释放 正常取消的双对象更新
Service 成功路径 当前尚无定向单测 派车状态、取消原因、车辆状态及更新次数 前端实际请求载荷
API / 集成层 当前尚无契约验证记录 前后端值、权限、序列化与错误响应 未执行环境的全链路结论
Controller Mock 测试通过,不等于业务状态机已经被测试。

从案例到可执行资产

案例提供事实;资产保存判断;重构守住行为;类型表达契约;测试证明副作用;MCP 将外部能力纳入同一套边界。
事实
Rule
任务契约
Skill
Agent
MCP
类型
测试