作者AmosYang (泛用人型编码器)
看板Soft_Job
标题[心得][英文] 如何命名「检查」功能2
时间Fri Aug 21 12:07:06 2020
自上周发布「如何命名『检查』功能」後,收到许多回馈和讨论,特别是 Verify,
Validate 之间的比较。
这周将深入比较 verify / verification vs. validate / validation 的案例;附
带讨论 argument vs. parameter 的差别。
* Google 简报
https://bit.ly/3l161ey
* GitHub 讨论
https://bit.ly/321ResR
* 如何命名『检查』功能1
* Google 简报
https://bit.ly/31UiEPK
* PTT 文章
https://bit.ly/3ixdi3M
---
# 「验证」:
Validate vs.
Verify 案例比较
validate 与 verify 的语意非常接近,在非正式的情景多半可以互换使用。
这里,我们将检视以下案例来试着监别 validate 与 verify 在语意上细微的差异:
* IEEE 1012: Verification and Validation
* IEEE 标准 1012 对 verification 及 validation 的定义
* validation, verification 在各种情景下的语意、出现频率
感谢参与
https://github.com/EngTW/English-for-Programmers/issues/45 讨论
的网友。
---
# IEEE 1012: Verification and Validation
##
Verification
「开发过程可分成多个阶段;
每个阶段收尾时,验证『成品是否满足此阶段的
目标?』」
也就是验证「有没有
把东西做对?」,而「对」的定义由该开发阶段的「输入」来
判断。
例如说:
* 需求R:「做出整数加法器」
* 设计阶段:输入需求R,输出规格书S
* 规格书S会定义整数输入格式、加法的演算法、如何处理溢位、等等
* 就「设计阶段」而言, verification 会验证「规格书S是否能满足需求R?」
* 实作阶段:输入规格书S,输出程式P
* 程式P会定义程式码的细节、执行加法、处理例外情形、等等
* 就「实作阶段」而言, verification 会验证「程式P是否能满足规格书S?」
##
Validation
「开发过程可分成多个阶段;
每个阶段收尾时,验证『成品是否满足此阶段的
目的?』」
也就是验证「有没有
做对的东西?」,而「对」的定义由更高层次的整体「目的」
来判断。
例如说:
* 需求R:「做出整数加法器」
* validation 验证内容包括「整体来看,整数加法器真的是最适当的解决方案吗?」
* 设计阶段:输入R,输出规格书S
* validation 验证内容包括「规格书S开出来的执行条件、技术限制合理吗?」
* 实作阶段:输入S,输出程式P
* validation 验证内容包括「程式P的使用体验如何?是否真正解决了使用者的
问题?」
## 参考资料
*
https://en.wikipedia.org/wiki/Verification_and_validation
*
https://en.wikipedia.org/wiki/Software_verification_and_validation
---
# 「验证」:
Validate vs.
Verify 语意 / 出现频率
我们挑选了以下字样来比较 validation, verification 在各种情景下的语意、出
现频率。
这些字样包括程式设计相关字(例如: code, HTML, password ),也有些日常用
语的字汇(例如: age, identity, signature )。
* age 年龄
* code 程式码
* data 资料
* email 电子邮件
* file 档案
* form 表格
* HTML 超文本标记语言
* identity 身分
* password 密码
* signature 签名
* user 使用者
## 采样方式
* 把以上字样以 "XXX validation" / "XXX verification" 的形式喂给 Google
* 记录 Google 传回的搜寻结果数量
* 归纳 Google 搜寻结果前 3 页中,该词的使用情景
---
# 验证 年龄 (age)
##
Validate / Validation
Google 搜寻结果数量:
89k
* 验证「生物年龄监定方法」的准确度
* (极少案例)验证输入字串是否为合理的年龄数值
* (极少案例)验证是否合乎组织、法律规定
##
Verify / Verification
Google 搜寻结果数量:
16600k
* 验证年龄是否合乎组织、法律规定
---
# 验证 程式码 (code)
##
Validate / Validation
Google 搜寻结果数量:
595k
* 验证程式码、资料是否符合资料格式、语言规格
* JSON, XML, HTML
* 邮递区号、信用卡号码
##
Verify / Verification
Google 搜寻结果数量:
524k
* 验证程式码实作方法、行为、执行结果是否符合功能规格书
---
# 验证 资料 (data)
##
Validate / Validation
Google 搜寻结果数量:
4430k
* 验证资料的品质
* 正确性、准确性、一致性、安全性、隐私性、等等
* 格式是否「乾净」、适合机器处理
##
Verify / Verification
Google 搜寻结果数量:
1390k
* 验证资料迁移 (migration) 後的正确性
## 参考资料
*
https://en.wikipedia.org/wiki/Data_validation
*
https://en.wikipedia.org/wiki/Data_verification
---
# 验证 email
##
Validate / Validation
Google 搜寻结果数量:
928k
* 验证 email 地址的格式
* 验证 email 是否有效(参考 verification )
##
Verify / Verification
Google 搜寻结果数量:
11200k
* 验证 email 是否能确实投递
* 是否会被各家 ISP 的垃圾信过滤机制拦截
* 网域名称过滤机制、等等
---
# 验证 档案 (file)
##
Validate / Validation
Google 搜寻结果数量:
324k
* 验证档案格式是否符合规格
* PDF, CSV, HTML, JSON, XML, 等等
##
Verify / Verification
Google 搜寻结果数量:
152k
* 验证档案内容是否一致
* 验证档案内容是否完整 (checksum)
* 验证档案来源真伪(数位签证)
## 参考资料
*
https://en.wikipedia.org/wiki/File_verification
---
# 验证 表格 (form)
##
Validate / Validation
Google 搜寻结果数量:
2250k
* 验证表格资料是否符合规格、是否满足商业需求
* 必要资讯
* 日期格式
* 信用卡号码格式
* 电话号码格式
* …
##
Verify / Verification
Google 搜寻结果数量:
54.2k
* 与 validate / validation 相似
---
# 验证 HTML
##
Validate / Validation
Google 搜寻结果数量:
947k
* 验证 HTML 资料是否符合规格
##
Verify / Verification
Google 搜寻结果数量:
15k
* 以上传含有特定内容的 HTML 档案来验证网站所有权
---
# 验证 身分 (identity)
##
Validate / Validation
Google 搜寻结果数量:
93k
* 验证身分资料是否符合规格
* 住址;是否真的有这个地址
* 电话;是否真的有这支电话
* …
* 验证身分资料是否真实(参考 verification )
##
Verify / Verification
Google 搜寻结果数量:
4510k
* 验证身分资料是否真实、是否真的能连结到一特定、真实存在的人身上
---
# 验证 密码 (password)
##
Validate / Validation
Google 搜寻结果数量:
423k
* 验证密码是否符合规格
* 英文大小写、数字、符号……
* 验证密码是否正确(参考 verification )
##
Verify / Verification
Google 搜寻结果数量:
226k
* 验证密码是否正确
---
# 验证 签名 (signature)
##
Validate / Validation
Google 搜寻结果数量:
144k
* 说明「由签名赋与文件法律上的效力」这件事
* 验证签名格式、流程、形式是否正确
* 能否满足「由签名赋与文件法律上的效力」的条件
* 例如,签名时有没有见证人
##
Verify / Verification
Google 搜寻结果数量:
2820k
* 验证签名真伪
* 是否真的是当事人的手迹
---
# 验证 使用者 (user)
##
Validate / Validation
Google 搜寻结果数量:
242k
* 跟使用者验证产品功能性、可用性
##
Verify / Verification
Google 搜寻结果数量:
1610k
* 验证使用者(帐号)状态
* 是否为真人
* 使用者帐号帐号信用是否良好
---
# 「验证」:
Validate vs.
Verify 该用哪个?
这两个字的语意有重叠,在口语上也常交换着用;如果实在不确定,通常可以退一
步用 "check" ,表达「检查」的意图。
##
Validate 「资料本身是否『有效 (valid) 』」?
* 资料是否符合形式规格 / 是否在合理范围内,例如:
* 视地区、文化而定,日期有一定的表示格式
* 年龄不可是负数
* 电子邮件地址必须是
[email protected] 的格式
* 资料是否完整、准确 / 是否与现实一致,例如:
* 地址是否完整
* 生日日期是否真的存在
* 例如, 2019-02-29 这个日期的格式正确,但事实上不存在
* (在程式设计以外的情景)过程是否合乎规定程序 / 是否符合整体目的,例如:
* 一份法律文件要有效,除了当事人亲笔签名,可能还需要见证或公证
* "user validation": 产品的设计是否能确实解决使用者的问题
##
Validate /
Verify 「资料、系统是否符合『预期的正确条件、状态』?」
* 年龄是否符合组织、法律规定
* 「起始日」是否在「终止日」之前
* 生日日期是否有正式文件背书
* 法律文件上的签名笔迹是否为真
* 是否为见证人 / 公证人认同
---
# 引数
Argument 参数
Parameter 的差别
从 Google 可以找到前人留下的答案:
* 方法、函数宣告的 是 参数 (
parameter)
* 传入方法、函数的 是 引数 (
argument)
例如:
```
function foo(
parameter) { … }
foo(
argument)
```
一篇 "Kt. Academy" 的文章也点出,可以把相似的概念应用在类别(type)上,例如:
```
class Bar<Type
Parameter> …
val baz: Bar<Type
Argument> …
```
那麽,为什麽参数是参数、引数是引数?
我们可以从语源学找到线索:
*
argument 是从 1300 年代的「根据、证据;推论」而来,带有「『可从其推导出
别的观念』的观念」的意思。
*
parameter 在 1920 - 1950 年代逐渐开始含有「帮助定义系统特性的可测量因素」
的意思。
一篇 MDSN 文章提供了很有趣的理解方式:
> You can think of the parameter as a parking space and the argument as
> an automobile. Just as different automobiles can park in a parking
> space at different times, the calling code can pass a different
> argument to the same parameter every time that it calls the procedure.
「你可以把参数(
parameter)想成停车位(
parking space),把引数(
argument)想成
汽车(
automobile)。就像不同的汽车在不同的时间可样停在同一个停车位上,程式
码每次呼叫函式的时候,可以传送给函式参数不同的引数。」
## 参考资料
*
https://softwareengineering.stackexchange.com/questions/186293/why-are-actual-parameters-called-arguments
*
https://blog.kotlin-academy.com/programmer-dictionary-parameter-vs-argument-type-parameter-vs-type-argument-b965d2cc6929
*
https://www.etymonline.com/word/parameter
*
https://www.etymonline.com/word/argument
*
https://stackoverflow.com/questions/1788923/parameter-vs-argument/1788926#comment43458658_1788923
*
https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/procedures/differences-between-parameters-and-arguments
感谢在
https://github.com/EngTW/English-for-Programmers/issues/31 参与讨
论的网友。
---
# 结语
如果有软体工程、程式设计相关的英文问题,欢迎推文提问,或着到《程式英文》
GitHub 讨论区留言。
*
https://bit.ly/321ResR
*
https://github.com/EngTW/English-for-Programmers/issues
大家集思广益、切磋砥砺,增强英文语感,提昇程式可读性。 :)
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 136.56.13.184 (美国)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1597982849.A.9A7.html
1F:推 sniper2824: 先推 08/21 12:16
2F:推 jobintan: nice. 08/21 12:20
3F:推 jerryshadow: 先推 08/21 12:27
4F:推 javy0521: 推 08/21 12:50
5F:推 hans1461: 推 08/21 13:26
6F:推 summerleaves: 推 08/21 14:36
7F:推 BlazarArc: 推 08/21 15:18
8F:推 TWkobe: 谢谢 很实用 08/21 15:53
9F:推 minesos520: push 08/21 16:30
谢谢 :)
10F:推 ayugioh2003: 推 参数引数那段好懂又好记 08/21 21:45
谢谢你的欣赏 :)
11F:推 Ouranos: 推推! 08/21 22:19
12F:推 LIN810116: 推 08/22 04:37
13F:推 sksksk0487: 推 08/22 13:38
谢谢 :)
14F:推 Csongs: 所以verify包含validation 08/22 13:54
我是这样看,先重新检视字典的定义:
---
##
validate
> check or prove the validity or accuracy of (something).
检查、证明某事物的 有效性 或 准确性
> demonstrate or support the truth or value of.
展示、支持某人事物的确实性、 (精神上的) 价值
> make or declare legally valid.
宣告、认可某事物 在法律上的有效性
> recognize or affirm the validity or worth of (a person or their
> feelings or opinions); cause (a person) to feel valued or worthwhile.
认可、确性某人 (或它的感受、意见) 的 有效性、 (精神上的) 价值
##
verify
> make sure or demonstrate that (something) is true, accurate, or justified.
确认、展示某事物为真、准确、合理
> LAW
> swear to or support (a statement) by affidavit.
法律上,以宣誓为某主张背书
---
把这两个字最主要的解释并排在一起看,可以看出为什麽那麽难分辨
*
validate
* 检查、证明某事物的
有效性(
validity) 或 准确性
*
validity
* > the quality of being logically or factually sound; soundness or
> cogency.
* 逻辑上、事实上 合理明确一致 ,让人信服
* > the state of being legally or officially binding or acceptable.
* 在法律上 或 正式地 有效/被接受
*
verify
* 确认、展示某事物为真、准确、合理
也就是说,随着上下文脉络对「有效性、准确性、真实性、合理性」的解读的改变
,在 口语 上,这两个字多半可以互换着用。
(有点事,先离开,等等再回来写完)
※ 编辑: AmosYang (136.56.13.184 美国), 08/22/2020 21:27:14
※ 编辑: AmosYang (136.56.13.184 美国), 08/22/2020 21:58:41
回到原题
> 所以verify包含validation
与其说「包含」,我会这样想:
* 如果你选择把「此资料是否有效」与「此资料是否满足预期的正确状态」分开来
看,那麽,
* `bool ValidateAge(string age)` 可以做「判断 age 资料是否有效」;例如
, "-3", "foobar" 会是「无效的年龄资料」。
* `bool VerifyAge(int age)` 可以做「判断是否符合『对年龄的规定』」;例如
12 (岁) 就不符合「成人 18 岁的规定」。
* 相对的,如果在你的逻辑模型中你认为「『大於 18 的数字』才是
有效(valid)的 + 正确的 + 合理的」,也是可以用一个 `ValidateAge()`
或 `VerifyAge()` 就一次检查完。
或着,写成 `CheckAge()` 也可以,大多数人应该还是能知道你的意图是「检查
age 是否符合你的逻辑模型的要求。
※ 编辑: AmosYang (136.56.13.184 美国), 08/23/2020 13:54:00
15F:推 Csongs: 年龄举例 蛮清楚的 谢谢 08/24 09:41
不客气 :)
※ 编辑: AmosYang (136.56.13.184 美国), 08/29/2020 06:30:00