文档

主题 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
CountNumberTotalOUTPUT
0
155
2−25
3712
4315
15
步骤 1 / 6
输入 −2 时条件为假,所以 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" 是正常、异常、极端还是边界数据?查看答案

异常数据:数据类型错误,应当被拒绝。

语法错误和逻辑错误有什么区别?查看答案

语法错误违反语言规则,代码无法翻译;逻辑错误能运行,但结果错误。