中四 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 · 僅供個人學習及教學使用


