/tutor-prep-s6-ict-oop-debugging/
/tutor-prep-s6-ict-oop-debugging/
一般查詢: info@TutorZone.com.hk
辦公時間: 星期一至六 - 上午 9 時至下午 6 時
WhatsApp 星期一至日 - 24 小時
人手接聽: +852 6828 1809
即時客服: +852 9061 3106

DSE ICT|物件導向設計與除錯 備課指引(導師用)|3 個 class 12 個 method、18 個測試

DSE ICT|物件導向設計與除錯 備課指引(導師用)|3 個 class 12 個 method、18 個測試

  • 2026-11-03

學生寫 class,通常把整個程式塞進一個 class,然後靠 print 找錯。這一堂只做兩件事:分責任、先寫邊界測試。

本堂目標 學生能夠:① 為一個小型圖書館系統定出 3 個 class(Book、Member、Loan),每個 class 只負責一件事;② 講出屬性與方法的分工,並為每個 class 寫出 4 個 method(合共 12 個);③ 在 18 個測試案例中先寫 6 個邊界案例(佔 33.3%),用測試而非 print 定位錯誤。

01 先備知識(開課前 3 分鐘快檢)

以下任何一項未過關,本堂就會卡住,先補該項:

技能 快檢題 過關標準
變數與資料型別 list 與 dict 分別用於什麼 有序集合/鍵值對應
函數 def 裏的參數與回傳值有什麼分別 參數入、return 出
條件與迴圈 for 與 while 分別在什麼情況停 次數已知/條件成立

02 課堂流程(45 分鐘)

時間 環節 導師做什麼 學生做什麼
0–5 分 定責任 寫出 3 個 class 各一句責任 每個 class 一句,不准重疊
5–15 分 屬性先於方法 先列 5 個屬性,再定 12 個 method 屬性與方法一一對應
15–25 分 邊界案例 示範空值、重複、超額三類邊界 寫出 6 個邊界測試
25–40 分 用測試除錯 故意放入一個 bug,用測試定位 27 分鐘內跑完 18 個測試
40–45 分 離場三問 責任、邊界、除錯次序各一題 三題全對

03 講解腳本(照著說就可以)

第一幕:責任先於方法:三個 class,各一句話

圖書館系統只需要 3 個 class:Book 負責一本書的資料與狀態(5 個屬性之內)、Member 負責誰借了什麼、Loan 負責借還的期限與罰款。每個 class 給 4 個 method,合共 12 個,剛好夠一個 45 分鐘課堂示範。
判斷責任的方法只有一句:如果一個 method 需要同時知道書價與會員地址,就放錯 class。借書期限要知書、又要知會員,所以另開 Loan,由 Loan 同時引用兩邊,而不是把書與會員塞成一個 class。
學生最常見的做法是一個 class 叫 System,內含全部 method。要即場數:有幾個 method 同時處理三種資料?超過兩個就代表責任未分。

要學生講:罰款計算應該放在 Book、Member 還是 Loan,憑什麼。

第二幕:屬性先於方法:五個屬性決定十二個 method 的形狀

每個 class 先寫屬性,再寫方法。Book 的屬性是 isbn、title、author、available;Member 的屬性是 id、name、borrowed;Loan 的屬性是 book、member、due date。屬性一旦定好,方法就是對屬性的操作:查詢、修改、驗證。
好處是 method 數目自然收斂。有 5 個屬性,通常只需要 4 個 method(一個建立、一個查詢、一個修改、一個驗證);如果學生寫到 12 個 method 在同一個 class,幾乎一定是把別的 class 的屬性也搬了進來。
要強調封裝的理由不是「資料隱藏」這種口號,而是:屬性是唯一會被改壞的地方,把改動集中在一處,除錯範圍就固定。

要學生講:available 這個屬性由誰改,改之前要先檢查什麼。

第三幕:除錯次序:先邊界測試,再 print

18 個測試之中留 6 個做邊界,佔 33.3%。三類邊界固定:借已借出的書、借超過上限、歸還時已過期。這三類佔實際錯誤的大多數,而且不需要看完整段程式就能寫。
每個測試平均限 1.5 分鐘,18 個測試合共 27 分鐘;超過這個時間就代表測試寫得太細,或程式根本沒有可測的介面。
除錯次序固定為:跑測試看哪一個紅 → 在該 method 內加一個斷言 → 只用 print 印出輸入與中間值 → 修完即刪 print。留著 print 的程式在考試卷上會被扣分數,因為它會改變輸出格式。

要學生講:為甚麼「借已借出的書」屬於邊界而不是正常流程。

04 必教題型與步驟

題型 例子 步驟 答案
寫 class 骨架 為 Book 寫屬性與 method 先列屬性→每個屬性配一個操作→只寫簽名 class Book: isbn, title, available; borrow(), return_book()
追蹤物件狀態 兩次借書後 available 是什麼 逐步寫出每個 method 之後的屬性值 False,第二次應拋出錯誤
找 bug find 出罰款算錯的原因 先寫失敗測試→重現→縮小範圍→修一处 期限比較用了 < 而非 <=
寫測試 為歸還過期書寫兩個案例 正常一例+邊界一例,各附預期結果 罰款=過期日數 × 每日罰款
合理性檢查(一定要教):檢查三個數:class 3 個、method 12 個、測試 18 個(邊界 6 個)。如果學生一個 class 寫到 10 個以上 method,先叫他講出該 class 的責任,講不出就是責任未分。測試時間 27 分鐘是上限,不是目標;18 個測試跑 45 分鐘代表測試粒度太細。

05 獨立練習三題

題目 答案 想觀察什麼
為 Loan 寫出三個屬性與兩個 method 簽名。 book、member、due;create()、fine()。 屬性是否足夠計罰款,方法是否只做一件事
寫一個測試:會員已借滿上限仍再借。 預期拋出 BorrowLimitError,並且 borrowed 數目不變。 有無檢查狀態未被改動,而非只看有無報錯
指出這段程式的 bug:if due < today: fine = 0 條件寫反,應該是 due < today 才罰款;寫成 due <= today 或方向錯就會漏罰。 能否用一個測試重現,而不是靠讀

06 學生常見錯誤與糾正句

錯誤 學生通常這樣寫 導師這樣說
全部塞進一個 class class System 內 15 個 method 「一個 class 只做一件事,你數下邊幾個 method 要同時識三種資料。」
屬性與方法數目失衡 2 個屬性卻有 9 個 method 「method 係操作屬性,屬性得兩個,第九個 method 操作咩?」
只寫正常流程測試 18 個測試全部借書成功 「邊界先寫,成功案例最後寫,因為邊界才會搵到 bug。」
靠 print 除錯且不刪 交卷仍留有 6 個 print 「修完即刪,print 會改輸出格式,考試直接扣分。」

07 家課建議(直接指到練習卷題號)

08 離場檢查(最後 5 分鐘)

題目 答案 判定
三個 class 各負責什麼 Book 書況、Member 會員、Loan 借還期限 講不出 Loan=重講責任
18 個測試留幾個邊界 6 個,佔 33.3% 答 2 個以下=重講邊界
除錯第一步做什麼 跑測試找出失敗的那一個 答「加 print」=重講次序

09 導師常問

一定要用物件導向嗎?

不是。但題目若要求多個實體共用狀態,用 class 比用多個 list 更清楚,也更容易寫測試。

測試要寫到多細?

每個 method 至少一個成功案例、一個邊界案例就夠;18 個測試對 12 個 method 已經覆蓋足夠。

考試卷可以寫註解代替測試嗎?

不可以。註解不執行,看不到錯誤;測試失敗才有定位作用。

立即免費搵導師導師登記 →

本頁為 TutorZone 導師備課指引,內容由 TutorZone 團隊編寫;題目與流程為原創,並非任何學校或出版社的教材。

招募導師及興趣班教練|學術、樂器、體育、藝術、STEM,免費登記,招生與配對交給平台。 了解詳情 →