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

找出未测试的分支

你的测试全部通过,可是程序中有一部分从来没有真正运行过。

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

有判断的程序,里面有好几条路径。**未测试的分支(untested branch)**是你的测试数据从未走过的路径。错误常常藏在那里,因为里面的代码从来没有运行过。

这是验证、核实与测试单元的最后一课,接在预测预期结果之后。

怎样列出分支?

对每个 IF,写出每一条路径,再给每条路径写上会走到那里的条件。以三路等级规则为例:

分支到达它的条件
AScore >= 80
BScore < 80 且 Score >= 50
CScore < 50

分支 C 在代码里没有写出条件。它在前两个条件都为 FALSE 时才运行,所以你得自己算出对应的输入。

例题

一个虚构的程序应该对 80 或以上给 A,50 到 79 给 B,低于 50 给 C。

INPUT Score
IF Score >= 80 THEN
  Grade ← "A"
ELSE
  IF Score >= 50 THEN
    Grade ← "B"
  ELSE
    Result ← "C"
  ENDIF
ENDIF
OUTPUT Grade

测试员运行了两个测试:Score = 85 和 Score = 70。

**第 1 步,追踪 Score = 85。**85 >= 80 为 TRUE,所以 Grade ← “A”。输出:A。预期 A。**通过。**这到达了分支 A。

**第 2 步,追踪 Score = 70。**70 >= 80 为 FALSE,接着 70 >= 50 为 TRUE,所以 Grade ← “B”。输出:B。预期 B。**通过。**这到达了分支 B。

第 3 步,标记表格。

分支被测试到达?
A是(85)
B是(70)
C否

**第 4 步,为分支 C 补一个测试。**选 Score = 40。40 >= 80 为 FALSE,40 >= 50 也是 FALSE,所以分支 C 运行。那一行是 Result ← "C",Grade 始终没有被赋值,输出为空或未定义。预期 C。失败。

在缺漏的分支被测试之前,这个错误完全看不见。那一行应该是 Grade ← "C"。

然后再加上边界测试 80、79、50 和 49,检查比较条件。它们应该依次得到 A、B、B 和 C。

要小心的错误

错误的结论:“两个测试都通过了,所以程序没问题。”

学生只看了结果,没有看测试到达了哪些代码。

通过的测试只能告诉你它走过的那条路径。下结论之前,先数分支,再数你的测试覆盖了几条路径。如果数字不同,程序就还没有被完整测试。

自我检测

1. 一个 IF 带有一个 ELSE IF 和最后的 ELSE。一共有几个分支?

Show answer

三个:IF 分支、ELSE IF 分支和 ELSE 分支。

2. 在等级程序中,哪个测试值会到达分支 C?

Show answer

任何低于 50 的分数,例如 40 或 0。边界选择是 49。

3. 测试只有 90 和 95。哪些分支没有被测试?

Show answer

两个测试都到达分支 A。分支 B 和 C 没有被测试。

接下来学什么?

用综合练习测试你对整个单元的掌握。想回到单元的起点,请看选择验证规则。受限伪代码追踪训练器很适合用来追踪每一个分支。

如果你想要帮助建立完整的测试计划,这正是我们在一对一线上计算机科学补习中会帮你处理的。

常见问题

程序中的分支(branch)是什么?

分支是程序在一个判断处可以走的其中一条路。带 ELSE 的 IF 有两个分支,带 ELSE IF 和最后 ELSE 的 IF 有三个分支。每个分支是一段独立的代码,对某个输入来说可能运行,也可能不运行。

怎样找出未测试的分支?

先列出每个分支,再把每个测试输入走一遍代码,标出它到达的分支。没有打勾的分支就是未测试的。然后选一个新的输入,使该分支的条件成立。

所有测试都通过,是否代表程序正确?

不是。测试只能说明它所走过的路径,对这些输入是有效的。没有被任何测试到达的分支,可能藏着没人发现的错误。所以好的测试集要力求覆盖每一个分支。

每个边界也需要测试吗?

需要。覆盖每个分支只是最低要求。边界值再来检查条件是否写对,例如规则是 80 或以上时,80 应该进入 A 等分支。

更新于:

下一步

如果你的测试总是通过,却无法确定整个程序都被覆盖,一对一的老师可以和你一起走一遍代码,把每条路径对应到一个测试。

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

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

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

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