中四 ICT|程式除错与版本控制(三类错误/二分法追 bug/commit 与回退)备课指引(导师用)|45 分钟流程、讲解脚本、常见错误
- 2026-11-15
学生一见到程式出错就由第一行开始加 print,被问要试几多次就答不出。这一堂把除错变成三类错误加二分法,顺便讲清楚版本控制为何是保命符。
本堂目标 本堂完结时学生能够:(1)讲出语法、执行时、逻辑三类错误分别在几时被发现、由边个工具报、点样才捉得到;(2)用二分法在 600 行找一个 bug,并用 2 的次方证明最多 10 次就锁定(512 不够、1024 够);(3)由 120 个单元测试通过 114 个算出 95%,讲出改完程式一定要重跑全部测试;(4)讲出 commit、分支、合并冲突、回退的分工,并由 diff 加 40 行减 15 行算出净加 25 行。
01 先备知识(开课前 3 分钟快检)
以下任何一项未过关,本堂就会卡住,先补该项:
| 技能 | 快检题 | 过关标准 |
|---|---|---|
| 2 的次方 | 2 的几次方会超过 600 | 答 10 次(1024) |
| 百分比 | 120 个测试通过 114 个,通过率几多 | 答 95% |
| 加减 | diff 加 40 行、减 15 行,净变化几多 | 答 净加 25 行 |
| 除法 | 12 个 commit,一日 3 个,要几多日 | 答 4 日 |
02 课堂流程(45 分钟)
| 时间 | 环节 | 导师做什么 | 学生做什么 |
|---|---|---|---|
| 0–6 分钟 | 起点快检 | 问 2 的次方过 600、114 除 120、40 同 15 的净变化、12 除 3,答案写白板右边 | 口头答,算式写在纸上 |
| 6–16 分钟 | 第一幕:三类错误,三种追法 | 白板三栏写语法/执行时/逻辑,每栏写“几时发现”同“边个报” | 学生讲出逻辑错误跑得完但答案错 |
| 16–26 分钟 | 第二幕:二分法,600 行 10 次 | 示范在中间加一个 print 或中断点,每次把怀疑范围减半;写出 512 不够、1024 够 | 学生算出 10 次 |
| 26–36 分钟 | 第三幕:测试与版本控制 | 120 个测试通过 114 个即 95%;commit 一日 3 个、12 个要 4 日;diff 净加 25 行 | 学生讲出回退要拣边个 commit |
| 36–42 分钟 | 题型示范与换数字练习 | 换成 900 行、150 个测试通过 138 个,示范四种问法 | 学生跟做一题并写出单位(次、%、行) |
| 42–45 分钟 | 离场检查 | 三题口头,错的记下是哪一幕 | 三题全对 |
03 讲解脚本(照着说就可以)
第一幕:第一幕:三类错误,发现的时机完全不同
“错误分三类,追法不同。第一类语法错误:漏括号、少冒号、变数名打错,直译器或编译器即刻报,程式连跑都跑不起,错误讯息连行号都畀埋你。第二类执行时错误:程式跑到一半死,例如除以零、索引超出范围、开一个不存在的档,错误只在跑的过程中出现,没有对应输入就永远见不到。第三类逻辑错误:程式跑得完、没有任何错误讯息,但答案错,例如把平均写成总和除 n 减 1,这一类只有一个捉法,就是拿预期输出同实际输出对比。所以学生讲“没有报错”,只等于“没有语法错误”,不等于程式正确。”
“一个程式跑得完但计错数,属于边一类错误?你会用什么方法证明他错?”
第二幕:第二幕:二分法把 600 行变成 10 次
“逻辑错误要在 600 行里面找,逐行 print 是最慢的方法:600 行就要试 600 次。二分法每次把怀疑范围减半:先在第 300 行 print 出关键变数,如果数值已经错,问题就在 1 至 300 行,否则在 301 至 600;第二次再切一半,如此类推。要几多次?2 的 9 次方是 512,细过 600,不够;2 的 10 次方是 1024,够,所以最多 10 次就锁定到单一行。中断点同逐步执行是同一件事的工具版本:停在某行、看住变数、一行一行行过去,不需要改程式码,所以不会好似 print 这么留下一堆要清理的语句,但在考场写纸上答题,讲的仍然是二分法这个思路。”
“900 行要几多次二分才锁定?为什么不是在中间 print 一次就够?”
第三幕:第三幕:回归测试同版本控制是同一件事的两面
“除错完要证明没有整坏其他部分,这叫回归测试。120 个单元测试通过 114 个,通过率是 114 除 120,得 0.95 即 95%,剩 6 个要修;每次改完都重跑全部,因为改一行可能弄坏十行。版本控制就是这个“重跑”同“回退”的基建:commit 是一个有意义的存档点,一日做 3 个,12 个改动就要 4 日;分支让你在不影响主线的情况下试新功能,合并时两边改同一行就会有冲突,要人手拣边个版本;回退是把工作档拉回之前某个 commit 的状态,前提是每个 commit 够细,否则一退就连好的改动一齐消失。diff 就是两个版本之间的差异:加 40 行、减 15 行,净变化是加 25 行,不是 40 加 15。”
“如果一个 commit 同时改了五样东西,发现其中一样有 bug,回退会有什么代价?”
04 必教题型与步骤
| 题型 | 例子 | 步骤 | 答案 |
|---|---|---|---|
| 判断错误类型 | 程式跑得完但答案错 | 三问:有没有错误讯息、几时出现、答案对不对 | 逻辑错误:跑得完、没有讯息、答案错 |
| 设计除错步骤 | 600 行,只知输入同预期输出 | 先比对预期与实际差几多,再用二分法切范围,最后用 2 的次方算次数 | 最多 10 次(1024 大过 600,512 不够) |
| 算测试通过率 | 120 个单元测试通过 114 个 | 通过数除总数,再乘 100 得百分比;剩余用减法 | 95%,剩 6 个未通过 |
| 讲版本控制操作 | 12 个 commit、一日 3 个、要回退两个版本 | commit 数除每日数得日数;回退要讲明回到边个 commit | 4 日;回退等于把工作档拉到指定 commit 的状态 |
合理性检查(一定要教):四个复核:(1)语法错误一定有错误讯息同行号,没有讯息的错一定不是语法错;(2)二分次数要用 2 的次方验:512 细过 600 所以 9 次不够,1024 够所以 10 次;(3)通过率一定细过或等于 100%,114 除 120 是 0.95;(4)diff 的净变化是加减之后的数,40 加 15 是 55,但净变化是 25。
05 独立练习三题
| 题目 | 答案 | 想观察什么 |
|---|---|---|
| 120 个单元测试通过 114 个,通过率几多? | 95% | 看学生有没有用 6 做分子 |
| 600 行用二分法找一个 bug,最多几多次? | 10 次 | 要用 2 的次方验:512 不够、1024 够 |
| diff 显示加 40 行、减 15 行,净变化几多? | 净加 25 行 | 不是把 40 同 15 相加 |
06 学生常见错误与纠正句
| 错误 | 学生通常这样写 | 导师这样说 |
|---|---|---|
| 把逻辑错误当成语法错误 | 答“没有红色错误讯息,所以程式没有错,系输入错” | 语法错误程式连跑都跑不起;逻辑错误跑得完但答案错,只有对比预期输出才捉到。混淆两者,学生就会停在“编译得过就交”这一关。 |
| 用逐行 print 代替二分法 | 由第一行开始每行加一个 print,600 行试 600 次 | 二分法每次把范围减半,600 行最多 10 次;逐行要 600 次,考场根本不够时间。 |
| 改完 bug 不重跑测试 | 修好一个功能就当完成,没有再跑单元测试 | 回归测试的作用是确认改一行没有整坏第二度。不重跑就等于把新 bug 直接交出去,而且通常更难追。 |
| commit 一次过塞入全部改动 | 把三个不相关的修改放进同一个 commit | commit 要小而单一目的,出事才回退得准。一个 commit 包含十个改动,回退就等于连好的改动一齐杀。 |
07 家课建议(直接指到练习卷题号)
- 中学 ICT 备课指引:程式除错与版本控制章节(题型示范与章末练习) 章末练习第 1 至 4 题
08 离场检查(最后 5 分钟)
| 题目 | 答案 | 判定 |
|---|---|---|
| 程式跑得完但答案错,属于边类错误? | 逻辑错误,要用预期输出对比 | 错:重教第一幕,三类错误的发现时机 |
| 600 行二分法最多几多次锁定? | 10 次(2 的 10 次方 1024) | 错:重教第二幕,用 2 的次方验 |
| 一个 commit 改五样东西,出事回退有什么问题? | 会连其他好的改动一齐退,所以 commit 要小而单一目的 | 错:重教第三幕,commit 粒度 |
09 导师常问
这一章同中三的 Python 循环、函数有什么关系?
中三写得出版程式,这一章教你程式错的时候点找。循环写错一次会重复错一万次,正是最需要用二分法同测试去收窄的地方。
45 分钟够不够讲三类错误加版本控制?
够,但第一幕只可以占 10 分钟。三栏表格加一句“几时发现”就讲完,时间要留给第二幕的二分法计算,因为那是要写数字的题型。
120、114、600 这些数字是真实专案数据吗?
不是,全部是教学数字,设计成可以整除同口算。真实专案的测试数量同除错时间差别很大,重点是方法同判断方向。
本页为 TutorZone 导师备课指引,内容由 TutorZone 团队编写;题目与流程为原创,并非任何学校或出版社的教材。
本页内容版权属 TutorZone 所有 · www.tutorzone.com.hk · 仅供个人学习及教学使用


