**验证(validation)**检查数据是否合理并被允许。**核实(verification)**检查数据是否与原始数据或想输入的值相同。两者回答不同的问题,考试经常要你解释区别,或判断某个情境属于哪一种。
这一课接在选择验证规则之后,属于验证、核实与测试单元。
它们各自回答什么问题?
| 验证 | 核实 | |
|---|---|---|
| 问题 | 这个数据可以接受吗? | 这个数据是想输入的吗? |
| 由谁执行 | 程序自动完成 | 人或比较步骤 |
| 例子 | 年龄必须在 13 到 17 之间 | 把电子邮件输入两次再比较 |
| 能否抓出界限内的错误值? | 不能 | 能 |
两种常见的核实方法是重复输入(double entry)和目视检查(visual check)。
例题
一个虚构的社团表格,是根据纸质表填写的。纸上写着成员年龄是 15。
一位打字员按错键,输入了 51。另一位打字员在另一张真实年龄也是 15 的表格上输入了 16。
第 1 步,使用范围检查(13 到 17)。
| 输入值 | 真实年龄 | 通过范围检查? |
|---|---|---|
| 51 | 15 | 否,51 > 17,被拒绝 |
| 16 | 15 | 是,13 <= 16 <= 17 |
**第 2 步,看验证做了什么。**它抓住了 51,却抓不住 16,因为 16 合理且被允许。
**第 3 步,使用核实。**如果表格输入两次,第一份写 16,第二份写 15。比较发现不一致,打字员去查纸质表。对照纸质表做目视检查,也能发现错误。
**结论:**两者一起使用。验证迅速排除不可能的值,核实则抓出可能但错误的值。
用伪代码写一个简短的重复输入比较:
INPUT FirstEntry
INPUT SecondEntry
IF FirstEntry = SecondEntry THEN
OUTPUT "Entries match"
ELSE
OUTPUT "Entries differ, please check the source"
ENDIF
当 FirstEntry = 16、SecondEntry = 15 时,条件为 FALSE,输出是 “Entries differ, please check the source”。
要小心的错误
错误答案:“验证确保输入的数据是正确的。”
学生把”有效”当成了”真实”。
验证只确保数据合理。符合规则的错误值会通过。请写”合理并被允许”,而当意思是与来源相符时,请用核实。
自我检测
1. 程序拒绝数量 -3。这是验证还是核实?
Show answer
验证。程序自动判断 -3 不是被允许的数量。
2. 用户输入两次新密码,程序比较两次的内容。请说出检查类型和方法。
Show answer
核实,方法是重复输入(double entry)。
3. 表格接受 2012 作为出生年份,但真实年份是 2021。哪一种检查仍可能让它通过,哪一种能抓出错误?
Show answer
范围检查可能让它通过,因为 2012 是合理的。核实步骤,例如与原始文件对照,可以抓出错误。
接下来学什么?
下一课学习设计正常、边界和无效测试数据,用来检查验证规则是否真的有效。你可以在综合练习中练习这两个概念。
如果这两个词在你的答案里总是互换,这正是我们在一对一线上计算机科学补习中会帮你处理的。