AI CodingHarness工程实践质量保障

AI Coding 的下一步不是写得更快,而是可验收:蚂蚁数科 Harness 工程实践

魏长征··原文链接
收录于 2026/9/5 22:42:20

AI Coding 的核心矛盾

随着大模型能力增强,AI Coding 正从代码补全走向由 Agent 独立执行完整任务。工具形态也经历了演变:对话框 → IDE 插件(Cline)→ AI IDE(Cursor)→ 终端工具(Claude Code)。开发者角色从"代码生产者"变成"代码和结果的评判者"。

核心矛盾:AI Coding 的产能提升极快,但研发团队的验证标准、验证方法和验证工具是否同步跟上了?一旦验证能力没跟上代码生产能力,项目就很容易失控。

作者强调一个关键认知:AI Coding 并没有创造全新的软件工程问题。需求模糊、目标漂移、事实冲突、验证不足——这些在传统研发中一直存在。AI 只是速度太快、产能吞吐太高,把分散在几个月中的问题集中暴露了出来。

本质上,AI Coding 放大的是研发流程中原本就存在的需求模糊、认知偏差、事实冲突和质量欠账。

Harness 架构:五层验证闭环

Harness 五层架构图

Harness 不是一种具体技术,而是一套围绕约束、验证和验收建立研发闭环的思路。这套五层体系是"马后炮"式总结——项目跑了两个月后发现效果不错,回头归纳出来的。每层都能在传统软件开发中找到对应:

  1. 约束层 — 对应传统研发的需求评审、架构评审、接口定义。明确任务目标、非目标、唯一事实源。文档需要分层,让 Agent 按任务读取对应模块信息,不一次性加载全部上下文。

  2. 对抗验证层 — 对应 Code Review。Agent 一次可能提交四五千行代码,人工审查不堪重负。解决思路是在 CI 流程中让不同 Agent 从不同侧重点审查:Contract 检查、代码减法、重复实现检测。

  3. 证据层 — 对应交付验收和质量准出。核心是可视化和可验证:HTML 验证报告、架构图、流程图。不能只看测试数量和覆盖率,还要看实际覆盖了哪些路径。如果一百个测试始终只覆盖两个状态之间的跳转,质量未必高。

  4. 状态写入层 — 对应任务拆解和 Sprint 管理。Agent 任务可能连续运行 15-20 小时,仅靠上下文压缩和模型记忆难以兜住长任务,需要外部工具阶段性持久化工作状态。每完成一个阶段要求 Agent 重新复述目标、方案和达成过程,判断是否跑偏。

  5. 目标对齐层 — 确保任务执行过程与预期目标持续对齐。

案例一:Rust 新项目(40 万行)

约束层文档体系

从零建设的 Rust 项目,代码规模超 40 万行,基本由 Agent 从头参与开发。关键实践:

  • 设计文档先行:AGENTS.md 等核心文档明确唯一事实源——哪些文件定义设计契约、API 以哪份文件为准
  • 文档分层:项目级文档下,每个模块有粒度更细的说明,Agent 按需读取
  • 变更文档强制:每个 PR 无论大小都要有变更文档,说明动机和影响
  • 文档与测试对齐:通过 CI 检查文档与代码一致性,让文档真正进入研发闭环
  • 测试可视化:Reviewer 可点开具体测试路径,查看覆盖了状态机中的哪些状态和跳转
  • CI 硬门禁:机器脚本确定性检查(如缺少变更文档直接拦截),不浪费 Token
  • CI 软门禁:不同模型和 Prompt 的 Agent Reviewer 从不同侧重点审查

多视角 Code Review

软门禁的 Reviewer 分工:

  • Contract Reviewer:核对变更目标、代码实现和规则是否一致
  • 减法 Reviewer:不断追问代码是否多余、能不能简化
  • 复用 Reviewer:检查项目中是否已存在可复用的能力,防止重复造轮子

案例二:C++ 存量项目改造(60 万行)

代码规模超 60 万行的 C++ 存量项目,已持续开发四五年,团队几十人。开发者已在私下使用 AI Coding,架构师 Review 非常痛苦,代码缺陷率飙升到 20% 以上。

治理思路:不能退回禁止 AI 的状态,唯一可行的办法是让大家光明正大地使用 AI,同时让团队能够约束和拦截它。

改造步骤:

  1. AI 扫描项目(1-2 周):Agent 自顶向下逐层梳理文档、代码和实际行为,找出不一致
  2. 重建事实源:订正错误、重新编写文档、建立唯一事实源。旧代码暂不修改但明确标注哪些是错误路径
  3. 逐步放入 Review 规则和 CI 检查:先补 Harness,再让 Agent 进入具体改造
  4. 功能切片和任务拆分:把边界清楚、影响可控的部分交给 Agent

试点选择 C++20 升级——这类任务语义等价、测试目标相对清楚。过去 C++14 升 C++17 用了约半年,这次选择局部模块让 Agent 按既定流程升级和模块化重构,取得不错效果后才开始并发推进。

改造结果:一个月内,代码缺陷率从 20%+ 降至个位数。

全流程延伸

完整研发闭环还需要继续向前延伸到需求阶段:产品人员可以让 AI 帮助澄清和复述需求,检查 PRD 歧义。从需求澄清、技术选型、方案对比,到编码、测试和最终验收,每个阶段都产生规范化产出物,配合渐进式披露,Agent 就能做到"相对可控"。

作者提醒:模型能力本身会波动。同一种模型一段时间倾向于多补全 Case,另一段时间又变成尽可能少做。这类变化不容易被 Harness 发现,最终功能可能差不多但实现质量有差异。

核心结论:AI Coding 对工程师的要求会越来越高。模型越强,期望越高,任务越复杂,暴露的问题越多,对工程师定义目标、识别边界、判断架构和验收结果的能力要求也越高。Harness 要做的,是让验证速度和验收能力与代码生产速度匹配。

评分:
3.0(1 人评分)