跳转到内容

它说「做完了」,你怎么确认

AI 会告诉你「已完成」「功能已实现」「测试通过」。

**它说这话的时候不是在骗你,是它真的这么认为。**问题在于它的判断标准和你的不一样——它看的是「我按你说的写了代码」,你要的是「这东西真的能用」。

这两件事经常不是一回事。

这是本层最重要的一句话。

举个例子。你说:「做个上传功能,文件大小限制 10MB。」

它做完了,代码里确实写了 if (size > 10MB) reject指标达标了。

但是:

  • 用户传了个 9MB 的文件,页面卡死三分钟,没有任何提示 —— 达标了
  • 限制写在前端,用工具绕过去直接传 500MB —— 达标了
  • 超过 10MB 时报错信息是一串英文堆栈 —— 达标了

每一条都通过验收,每一条都没达到目的。

上面那个例子暴露了一个高频错法:把约束放在了不该负责的那一层。

约束 ❌ 放错地方 ✅ 该放哪
文件大小限制 前端检查 服务端接收时
「每天最多 10 条」 展示的时候筛 写入数据库时
「只能是中文」 提示词里说一句 入库函数里校验
「只有管理员能删」 前端不显示删除按钮 接口里检查权限

通用判据:约束要守在「产生数据的那一层」,不是「消费数据的那一层」。

放在消费侧的约束,绕过去只需要换个入口——而前端的每一个入口,用户都能绕。

弱标准会被绕过,强标准不会。区别在于:强标准能被一个具体动作证伪。

❌ 弱(禁用) ✅ 强(照这个写)
上传功能正常 传一个 11MB 的文件,返回明确的中文错误提示,服务器上没有产生文件
界面符合设计 在 375px 宽的屏幕上打开,没有横向滚动条,按钮不重叠
性能没问题 首页打开在 3 秒内出现内容(用浏览器 Network 面板的 Load 数字为准)
测试通过 贴出测试命令的原始输出,显示 N passed, 0 failed
安全没问题 用无痕窗口不登录访问 /admin被挡住

**判据很简单:这条标准能不能用一个动作验证?**不能,就重写。

**AI 说做完了,你自己打开点一遍。**听起来蠢,但它抓到的问题比任何工具都多。

重点点这三类:

  • 正常路径:按预期用一遍
  • 空的情况:什么都不填就提交、列表里一条数据都没有
  • 错的情况:填乱七八糟的东西、断网、点两下提交按钮

2. 让它写测试,然后你去读测试

Section titled “2. 让它写测试,然后你去读测试”

让 AI 写测试很容易,但要读一眼测试到底测了什么

常见的假测试:断言写成 expect(true).toBe(true)、把出错也当成通过、测了一个根本不会失败的东西。

让写代码的那一方审查自己写的代码,等于没审。

它看不见自己的盲区——同一套判断逻辑,写的时候觉得对,审的时候还是觉得对。

低成本做法:开一个新的对话(不带之前的上下文),把代码贴进去,问:

这段代码有什么问题?特别看:安全、边界情况、错误处理。默认它有问题,请找出来。

「默认它有问题」这句话很重要——不加这句,它倾向于告诉你「看起来不错」。

  • 说得出「达标」和「达到目的」的区别,并举一个例子
  • 判断一条约束该守在哪一层(产生数据侧 vs 消费数据侧)
  • 把一条弱验收标准改写成能被动作证伪的强标准
  • 看到「测试通过」时,会去要原始输出
  • 用一个新对话审查代码,而不是问写它的那个

看看真实事故库——那些都是别人已经踩过的坑。