LESSON 7.3 / PRODUCTION

调试、测试与发布检查

调试是用证据缩小原因范围,测试是把重要行为固定成可重复检查。先复现,再一次验证一个假设。

预计阅读约 25 到 40 分钟
完成结果为一个真实故障写复现记录、根因说明、最小修复和防回归测试。
本课目标
  • 为一个真实故障写复现记录、根因说明、最小修复和防回归测试。
  • 复现、缩小范围、假设和验证
  • 演练调试、测试与发布检查后,应当为一个真实故障写复现记录、根因说明、最小修复和防回归测试,并保留权限响应、测试报告、证书状态、告警和恢复记录作为可重复检查的依据。
开始之前
  • 完成 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
这是复现步骤、期望结果、实际结果、第一条错误和相关代码。请先列三个可证伪假设,每次只给一个检查动作。定位后提出最小修复,并建议一个能在修复前失败、修复后通过的测试。
应该得到什么

基于证据的假设树,每次实验只改变一个变量;找到原因后补一项自动测试;调试、测试与发布检查的人工验收必须回到真实页面、请求、终端、测试或数据结果,不能用 AI 的文字说明代替。

人工检查清单

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

COMMON TRAPS

常见误区

下面三类问题会让任务看似完成,却经不起刷新、错误输入或真实环境检查。先看现象,再找原因和修正方法。

误区 1

凭感觉同时改多处

你会看到
问题好了却不知道哪项有效
为什么发生
多个变量一起改变后,即使问题消失,也无法知道哪项修改起作用。
怎样纠正
一次只验证一个假设
误区 2

只测试正常路径

你会看到
空值、重复点击和网络失败仍会出错
为什么发生
真实输入会包含空值、重复操作和网络故障,成功用例覆盖不到这些分支。
怎样纠正
为重要边界补失败用例
误区 3

测试实现细节

你会看到
重构未改行为却大量失败
为什么发生
内部结构可以在行为不变时重构,绑定细节会制造没有用户影响的失败。
怎样纠正
围绕公开输入输出断言
04

HANDS-ON

动手任务

为一个真实故障写复现记录、根因说明、最小修复和防回归测试。

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

跟着做

  1. 01

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

  2. 02

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

  3. 03

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

  4. 04

    定位根因并做最小修复。

  5. 05

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

完成标志

为一个真实故障写复现记录、根因说明、最小修复和防回归测试。

加餐挑战

为创建任务、刷新后确认存在、删除任务这条流程建立端到端冒烟测试说明。

离开本课前,自问四件事

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

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