LESSON 7.3 / PRODUCTION

调试、测试与发布检查

调试从复现和证据开始;测试把重要行为变成可以重复验证的约定。

预计阅读15–20 分钟
完成结果能用证据说明问题为什么发生、修复为什么有效。
本课目标
  • 能用证据说明问题为什么发生、修复为什么有效。
  • 复现、缩小范围、假设和验证
  • 选一个真实 Bug,记录复现证据、根因、最小修复和回归测试。
开始之前
  • 完成 7.2「Web 安全与秘密管理」
01

FOUNDATION

必须理解

调试从复现和证据开始;测试把重要行为变成可以重复验证的约定。

调试是用证据缩小问题范围,测试是把已知行为变成可重复检查。AI 可以提出假设和生成测试,但真实输出、失败复现与验收责任仍在人。

先建立整体直觉

医生不会只听“我不舒服”就开药,而会询问症状、测量指标、排除假设。测试像固定体检项目,调试像针对异常进一步检查。

贯穿本课的实际场景

新增任务失败时,先复现并检查表单状态、Network 请求、服务端日志和数据库记录;修复后添加校验测试,防止相同问题回来。

概念 1

复现、缩小范围、假设和验证

先用白话理解

最小复现就是把无关东西都拿掉,只留下稳定触发错误的步骤、输入和环境。错误原文、堆栈、请求和日志比“还是不行”有用得多。

基础概念

调试是用证据从大量可能原因中逐步缩小范围。稳定复现描述触发条件,假设提出可被推翻的原因,实验每次只改变一个关键变量。

进一步理解

先写预期、实际、步骤、输入、环境和错误原文,再找到最小仍能触发问题的案例。最早的异常通常比最后的连锁报错更接近根因。

假设必须附带预测:如果原因是 X,检查 Y 应出现 Z。结果不符就放弃假设,而不是继续堆补丁。

放进实际场景

新增任务失败时固定同一标题,查看表单事件、Network、服务端日志与数据库记录,确定请求究竟在哪一步停止。

容易混淆的地方

看到报错位置不等于找到根因;错误可能在更早的数据输入产生,只在这里第一次被使用。

这一小节记住:先复现和收证据,再用单变量实验排除假设。

概念 2

单元、集成、端到端测试的不同价值

先用白话理解

单元测试盯一个小函数,集成测试看几个部分能不能配合,端到端测试则像真实用户一样走完整流程。它们覆盖不同,也有不同成本。

基础概念

单元测试检查小函数,集成测试检查多个部分协作,端到端测试从用户入口走完整系统。它们覆盖范围、速度和定位能力不同。

进一步理解

单元测试快且容易指出规则错误;集成测试能发现数据库、接口或组件连接问题;端到端测试最接近真实行为,但运行慢且受环境影响。

测试组合应按风险选择,不是端到端越多越好。核心规则用单元测试,关键边界用集成测试,少数主流程用端到端测试。

放进实际场景

标题长度规则用单元测试,创建接口与测试数据库用集成测试,用户登录后新增任务用端到端测试。

容易混淆的地方

测试层级描述检查边界,不等于文件夹名称。若所谓单元测试连接真实网络,它实际承担了更大的集成范围。

这一小节记住:让不同层级测试各自守住最适合的风险。

概念 3

正常路径、边界、失败和回归

先用白话理解

一个问题修好后,加回归测试能防止它悄悄回来。发布前还要检查构建、类型、依赖、环境变量、迁移,并在真实环境做一遍冒烟测试。

基础概念

正常路径验证理想输入,边界测试临界值,失败测试验证可恢复错误,回归测试把曾发生的问题固定成以后重复执行的检查。

进一步理解

修复前先让测试稳定失败,证明它确实捕获问题;修复后通过,证明行为改变;旧测试同时通过,降低副作用风险。

发布检查还包括构建、类型、配置、迁移、依赖和真实环境冒烟测试。测试通过不能替代对生产配置与数据的验证。

放进实际场景

80 字符标题成功、81 字符返回字段错误;修复 Unicode 计数 Bug 后保留该输入作为回归用例。

容易混淆的地方

回归测试不是复制所有手工步骤,而是保存能够准确触发旧错误的最小行为,并让它在以后每次相关变更中自动重跑。

这一小节记住:每个真实 Bug 都应留下能阻止它悄悄回来的验证。

02

AI COLLABORATION

AI 如何参与

让 AI 先写失败用例或复现步骤,再改代码;修复后保留回归测试。

推荐协作顺序

  1. 1

    先把稳定复现步骤和四层证据发给 AI。

  2. 2

    要求它只列三个可证伪假设,每个配一个区分实验。

  3. 3

    找到根因后再让它补回归测试,不允许直接大改组件。

可直接使用的 Prompt
任务应用点击“添加”后偶尔出现两条相同任务。请作为调试搭档,先向我要复现步骤、浏览器 Network、按钮状态、服务端日志和数据库记录;然后列最多 3 个按概率排序的假设,每个假设给一个能区分它的最小实验。不要直接重写组件。
应该得到什么

基于证据的假设树,每次实验只改变一个变量;找到原因后补一项自动测试。

人工检查清单

  • 确认 AI 区分症状与根因,测试真的会在旧代码失败、修复后通过。
  • 要求 AI 的根因结论引用复现步骤、日志或失败测试,并明确哪些仍是假设。
  • 修复前确认用例失败,修复后重跑相关测试与完整发布检查,保存回归证据。
03

COMMON TRAPS

常见误区

错误不是需要隐藏的失败,而是帮助你看清系统边界的证据。下面三类问题在 AI 辅助学习中最常出现。

误区 1

看到红字就改第一行

你会看到
没有读完整堆栈,修了表面报错又出现新问题。
为什么发生
同时修改多个位置会破坏实验控制,即使问题消失也无法知道真正原因,副作用更难发现。
怎样纠正
先找到第一处属于自己代码的调用,再结合输入和时间线判断。
误区 2

边改边换复现条件

你会看到
每次测试的数据和步骤都不同,无法知道修改是否有效。
为什么发生
只测试刚走通的理想流程,会漏掉空值、边界、网络和权限这些真实用户更常触发的路径。
怎样纠正
固定最小复现和预期,一次实验只改变一个变量。
误区 3

测试只证明现在能过

你会看到
新测试在修复前也会通过,根本没有保护这个错误。
为什么发生
AI 容易根据常见模式给出高概率猜测;没有真实输出支持时,流畅解释仍可能完全错误。
怎样纠正
确认测试在旧问题上失败、修复后通过,并覆盖相邻边界。
04

HANDS-ON

动手任务

选一个真实 Bug,记录复现证据、根因、最小修复和回归测试。

准备条件
  • 完成 7.2「Web 安全与秘密管理」

跟着做

  1. 01

    选择一个可重复的小故障并写复现步骤。

  2. 02

    收集页面、Network、服务端和数据库四层证据。

  3. 03

    列出三个可证伪假设并安排最小实验。

  4. 04

    定位根因并做最小修复。

  5. 05

    添加回归测试,确认修复前失败、修复后通过。

完成标志

能用证据说明问题为什么发生、修复为什么有效。

加餐挑战

为“创建任务—刷新—仍然存在—删除”建立一条端到端冒烟测试说明。

离开本课前,自问四件事

  • 稳定复现、假设和验证实验分别应该包含什么?
  • 单元、集成与端到端测试各适合保护哪类行为?
  • 一个 Bug 修复为何应先看到测试失败再看到它通过?
  • 构建与测试成功后,上线前还需要检查哪些真实环境条件?
完成本课了吗?

确认完成后,会同步更新学习中心的课程学习进度。