/cn-tutor-prep-s6-ict-oop-debugging/
/cn-tutor-prep-s6-ict-oop-debugging/
简体版
2
一般查询: 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,免费登记,招生与配对交给平台。 了解详情 →