主题 7 · 算法设计与问题解决
测试数据与追踪表
正常、异常、极端和边界测试数据,以及如何逐行追踪一个算法。
第 5 课,共 5 课大纲 7.6–7.8更新于 2026年10月31日
测试数据的类型
要充分测试一个程序,你需要几类数据。以一个接受 0 到 100 整数百分比的程序为例:
| 类型 | 含义 | 0–100 的例子 | 预期结果 |
|---|---|---|---|
| 正常 | 应当被接受的普通数据 | 45、72 | 接受 |
| 异常 | 应当被拒绝的数据 | −20、150、"abc" | 拒绝 |
| 极端 | 应当被接受的最大值和最小值 | 0、100 | 接受 |
| 边界 | 每个界限上的值以及刚好越界的值 | 0 和 −1,100 和 101 | 接受 0 和 100,拒绝 −1 和 101 |
考试提示: 给出边界数据时,总要成对给出:最后一个被接受的值和第一个被拒绝的值。
追踪表
追踪表逐行记录算法运行时每个变量的值。它能让你在没有计算机的情况下检查算法做了什么、找出逻辑错误、推算出输出。
下面的算法只把输入中的正数加起来。用输入 5、−2、7、3 逐步完成它的追踪表。
伪代码
DECLARE Total : INTEGER
DECLARE Count : INTEGER
DECLARE Number : INTEGER
Total <- 0
FOR Count <- 1 TO 4
INPUT Number
IF Number > 0
THEN
Total <- Total + Number
ENDIF
NEXT Count
OUTPUT Total追踪表,输入 5、−2、7、3
| Count | Number | Total | OUTPUT |
|---|---|---|---|
| 0 | |||
| 1 | 5 | 5 | |
| 2 | −2 | 5 | |
| 3 | 7 | 12 | |
| 4 | 3 | 15 | |
| 15 |
步骤 1 / 6
Total 保持为 5。找出错误
语法错误违反了语言规则,例如漏写 ENDIF,会导致程序无法被翻译。逻辑错误让程序能运行,但结果是错的。
这个算法本应输出 10 个数中的最大值,但它有一个逻辑错误。你能找到吗?
伪代码
DECLARE Largest : INTEGER
DECLARE Number : INTEGER
DECLARE Count : INTEGER
Largest <- 0
FOR Count <- 1 TO 10
INPUT Number
IF Number < Largest
THEN
Largest <- Number
ENDIF
NEXT Count
OUTPUT Largest注意: 比较应该是 Number > Largest。另外,Largest 从 0 开始时,如果所有数都是负数就会出错。用第一个输入的数作为初值更安全。
关键术语
- 正常数据
- 在可接受范围内、应当被接受的数据。
- 异常数据
- 应当被拒绝的数据。
- 极端数据
- 应当被接受的最大值和最小值。
- 边界数据
- 处于可接受范围边缘以及刚好超出范围的值。
- 追踪表
- 记录算法运行过程中变量值的表格。
- 逻辑错误
- 程序能运行但结果错误的错误。
自我检测
一个程序接受 11 到 18 岁。给出边界测试数据。查看答案
10 和 11(下界),18 和 19(上界)。接受 11 和 18,拒绝 10 和 19。
对于年龄栏,"twelve" 是正常、异常、极端还是边界数据?查看答案
异常数据:数据类型错误,应当被拒绝。
语法错误和逻辑错误有什么区别?查看答案
语法错误违反语言规则,代码无法翻译;逻辑错误能运行,但结果错误。