Week 3 学习计划|异常、测试与 Debugging
Week 3 学习计划:从 Exception / traceback / raise / try-except-finally 出发,独立编写 boundary / invalid input / exception test,配合 fixture 与 mock,并主动制造 off-by-one / None / type / state 四类 bug 完成定位、解释、修复与回归测试。
本周计划对应一年学习计划总纲 Phase I 的 Week 3 · 异常、测试与 Debugging,按总纲 Part II「每周固定执行模板」编排。本篇只是规划,不含执行结果;实际产出完成后另写 Week 3 学习成果。
🎯 本周目标
L1
- 能读懂 traceback,讲清 Exception / traceback / raise / try-except-finally 的语义。
L2
- 不看参考独立编写 boundary test、invalid input test、exception test,并接上 fixture 与 mock。
L3
- (总纲本周等级为 L2,不设 L3)
📚 Core Knowledge
总纲 Week 3 学习内容:
Exception / traceback / raise / try-except-finally / unit test / fixture / mock / regression。
- 异常:
try/except/else/finally、raise、异常层级、traceback 的阅读方式 - 单元测试:pytest 基本用法、
assert、测试函数命名与发现规则 - fixture:准备测试环境(临时文件、临时数据库、构造好的对象)
- mock:替换不想真跑的东西(网络请求、时间、随机数、文件 IO)
- regression:每修好一个 bug 就补一条测试,再跑全量确认没有破坏别处
✍️ Human Core
总纲 Week 3 要求独立写(不看参考):
- boundary test(边界值)
- invalid input test(非法输入)
- exception test(异常路径)
三类测试的要求:
| 类型 | 说明 | 例子 |
|---|---|---|
| boundary test | 边界值 | 0、-1、len、len+1、空列表、单元素 |
| invalid input test | 非法输入 | None、错误类型、空字符串、超长输入 |
| exception test | 异常路径 | 该抛的异常抛了吗?抛的类型对吗?消息对吗? |
要求:不看参考,自己写。
🤖 AI Build
总纲 Week 3 分工:AI 负责扩充测试、review 测试、人为制造 bug;你负责定位、解释、修复。
| AI 做 | 你做 |
|---|---|
| 扩充测试用例 | 判断 AI 的测试有没有漏、有没有错 |
| review 你的测试 | 接受或反驳 AI 的意见 |
| 人为制造 bug | 定位、解释、修复 |
🧪 Experiment
总纲 Week 3 要求:主动制造四类 bug。
| Bug 类型 | 典型场景 |
|---|---|
| off-by-one | 循环多跑/少跑一次,索引差一 |
| None bug | None 没判空就调用方法 |
| type bug | int 当 str 用,list 当 dict 用 |
| state bug | 共享可变状态、修改后没同步 |
每个修好后,补一个回归测试。
Hypothesis
- 主动制造并修复典型 bug,能训练从 traceback 到根因的定位能力,也能暴露测试覆盖的盲区。
Experiment
- 先写测试,再让 AI 或自己引入四类 bug,观察测试是否捕获;对未捕获的补测试,对捕获的走 Debug 四步法。
Result
- 待执行后填入。
Conclusion
- 待执行后填入。
📝 数智工程师考试映射
- 异常处理与错误传播
- 单元测试、测试隔离与回归测试
- 调试方法与根因定位
✅ Acceptance
总纲 Week 3 验收:看到 traceback 后能够完成「定位 → 解释 → 提出原因 → 修复」。
L1
- 能读懂 traceback,定位到出错文件与行号
L2
- 能独立编写 boundary / invalid input / exception test
- 能按要求完成 Debug 四步法
L3
- 总纲本周不设 L3
🧠 本周最重要的问题
看到 traceback 后,能不能不靠猜,走完「定位 → 解释 → 原因 → 修复」四步?
❓ 尚未解决
- 待执行后填入
📊 Final Level
L2
周内节奏(3–4 天)
| 天 | 内容 | 状态 |
|---|---|---|
| Day 1 | 异常 + traceback 复习 + 读 traceback 训练 | 待开始 |
| Day 2 | Human Core:自己写 boundary / invalid / exception test | 待开始 |
| Day 3 | fixture + mock,绑定真实场景 | 待开始 |
| Day 4 | 主动制造 4 类 bug,定位 → 解释 → 原因 → 修复 → 补回归测试 | 待开始 |
| Day 5(可选) | AI 扩充测试 + review,你判断 AI 的测试质量 | 待开始 |
Debug 四步法
1. 定位:哪一行?哪个文件?
2. 解释:这行在干什么?为什么出错?
3. 原因:根本原因是什么?
4. 修复:改什么?怎么验证改对了?
Fixture 与 Mock
| 概念 | 目的 | 场景 |
|---|---|---|
| fixture | 准备测试环境 | 临时文件、临时数据库、构造好的对象 |
| mock | 替换不想真跑的东西 | 网络请求、时间、随机数、文件 IO |
测试覆盖标准
| 维度 | 做法 |
|---|---|
| 边界值 | 0、-1、len、len+1、空、单元素 |
| 等价类 | 合法输入取代表,非法输入按类型分组 |
| 分支覆盖 | 每个 if/else 至少各走一次 |
回归测试
每修好一个 bug,补一个测试:
def test_parse_int_rejects_none():
assert parse_int(None) is None
跑完整测试,确认没破坏别的。
来源与延伸阅读
- 01Week 1 学习计划|Python 对象模型与数据结构
- 02一年学习计划:从 Python 到 Data/AI 系统的 52 周
- 03Week 1 学习成果|复杂度实测、对象模型与数据结构实战
- 04Week 2 学习计划|Python 函数、作用域、闭包与模块化
- 05Week 2 学习成果|闭包、decorator 与工程化重构
- 06Week 3 学习计划|异常、测试与 Debugging
- 07Week 3 学习成果|异常、traceback 与 Debug 起步
- 08Week 4 学习成果|Big-O 与四类基础算法
- 09Week 5 学习成果|Stack、Queue 与 MinHeap
- 10Week 6 学习成果|图算法与 Python Engineering Toolkit