Skip to content

AI 协作工程化 03:让设计可执行,从需求点到代码提交的追溯链

“完成需求”是一个过于宽泛的说法。它可能表示写完方案、提交了代码、跑过测试,或者只是认为功能看起来合理。只要这些表达没有落到稳定对象上,审查者就无法知道哪里被实现、哪里没有实现、某次回滚会影响什么。

可执行设计的关键不是文档写得多,而是把不同阶段的事实连成一条短而完整的链路:需求点、设计项、任务、执行、审查和验证都能相互定位。

把抽象目标分解成稳定对象

一条常用的最小链路可以这样定义:

text
RP(需求点)
  -> DES(设计项)
  -> TASK(可独立交付的任务)
  -> execution(实际执行)
  -> review(实现审查)
  -> acceptance(需求验收)

每一层都回答不同问题。

对象核心问题不应该承担的责任
RP用户要获得什么效果,边界是什么具体文件怎么改
DES采用什么方案、影响哪些对象提交如何拆分
TASK哪个最小改动可独立实施、验证、回滚汇总整个需求的进度
execution代码和验证实际发生了什么修改需求目标
review证据是否支持通过或打回替代开发或设计

这不是为了给文档编号,而是为了给每个判断留下一条可验证的来路。

TASK 是交付边界,不是待办事项

很多计划中的“任务”其实是模块名,例如“改订单模块”或“补充接口”。这种任务无法独立验证,也无法安全回滚。一个合格的 TASK 至少需要界定:允许改动的范围、预期行为、验证方式、失败处理和回滚边界。

可以用一个简单的判断题检验粒度:

如果只撤销这个 TASK 的提交,系统是否仍能回到一个可解释的状态?

如果答案是否定的,它可能只是一个大任务中的步骤;如果答案肯定,但与其他改动没有共享不可分割的不变量,它就应该保持独立。

让 Git 提交成为证据的一部分

一个 TASK 最好对应每个受影响仓库中的一笔本地提交。提交信息或正文包含 TASK-* 和关联 RP-*,开发记录再记录分支、提交引用、实际 diff 范围和验证结果。

这不是要求所有提交都要“好看”,而是让审查可以落在事实层:

  • 计划说要改哪个入口,diff 是否真的覆盖该入口?
  • 当前提交有没有混入其他需求或用户已有改动?
  • 回滚时能否定位仅属于这个 TASK 的修改?
  • 后续修改替代旧实现后,旧审查结论是否还适用?

如果没有代码变更,例如纯验证重跑或证据补充,也应明确记录“无新增本地提交”和原因。虚构一个空提交只会污染追溯链。

覆盖范围和修复范围必须分开

审查最容易犯的错误,是把发现问题的局部集合误当作整个审查范围。正确做法是同时保留两组信息:

  • 覆盖范围:本次实际审查了哪些需求点、任务和执行记录。
  • 精确修复集合:其中哪些对象必须由下游行动。

例如,一个实现审查覆盖了 TASK-011TASK-012,只发现 TASK-012 的错误。审查报告应保留完整覆盖范围,但 Developer 的行动范围只应是 TASK-012。否则要么丢失 TASK-011 已经被审查的事实,要么诱发不必要的全量重做。

事实更新后,证据也有有效期

追溯链不是静态的。如果同一 TASK 的实现被重新执行,原来的代码 diff 和验证证据可能已经不代表当前实现;对应的审查行需要显式失效或被新事实替代。反过来,追加需求也不应改写旧需求点,而应创建新对象并保留旧链路作为兼容背景。

这就是为什么“最新一段报告说通过了”不够。验收要检查的是:每一条当前有效 execution,是否仍有适用于它的通过审查链。

常见的断链方式

断链方式为什么危险修正方式
需求点直接指向代码文件跳过方案和任务边界经 DES 与 TASK 建立中间语义
一个 TASK 包含多个独立改变无法独立验证和回滚按不变量与提交边界拆分
审查只写“已通过”无法知道通过什么记录对象 ID、证据引用和范围
重做代码却保留旧审查旧证据失效但看起来仍有效用新 execution 和新 review 替代

小结

可追溯链不是项目管理负担,而是让“完成”变成可证明事实的最小结构。它让设计、代码、审查和验收都能回答同一个问题:这项需求是通过哪一组可复核证据被认为完成的?

下一篇把视角从对象链路转向质量机制:为什么设计、实现和验收不能合并为一次“统一审查”。


系列导航