验证(validation)检查数据是否合理、是否符合规则。核实(verification)检查输入的数据是否与原本要输入的一致。 验证问的是“这个允许吗?”,核实问的是“这和原始来源一样吗?”
这一对概念常出现在数据输入、表格和测试的题目里。更完整的内容见验证、核实与测试,两者的区分在区分核实与验证中单独讲。
考试中可用的判断方法
对这个检查问一个问题:它需要原件吗?
- 如果程序只靠规则(范围、长度、格式)就能自己完成检查,就是验证。
- 如果检查是把输入的数据与原始文件比较,或与同一数据的第二次输入比较,就是核实。
陷阱在“正确”这个词。验证从不证明数据正确,它只证明数据可以接受。
例题
学校图书馆的表格要求填写学生的年级,必须是 7 到 13 的整数。这位学生的真实年级是 10。
| 用户输入 | 验证(范围 7 到 13) | 核实(输入两次) |
|---|---|---|
| 10 再输入 10 | 通过 | 两次一致,通过 |
| 1 再输入 1 | 拒绝,超出范围 | 不会进行到这一步 |
| 12 再输入 12 | 通过 | 两次一致,通过 |
| 10 再输入 1 | 第一个值通过 | 两次不同,拒绝 |
第一步。 值 1 没通过验证,因为规则是 7 到 13。程序不需要原件就能判断。
第二步。 值 12 通过了验证,尽管真实年级是 10。规则无法知道真相。
第三步。 输入两次也发现不了 12 和 12,因为人可能重复同一个失误。核实能减少输入错误,但并不完美。把表格与学生记录对照才能发现。
所以:验证挡住了不可能的值,核实挡住了两次输入的不一致,而两者都不能证明数据是真的。
要避免的错误
错误答案:“验证检查数据是否正确,核实检查数据是否输入正确。”
听上去接近,但两处都不对。验证并不检查正确性,12 的例子已经说明这一点。核实关注的是与原本想输入的数据是否一致,而不是“输入得对不对”。
更正:“验证检查数据是否合理并符合规则,例如用范围检查拒绝 1。核实检查输入的数据是否与来源一致,例如输入两次再比较。”
养成习惯
- 每遇到一个检查,写下名称(范围、长度、输入两次)和一行:“需要原件:是或否”。
- 补充一个你自己想的情境,不要只用课本的。
- 看答案之前,先用一句话大声说出两者的区别。
你可以用伪代码跟踪训练器和Python 推理沙盒,在原创的小例子上练习逐步推理。
自测
1. 注册表格拒绝少于 6 个字符的用户名。这是验证还是核实?是哪一种检查?
Show answer
验证。这是长度检查(length check),因为只应用规则,没有把输入与任何原件比较。2. 一名职员把每条输入的记录与纸质表格逐条对照。是验证还是核实?
Show answer
核实。把输入的数据与来源文件比较,看是否一致。3. 用户把年龄输入为 140。哪种检查会拦下它?为什么把 41 误输成 14 仍然能通过?
Show answer
范围检查(range check)会拦下 140。14 落在合理范围内,所以验证会接受,尽管这不是用户的本意。只有对照原始来源的核实才能发现。接下来
在根据需求选择验证规则中练习设计检查,再做设计正常、边界和无效的测试数据。
如果你希望老师在你写答案时当场纠正用词,一对一线上计算机科学补习从 RM80 起的付费试听课开始。