跳到正文
IGCSE·Tuition

学习路线

改代码之前先设计边界测试

你改了一个符号,试的那个测试通过了,两天后同样类型的错误又在别的地方冒出来。

本页内容
  1. 为什么错误集中在边缘?
  2. 怎样设计测试
  3. 例题
  4. 要留意的错误
  5. 自我检测
  6. 接下来

要设计边界测试,先找出规则里的每一个边缘,列出每个边缘刚好低于、恰好在上面和刚好高于它的值,写下规则规定应该发生什么,然后才运行代码。这张表就是测试。代码是拿来和它对照的东西。

边界测试能抓到选择结构和循环中最常见的小错误。它也让你用证据,而不是凭感觉,判断修改是否成功。

为什么错误集中在边缘?

规则的大部分范围没有含糊之处。30 分不及格,90 分是 A,几乎不论代码怎么写都一样。“大于”与”大于或等于”之间的差别,只在那个确切的值上才显现。

所以用舒服的值做测试,代码错了也可能通过。bug 就藏在你没去看的那一个地方。

怎样设计测试

  1. 用简单的话写出规则,包括有效范围。
  2. 标出每个边缘,也就是结果改变的地方。
  3. 列出值:每个边缘刚好低于、恰好在上面和刚好高于它的值,再加一个普通的值。
  4. 先根据规则填好预期一栏,然后才运行任何东西。
  5. 运行代码,填上实际一栏。
  6. 修改代码,然后重新运行整张表,而不是只跑出错的那一行。

例题

规则:分数是 0 到 100。

80 分或以上得”A”。50 到 79 分得”Pass”。低于 50 分得”Fail”。

一位学生写的代码:

def grade(mark):
    if mark > 80:
        return "A"
    elif mark > 50:
        return "Pass"
    else:
        return "Fail"

边缘是 50 和 80。测试表:

分数预期实际结果
0FailFail正确
49FailFail正确
50PassFail错误
79PassPass正确
80APass错误
100AA正确

两行出错,都刚好在边缘上。

两处的原因相同:> 应该是 >=。两处都改好之后,重新运行全部六行。现在应该全部吻合。

要留意的错误

有学生看到 50 分的结果不对,就改了那一行,只重新运行那一行。它通过了,学生就停下来。80 分那里的错误还在。

这个错误的第二种版本是只测试 30、65 和 90。这三个值在有问题的代码下全部通过,于是学生就下结论说代码没问题。

修正方法:从边缘选值,并在每次修改之后重新运行整张表。

自我检测

1. 规则写着”年龄未满 13 岁可购买儿童票”。哪些值能测试这个边缘?

显示答案

12(儿童)和 13(不是儿童),再加上 14 作为刚好高于边缘的值。边缘在 13。

2. 规则写着”分数至少 50 就及格”。写出两个最有用的测试值及预期结果。

显示答案

49 得 Fail,50 得 Pass。这两个值位于边缘的两侧。

3. 对上面有问题的等级代码,测试 30、65 和 90 能发现 bug 吗?

显示答案

不能。30 得 Fail,65 得 Pass,90 得 A,全部正确。只有 50 和 80 才能暴露错误。

接下来

设计正常、边界和无效的测试数据与找出未测试的分支这两课讲得更深入。想练习第一步,请看做出最小的可重现学习示例。你可以在安全的 Python 推理沙盒里运行自己编的小练习。

当测试通过了,你却仍然说不出原因,一对一 Computer Science 补习能让你有一位老师,陪你一起推理这条规则。Computer Science 学习指南显示了测试在这门科目中的位置。

常见问题

什么是边界值?

边界值是规则边缘上的值,行为应该在这里发生改变。及格分是 50 时,49 和 50 就位于边缘的两侧。错误集中在这里,是因为一个符号(例如大于与大于或等于)决定了某个值落在哪一边。

为什么要在改代码之前先写测试?

因为预期结果应该来自需求,而不是来自代码现在的行为。如果先运行代码再抄它的输出,错误的规则也可能看起来是对的。先写好预期结果一栏,你的判断才不会受代码影响。

需要测多少个值?

对每个边界,测试刚好低于它的值、恰好在它上面的值,以及有需要时刚好高于它的值。再加一个普通的值,和规则提到的任何极端值。小规则通常有六到十个值就够了。

如果输入无效,例如分数 101 呢?

由需求决定。如果需求说分数是 0 到 100,程序就需要对 101 有明确的处理方式,例如拒绝它。如果需求没有说明,就把它记成一个待确认的问题,而不是自己猜。

资料来源

  1. Cambridge IGCSE Computer Science 0478 课程大纲页面

更新于:

下一步

如果你修好了一个 bug,另一个又出现在规则的边缘,一对一的 Computer Science 老师可以先陪你建立测试表,并和你一起解释每一个预期结果。

一小时付费试听课,按所安排老师确认的收费,RM80 起。 其他费用、时间安排及后续课程,在试听课后由你与老师直接确认。

已通过我们的服务帮助 9,000+ 名学生