---
title: 让 AI 证明自己没改坏
date: 2026-11-05
summary: 五个 agent 并行改代码，靠什么防止互相改坏？答案不是信任，是五层机械验收和一句「缺证据就 UNDETERMINED」。
tags: [QA, 自动化测试, AI 协作]
draft: false
---

AI 改代码很快，问题只有一个：**你怎么知道它没改坏？**

《小光头勇闯修真界》做到后期，我同时开多个 agent 改不同模块。
答案不是「review 一遍」，而是把验收做成机器能判的五层。

## 五层验收，从静态到真机

1. **LSP 静态检查**：用脚本卡 `ERROR=0`，错误数从 43 压到 0 之后才允许提交
2. **179 项断言**：核心玩法、数值、状态机逐项跑
3. **机器人试玩**：3 个固定 seed 的机器人通关，检查可达性
4. **目标视口截图**：每轮按 1080×1920 截图存档，用于视觉验收
5. **真机**：最后一道人眼检查

## 最关键的一句规则：缺证据只能是 UNDETERMINED

第二层里我把结论固定成三种状态：**PASS / FAIL / UNDETERMINED**。

没有截图、没跑机器人、日志缺失——一律 UNDETERMINED。
不允许「看起来没问题」，因为那等于把证据的判断权交回给人，AI 就又可以糊弄了。

## 机器人必须走真实输入路径

第一版机器人是白盒直调的：直接改状态、直接触发通关，结果造出了「假通关」。

后来改成必须通过虚拟指针走真实输入路径，重开也必须走真实的点击流程并断言结果。
**测试如果绕过真实的输入路径，测的就是测试本身。**

## 用确定性回归当熔断

重构成「行为保持不变」的改动，必须逐位复现基线数值：
机器人的通关时间要和基线一致（比如 185.68 / 203.18 / 192.17 秒）。

数字对不上，哪怕只有 100 毫秒，也说明某处行为变了。

## 两个容易忽略的坑

- **隔离玩家存档**：测试必须切到 qa 模式，否则游戏里的永久升级会悄悄修改基线
- **干净 worktree 复核**：让另一个 agent 在干净的 worktree 上 checkout 指定 commit
  再跑一次，别在脏工作区「自证清白」

## 一句话

让 AI 自己跑测试只是第一步。真正要设计的是：**AI 的产出如何被独立验证**。
