AI 严选AIAICN / API FIELD GUIDE
AI 工作流 / AI 编程协作

AI 写完代码后怎么检查?从改动范围到失败用例

代码能运行,不代表满足需求。用一个可本地运行的搜索函数,检查 AI 改动范围、边界行为、测试依据和恢复办法,不需要调用模型。

AI 严选 · 编辑整理(AI 辅助) · 写于 · 资料核对

本文目录
  1. 先把“做好了”换成可检查的行为
  2. 打开差异,看看它有没有顺手改别的
  3. 用五个输入拆穿“正常路径通过”
  4. 测试通过后,再看测试有没有问对问题
  5. 函数没问题,页面也可能没接好
  6. 只接收能说明白、能退回的这一批
直接回答

先看实际改了哪些文件,再用事先写好的输入与预期检查行为。AI 的“已完成”说明和绿色测试都不能代替需求核对;测试也可能漏掉关键情况。

适用前提

适合用 AI 修改小脚本或网页功能、能查看文件差异的读者。代码练习只需本地 JavaScript 运行环境;真实项目的权限、支付和数据处理逻辑仍需有经验的人审阅。

先把“做好了”换成可检查的行为

假设你让 AI 给一个名单加搜索:忽略英文大小写,忽略查询词首尾空格,清空搜索时显示全部,没有匹配时显示空结果。这几个条件最好在改代码之前写下。否则看到页面能输入、能筛选,很容易就结束检查。

这里的要求是一个刻意缩小的练习:名单是字符串数组,查询词也是字符串,不处理拼音、多语言排序或模糊匹配。真实需求若包含这些行为,应另外说明,而不是把一段简单示例直接当成完整搜索方案。

GitHub 对 Copilot Chat 的官方说明也提醒,生成的代码可能看起来有效,却没有正确表达开发者意图,因此仍需审阅和测试。本文不比较哪款工具更可靠,而是给你一套能亲自核对小改动的办法。

官方依据:来源 1

打开差异,看看它有没有顺手改别的

先看新增、修改和删除的文件清单,再看每个改动与需求有没有关系。给名单加搜索,通常需要解释过滤逻辑、输入控件和对应测试的变化;若同时出现登录校验删除、新增第三方请求或整套依赖升级,就暂停接收这些改动,要求逐项说明。不是说其他文件一定不能改,而是每一处都需要有理由。

使用 Git 时,git diff 查看尚未暂存的修改;已经暂存的内容要看 git diff --cached。已经提交的修改则应对照改动前后两个明确的提交查看,不能因为工作区没有差异就判断什么也没变。新建但未跟踪的文件还要从编辑器或文件清单单独检查;不要只盯着一个空的差异窗口。

让 AI 解释“为什么改”有帮助,但解释不能替代文件内容。尤其检查它有没有通过删除断言、吞掉异常或返回固定成功值,让问题看起来消失。

官方依据:来源 2

用五个输入拆穿“正常路径通过”

下面的候选实现可以运行,输入小写 a 时也能找到两条记录。但它没有按需求处理大写词和空格。候选实现和修正实现都是本站编写的教学代码,不是某个 AI 产品的真实回答。

保存为 review-demo.mjs,运行 node review-demo.mjs。预期先打印候选实现失败 3 个用例,再打印修正实现失败 0 个用例;不需要安装依赖。这里只验证这五个字符串输入,不检验界面、网络或其他语言的大小写规则。

输入按需求应得到什么为什么要测
aAlpha、Beta保留正常匹配行为
ALPHAAlpha确认忽略大小写
首尾带空格的 alphaAlpha确认查询词会去掉首尾空格
三个空格Alpha、Beta空查询应恢复全部名单
zz空数组无结果不伪造记录
JavaScript · 本地合成示例,不联网、不消耗 API 额度
// 原创教学样例;不联网、不读取文件、不调用模型。
const rows = ['Alpha', 'Beta'];
const candidate = q => rows.filter(name => name.includes(q));
const corrected = q => {
  const term = q.trim().toLowerCase();
  return rows.filter(name => name.toLowerCase().includes(term));
};
// 预期来自需求,而不是照抄函数当前的输出。
const cases = [
  ['a', ['Alpha', 'Beta']],
  ['ALPHA', ['Alpha']],
  [' alpha ', ['Alpha']],
  ['   ', ['Alpha', 'Beta']],
  ['zz', []]
];
function failures(fn) {
  return cases.filter(([input, expected]) =>
    JSON.stringify(fn(input)) !== JSON.stringify(expected)).length;
}
const before = failures(candidate);
const after = failures(corrected);
if (before !== 3 || after !== 0) throw new Error('教学结果不符合预期');
console.log('候选实现失败用例:', before);
console.log('修正实现失败用例:', after);

测试通过后,再看测试有没有问对问题

如果测试只检查“函数返回了数组”,上面的候选实现也能通过。测试的预期要来自需求:空查询应该展示全部,就检查全部结果;无匹配应该为空,就检查确实为空。不要让 AI 把函数当前输出抄成预期,再用它证明自己的改动正确。

也可以要求它这样复查:“按最初四条需求,指出当前测试没有覆盖的输入。先给出输入和预期理由,不要修改实现或删除已有测试;如果认为需求矛盾,先说明矛盾。”你仍需要核对这些预期,而不是把第二次 AI 回答当成独立审计。

这段练习故意放了一个不合要求的候选函数,让你看到测试确实能报出差异。实际项目若要验证测试是否有效,应在独立副本里做小范围实验,不能为试验破坏正在使用的代码。

AI代码检查顺序:先写清需求和预期输入输出,再审查实际文件差异;改动超出范围先暂停。随后运行能发现错误的用例,失败就定位修正;通过后检查真实界面并保留恢复版本,测试通过不等于全面安全。
原创审阅流程,配合文中五个输入使用。范围不清先缩小改动,行为不符先修实现,不删掉失败用例。

函数没问题,页面也可能没接好

如果改的是网页,还要在实际页面输入大写词、带空格的词,再清空输入。确认结果数、无结果提示和恢复后的列表一致;用键盘能否操作、手机有没有被长内容撑宽,也需要另外检查。函数测试不会证明输入事件已经绑定,更不会替你检查视觉布局。

涉及网络或存储时,先用合成数据验证失败分支:请求失败会不会继续显示旧成功状态,重复点击会不会产生重复写入。没有获准使用真实账户或付费接口,就把未验证部分写明,不为凑一次“全流程成功”而扩大权限。

若新增依赖或安装脚本,先检查来源与用途;看不懂的删除、迁移或上传命令不要直接执行。发现代码把服务商密钥放进前端时,应回到服务端设计,而不是继续调试一个已经暴露凭据的页面。

只接收能说明白、能退回的这一批

留下改动前可工作的版本、这次实际修改的文件,以及执行了哪些检查。修复搜索时,不必同时接受一整套重构。发现无关改动,可以要求 AI 缩小补丁,再重新检查保留下来的差异。

需要恢复时,先保存自己的未提交工作,分清哪些是这次改动、哪些是其他人的内容,再用项目既有的版本恢复流程处理。不要为了退回一个函数而覆盖整个目录;已经上线并写入的数据,也不会因为代码回退就自动恢复。

最终记录可以很短:“修改搜索的空格和大小写处理;五个本地用例通过;页面操作已检查/尚未检查;没有验证其他语言或大数据量。”这比一句“AI 说测试全过了”更方便接手的人判断还能在哪些范围内使用。

来源与适用边界

2026-10-26 核对 GitHub Copilot Chat 与 Git 官方文档。搜索函数、需求与用例均为本站原创教学样例,不是模型实际输出。本站仅执行了本地样例及网站测试,没有测量 AI 编程工具的正确率、调用付费模型或审计读者项目。

  1. https://docs.github.com/en/copilot/responsible-use/chat
  2. https://git-scm.com/docs/git-diff