跳到正文
IGCSE·Tuition
计算机科学 · 课程

在运行代码之前说明预期结果

你运行程序,看了输出,就觉得它没问题,这是最容易漏掉错误的做法。

本页内容
  1. 怎样算出预期结果?
  2. 例题
  3. 要小心的错误
  4. 自我检测
  5. 接下来学什么?

预期结果(expected result)是程序对给定输入应该输出的内容,在程序运行之前,根据需求或追踪算法算出。测试就是拿它来比较的。如果跳过这一步,错误的输出看起来也可能很合理。

这一课接在设计测试数据之后,属于验证、核实与测试单元。

怎样算出预期结果?

使用追踪表。把变量写成列,从初始值开始,按顺序跟着每一行走,并记录每一次变化。

如果需求是用文字给出的,你也可以直接从需求推理。无论哪种方法,都要先把预期值写下来。

例题

一位虚构的老师计算五个测验分数中有几个及格。及格分数是 50 或以上。

Total ← 0
FOR Count ← 1 TO 5
  INPUT Mark
  IF Mark >= 50 THEN
    Total ← Total + 1
  ENDIF
NEXT Count
OUTPUT Total

输入的五个分数是 62、48、50、91、49。

第 1 步,建立表格,列为 Count、Mark、Mark >= 50、Total。从 Total = 0 开始。

第 2 步,追踪每一次循环。

CountMarkMark >= 50Total
(开始)0
162TRUE1
248FALSE1
350TRUE2
491TRUE3
549FALSE3

**第 3 步,读出输出。**循环结束后,OUTPUT Total 给出 3。

**第 4 步,对照需求检查。**及格的分数是 62、50 和 91,共三个,所以代码与需求一致。

表中第 3 行很重要:Mark 是 50,而 >= 使它及格。这种边界值正是预测最容易出错的地方。

要小心的错误

错误的预测:“输出是 2,因为分数必须高于 50 才算及格。”

学生把 >= 读成了 >。

符号 >= 的意思是大于或等于,所以 50 及格。这位学生的表在第 3 行会写 FALSE,最后得到 2,预期结果就错了。看到比较符号要放慢,并念出来:“大于或等于”。

写下预测之后,再运行程序。如果它输出 3,测试通过。如果输出 2,你就发现了代码中的错误,因为你的预测来自需求。

自我检测

1. 追踪下面的算法,写出输出。

Sum ← 0
FOR N ← 1 TO 6
  IF N MOD 2 = 0 THEN
    Sum ← Sum + N
  ENDIF
NEXT N
OUTPUT Sum
Show answer

N MOD 2 = 0 在 2、4、6 时为 TRUE。Sum 依次是 0、2、6、12。输出是 12。

2. 把分数 70、30、50 输入上面的及格计数算法,并把循环改为运行三次。预期输出是什么?

Show answer

70 及格,30 不及格,50 及格。输出是 2。

3. 一位学生对第 2 题预测为 5,理由是”有五个分数”。哪里出错了?

Show answer

他用了原程序的循环次数,并把每个分数都算进去,而不是只算及格的。这道题只有三个分数,其中只有两个满足 Mark >= 50。

接下来学什么?

下一课学习找出没有被任何测试执行到的分支。你可以在受限伪代码追踪训练器中练习追踪,综合练习则把追踪和测试设计结合在一起。

如果你的追踪在循环中卡住,这正是我们在一对一线上计算机科学补习中会帮你处理的。

常见问题

什么是手动演算(dry run)?

手动演算是不用电脑,逐行跟着算法走,并把每个变量的值记录在追踪表(trace table)里。它让你在程序运行之前预测输出,并发现逻辑错误。

为什么要在运行代码之前预测结果?

如果只在运行之后才看输出,很容易接受任何出现的结果。根据需求做出的预测,给你一个独立的比较对象。结果不一致时,就说明代码或你的理解有问题。

追踪表里要写什么?

每个变量和输出各占一列,每次数值改变或重要的行被执行就写一行。先写初始值,再逐行更新。算法含有 IF 时,要把条件的结果也写进去。

如果预测结果和实际结果不一样怎么办?

不要只是改预测。慢慢再追踪一遍代码,并重新检查需求。可能是你某一步追踪错了,也可能是代码有逻辑错误,或是你的预期值本来就错。找出是哪一种,才是有用的部分。

更新于:

下一步

如果你的手动演算总是在某一步出错又找不到原因,一对一的老师可以看着你追踪一个新算法,指出你对代码的理解是从哪一行开始偏离的。

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

补习由家长或监护人安排。用 WhatsApp 把这页发给他们,他们就可以替你咨询。

是家长或监护人?在这里咨询

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