跳到正文
IGCSE·Tuition
计算机科学 · 练习

验证、核实与测试:综合练习

你能背出定义,可是一道题给了全新的情境和一张要你填的表,你就卡住了。

这套练习涵盖整个验证、核实与测试单元:选择验证检查、区分 validation 与 verification、设计测试数据、通过追踪预测结果,以及找出未测试的分支。所有情境都是虚构的。

题目由易到难。先写出你的答案,再打开解答。受限伪代码追踪训练器可帮助做追踪题,错误记录与重测队列则是记录失误的地方。

题目

1. 表格写着:“用户名必须是 6 到 12 个字符。“请说出验证检查的名称。

Show answer

长度检查(length check)。它数字符个数,最少 6,最多 12。

2. 一个网站要求用户输入两次电子邮件地址并比较两者。这是验证还是核实?说出方法。

Show answer

核实(verification),方法是重复输入(double entry)。程序比较两份内容,确认用户输入了想输入的内容。

3. 产品代码必须是三个字母加两个数字,例如 ABC12。请说出检查名称。XYZ99 能通过吗?AB123 呢?

Show answer

格式检查(format check)。XYZ99 能通过,因为是三个字母加两个数字。AB123 不能通过,因为是两个字母加三个数字。

4. 范围检查接受 13 到 17 岁。一位成员的真实年龄是 15,却输入了 14。会被接受吗?什么能抓出这个错误?

Show answer

会,14 被接受,因为 13 <= 14 <= 17。验证不知道真实年龄。核实,例如重复输入或与来源进行目视检查,可以抓出这个错误。

5. 规则写着:“百分比必须是 0 到 100(含)的整数。“请完成测试表,列出正常、边界和无效数据,以及各自的预期结果。

Show answer
类型测试值预期结果
正常55接受
边界0接受
边界100接受
边界,紧贴界限之外-1拒绝
边界,紧贴界限之外101拒绝
无效“fifty”拒绝

6. 追踪这个算法并写出输出。

X ← 3
Y ← 0
WHILE X > 0
  Y ← Y + X
  X ← X - 1
ENDWHILE
OUTPUT Y
Show answer
循环之前的 X之后的 Y之后的 X
1332
2251
3160

此时 X > 0 为 FALSE,循环结束。输出是 6。

7. 这段代码应该接受 0 到 100(含)的百分比。第 5 题中哪些测试值会让它失败?为什么?

INPUT Percent
IF Percent > 0 AND Percent < 100 THEN
  OUTPUT "Accepted"
ELSE
  OUTPUT "Rejected"
ENDIF
Show answer

0 和 100 会失败。预期 Accepted,但 0 > 0 为 FALSE,100 < 100 为 FALSE,所以输出 “Rejected”。代码应该用 >= 和 <=。正常值 55 能通过,这就掩盖了错误。

8. 运行之前,用追踪表预测输出。输入是 5、12、10、20。

Count ← 0
FOR I ← 1 TO 4
  INPUT Value
  IF Value > 10 THEN
    Count ← Count + 1
  ENDIF
NEXT I
OUTPUT Count
Show answer
IValueValue > 10Count
15FALSE0
212TRUE1
310FALSE1
420TRUE2

输出是 2。10 并不大于 10。

9. 预测输入 150、-2、40 时的输出。

REPEAT
  INPUT Mark
  IF Mark < 0 OR Mark > 100 THEN
    OUTPUT "Invalid"
  ENDIF
UNTIL Mark >= 0 AND Mark <= 100
OUTPUT Mark
Show answer

150 > 100,所以输出 “Invalid”,循环继续。-2 < 0,再次输出 “Invalid”。40 通过两项检查,循环结束,输出 40。完整输出:Invalid、Invalid、40。

10. 一个票价程序规定:12 岁以下票价 5,12 到 59 岁票价 10,60 岁及以上票价 7。目前的测试使用年龄 8 和 30。哪个分支没有被测试?你会补什么测试?

INPUT Age
IF Age < 12 THEN
  Price ← 5
ELSE
  IF Age < 60 THEN
    Price ← 10
  ELSE
    Price ← 7
  ENDIF
ENDIF
OUTPUT Price
Show answer

年龄 8 到达第一个分支(票价 5),年龄 30 到达第二个分支(票价 10)。**60 岁及以上的 ELSE 分支没有被测试。**补上 Age = 60,预期票价 7。边界测试 11、12、59 和 60 应依次得到 5、10、10 和 7。

11. 写出伪代码,不断要求输入密码,直到密码至少有 8 个字符。然后说明为了核实还必须做什么。

Show answer
REPEAT
  INPUT Password
  IF LENGTH(Password) < 8 THEN
    OUTPUT "At least 8 characters needed"
  ENDIF
UNTIL LENGTH(Password) >= 8

这是长度检查,所以属于验证。要做核实,用户要再输入一次密码,程序比较两次输入。如果不同,就再次要求输入。

答错了怎么办?

失误去看
说错检查名称,或混淆范围与长度选择验证规则
写成验证能让数据变正确核实与验证
漏掉边界,或只选正常数据设计测试数据
追踪表得出错误的输出说明预期结果
有分支从未运行却说程序已测试找出未测试的分支

把每个失误记在错误记录与重测队列,几天后再做一次。如果某一类错误总是回来,那是值得带到一对一线上计算机科学补习的好话题。

常见问题

这套练习应该怎么用?

先像考试那样把每道题的答案写在纸上,再打开解答。比较的是关键术语,而不只是想法,然后记录每个失误。几天后不看笔记重做答错的题,看看纠正是否有效。

这些题目来自历年试卷吗?

不是。每道题都是原创,并使用虚构的情境。它们对应本单元的技能,而不是某一份特定的试卷。历年试卷和课程大纲可向你的考试中心及剑桥网站索取。

我应该用伪代码还是 Python 作答?

这里的代码是剑桥风格的伪代码。如果你的课程用 Python,把相同的逻辑翻译过去即可,检查和追踪的内容不会改变。请按题目或老师要求的写法作答。

更新于:

下一步

如果这套练习里的失误一再重复,一对一的老师可以把它们按原因分类,并围绕最让你丢分的两三项建立一个简短的计划。

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

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

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

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