和 AI 正确「说话」—— 测试篇1

38 阅读10分钟

把测试用例写成它一定会执行的自检流程

在这次迭代里,我踩了一个很典型的坑:
我以为自己已经在测试用例文件开头写清楚了「修完要自己过一遍所有 case」,但 AI 实际上并没有严格执行这一条。直到某个 bug 被我自己手动点到,才发现——原来我和 AI 对“这句话”的理解是不一样的

这篇文章就专门拆开聊这一点:
为什么 AI 会“忽略”看起来很合理的用例说明?
我们应该怎么写测试用例 / 规则,才能让 AI 几乎不可能跳过自检?


一、问题的起点:一句「修完重新过一遍 case」为什么不生效?

我在 __tests__/test_main.txt 顶部写了类似这样一句话:

验证如下 case,如有错误,修复它。修复后重新过一遍 case,确保功能无异常。

从人的视角看,这很自然:

  • 明确表达了「要整体过一遍用例」;
  • 也强调了「修完要再重新检查」。

但实际执行中,AI 的行为是这样的:

  • 当我指出「某个功能不对」时,它会优先去看那一块的代码,分析、修改;
  • 修改完,会检查刚刚这个点是否 OK;
  • 但不会自动回到整个 __tests__/test_main.txt,从头把所有 case 再跑一遍。

于是就出现了一个现象:

  • 局部 bug 修了;
  • 别的用例对应的逻辑,可能因为这次修改被影响,但 AI 并没有意识到要「重新回归」。

这不是 AI「偷懒」,而是我们给的信息在它的优先级体系里,只被当成“背景描述”,而不是“需要立刻执行的具体流程”。


二、AI 的视角:什么样的文字会被当成「必须执行的动作」?

大致可以这么理解:

  • 背景描述
    • “修完后要重新过一遍 case”;
    • “保持数据一致性很重要”;
    • “请注意 xx 场景也要考虑”;
    • 这些更像「价值观」与「注意事项」,AI 会参考,但不会每次都主动展开成一个 checklist。
  • 明确指令 / 流程
    • “现在按 1~3 步执行:1)打开文件;2)逐条检查;3)不通过就修改”;
    • “只要看到 @tests/test_main.txt 就进入自检模式”;
    • “修改任意一处代码,都必须从 1.1 重新检查所有用例”;
    • 这种就会被当作操作规程,在具体决策里优先执行。

人类工程师在脑子里有「隐含上下文」:
我们看到一句「修完重新过一遍 case」,会自动补全为一个完整的操作流程;
但 AI 不会隐式扩展这么多,它只会在需要时、按任务驱动地「用到哪条信息就读哪条信息」。

所以,如果希望它「必定执行自检」,就要把我们的期望写成显式、机械的流程规则


三、把期望写成流程指令:一个更“机器友好”的版本

假设我们要在 __tests__/test_main.txt 顶部写一段「总则」,原来的写法是:

验证如下 case,如有错误,修复它。修复后重新过一遍 case,确保功能无异常。

更适合 AI 的写法,可以改成类似这样:

【自检总则(必须执行)】
- 对下方每一条用例(含所有大标题与子场景),AI 必须遵守以下流程:
  1)先逐条阅读当前项目实现代码,自行判断是否满足该用例;
  2)如果发现实现与用例不一致,必须先修改相关代码,再回到该用例重新自检;
  3)只要在检查任意用例时修改过代码,修改完成后必须从 1.1 开始,按顺序再次检查所有用例;
  4)不得仅检查用户当前提到的单个用例,而忽略本文件中其他已列出的用例。

这里有几个关键点:

  • “必须执行”
    明确强调这是硬性规则,而不是建议。
  • 流程拆成 1)2)3)
    便于 AI 在内部构造 checklist,并逐步完成。
  • 触发条件 & 重复执行条件写清楚
    「只要修改过任意用例相关代码,就要从 1.1 重新检查」——这是一个非常强的回归约束。

这样的写法,AI 在看到时更容易把它当成「要遵守的流程」,而不是轻量的背景信息。


四、用「触发规则」把自检变成一个模式

除了总则之外,还可以再加一段「触发规则」,告诉 AI 什么时候要开启这个自检模式。

例如,在文件末尾写:

【执行触发规则】
- 当用户在对话中出现以下任意行为时,AI 必须立即进入“用例自检模式”:
  1)在消息中提到本文件路径或别名(例如:@__tests__/test_main.txt);
  2)在消息中显式要求“按照用例自检”、“对照测试用例检查”等类似表述。
- 进入“用例自检模式”后,AI 的执行顺序必须为:
  1)从 1.1 开始,按顺序逐条阅读并检查所有用例;
  2)对每一条用例,先判断现有实现是否满足;如不满足,先修改代码,再回到该用例复核;
  3)任一用例修改过代码后,自当前用例结束起,重新从 1.1 依次复查全部用例;
  4)在结束本轮会话前,总结哪些用例被触发了代码修改,以及最终是否全部通过。

这样,当我在对话里只打一句:

@__tests__/test_main.txt

AI 就会「意识到」:
哦,现在不是随便看看这个文件,而是需要开启一整套自检流程。


五、在每条用例前加上「执行要求」标签

对于关键用例(比如跨页面统计一致性、数据恢复、删除最后一题后的返回路径等),可以在用例标题下加一条「执行要求」,进一步强调它的重要性。

示例(以 1.2 顺序练习恢复题号为例):

1.2【顺序练习恢复题号】

【执行要求】
- AI 在修改与“顺序练习页”、“题目列表加载”、“题号索引恢复”相关的任何代码后,必须重新完整执行本用例,确认行为与期望一致。
- 如修改会影响公共题库与地区题库两类场景,必须分别验证两类场景的行为。

这样做有几个好处:

  • 你自己在人工回归时,一眼就能看出哪些是「高优先级用例」;
  • AI 在阅读用例时,会明确知道「哪些代码改动需要重新验证这条用例」。

六、一个完整的「AI 友好测试用例文件」骨架示例

下面给出一个简化版骨架,你可以按自己项目实际内容替换标题和场景描述。

【自检总则(必须执行)】
- 对下方每一条用例(含所有大标题与子场景),AI 必须遵守以下流程:
  1)先逐条阅读当前项目实现代码,自行判断是否满足该用例;
  2)如果发现实现与用例不一致,必须先修改相关代码,再回到该用例重新自检;
  3)只要在检查任意用例时修改过代码,修改完成后必须从 1.1 开始,按顺序再次检查所有用例;
  4)不得仅检查用户当前提到的单个用例,而忽略本文件中其他已列出的用例。

--------------------------------
1.1【错题集 / 收藏集移除最后一题后的返回路径】

【执行要求】
- AI 在修改与“错题集”、“收藏集”、“页面返回逻辑”相关的任何代码后,必须重新完整执行本用例的所有子场景(A/B/C/D)。

场景A:地区题库-错题集
步骤:
  1)在地区页选择一个城市,进入该城市的「错题」练习模式;
  2)确保该错题集只有 1 道题目;
  3)答对该题目,并选择「移出错题集」。
期望:
  - 题目成功移出错题集;
  - 页面自动返回到「地区页」的 Tab。

场景B:……(略)

--------------------------------
1.2【顺序练习恢复题号】

【执行要求】
- AI 在修改与“顺序练习页”、“题目异步加载”、“题号索引存储与恢复”相关的任何代码后,必须重新完整执行本用例的所有子场景(A/B),并确认行为与期望完全一致。

场景A:公共题库
……

场景B:地区题库(大题库,题目异步加载)
……

--------------------------------
1.3【首页 / 地区页统计与子页面实际数据一致性】

【执行要求】
- 只要统计相关代码、存储结构或计算逻辑有改动,AI 必须重新执行本用例。
- 包含以下统计项:已答题数 / 错题数 / 收藏数 / 考试记录次数 / 智能复习待复习题目数。

场景A:公共题库
……

场景B:地区题库
……

--------------------------------
【执行触发规则】
- 当用户在对话中出现以下任意行为时,AI 必须立即进入“用例自检模式”:
  1)在消息中提到本文件路径或别名(例如:@__tests__/test_main.txt);
  2)在消息中显式要求“按照用例自检”、“对照测试用例检查”等类似表述。
- 进入“用例自检模式”后,AI 的执行顺序必须为:
  1)从 1.1 开始,按顺序逐条阅读并检查所有用例;
  2)对每一条用例,先判断现有实现是否满足;如不满足,先修改代码,再回到该用例复核;
  3)任一用例修改过代码后,自当前用例结束起,重新从 1.1 依次复查全部用例;
  4)在结束本轮会话前,总结哪些用例被触发了代码修改,以及最终是否全部通过。

你可以把上面这个骨架,直接套用到自己的项目,用来规范:

  • 自己的人肉回归操作;
  • 以及 AI 的自检行为。

七、实际使用建议:日常迭代中怎么配合这套规则?

结合我这次迭代的实际踩坑经验,总结几个小建议:

  • 在每次大改前,先快速过一眼用例文件
    看看有哪些「强约束用例」会被波及,比如跨页面统计、一致性校验、异步加载场景等。

  • 在和 AI 对话时,主动引用用例文件路径
    比如:

    本次改动会影响顺序练习、错题集和智能复习,请你严格按 @__tests__/test_main.txt 里的自检总则和所有用例做一遍自检。
    
  • 当你发现一个没被检测出来的 bug 时,立刻把它写进用例文件
    并按上文的方式加上明确的「执行要求」,防止下次再踩同一个坑。

  • 把「自检总则」当作团队协作契约
    不只是给 AI 用,人类同事也可以直接按照这份用例文件做回归,这样大家的检查口径才是一致的。


八、总结:让 AI 变成靠谱同事,而不是聪明实习生

这次经历给我的直观感受是:

  • 如果只给 AI「目标」和「背景期望」:
    它会像一个很聪明、很主动的实习生,能帮你解决眼前的大多数问题,但对「隐含规矩」不够敏感。
  • 如果再给它「明确的流程规则和触发条件」:
    它就会更像一个靠谱的工程同事,不仅能修当前的 bug,还能主动做回归、自检和总结。

所以,当你下次在项目里写测试用例或者协作说明时,可以尝试:

  • 少一点「模糊的期望」(比如“修完要过一遍 case”);
  • 多一点「具体的流程和约束」(比如“修改任一用例相关代码后,必须从 1.1 重新检查所有用例”)。

你会发现,同样一句话,对人类和对 AI 的说法,其实应该是不一样的。
把这层差异考虑进去,AI 才能真正成为你开发流程中可靠的一环,而不是一个时不时“漏检”的助手。