仍是James大叔的文章:http://www.satisfice.com/blog/archives/856
本文提出了Testing和checking的定义和他们之间的区别。程序员
============如下是译文===========算法
测试和使用工具在被人类认识的一开始就是两件事(不只是两件事,并且是两件具备不少不一样特征的事情)。 编程
测试是脑力劳动而且是无形的,而工具的使用是公开的(可见的和有形的)。工具已经侵入到每一个流程而且改变了那些流程,所以,至少成百上千年咱们都在思考:是我作的仍是工具在作?我究竟是真正的战士仍是只是将矛扔了出去?我是农民仍是只是用犁耕地的人?app
正如Marshall McLuhan说的那样:咱们创造了工具,而后工具造就了咱们。进化是一个咱们如何标记本身和周围事物的内在的过程。咱们也许见证了工业化如何将橱柜工人编程橱柜工厂,而且诱惑咱们谈论橱柜制做者如何改变角色,可是橱柜工厂的工人确定不会突变成橱柜工人。橱柜工人仍然存在,尽管是少数的,可是他们真是存早在工厂的周围,仍在制造昂贵的和好质量的橱柜。优秀的橱柜工人仍然有市场,去解决宜家不能解决的问题。这样的情景也出如今科学和医学界。它甚至出如今任何地方:工具在人类劳动中的演变说明了什么?任何追求卓越的人都必须和工具所对应的角色斗争。工具
测试是一个在不少方面引入了工具的过程,也是对测试人员思惟挑战的过程。若是咱们想要快速测试一个产品,应该怎么作呢?也许你会说让工具来作吧。这给那些熟练的软件测试人员带来了巨大压力,同时那些并不熟练的测试人员的测试就像工业化时期的橱柜工厂。诚然,在某种程度上一直存在压力。如今“持续部署”的敲响了另外一场战争的擂鼓。咱们相信熟练的认知工做不是工厂工做。那就是为何要理解什么是测试,工具怎样支持测试。学习
Checking vs. Testing测试
基于上述理由,在快速软件测试方法论中,咱们区分了机器能够作的和仅能由熟练测试人员完成的部分。咱们采用一个普通的英语单词“checking”指代工具能够作的部分。就像咱们已经达成共识的区分“编程”和“编译”同样。编程是程序员作的,编译是程序员使用特定的工具作的,尽管编译的结果也是由程序员决定的。让咱们来思考一下,没人谈论自动化编程和手动编程,在编程的同时,由不少其余东西是靠工具来作的,一旦工具也能作这些东西,那就不能再被称之为编程了。 lua
我和Michael用了超过三年的时间去寻找一个新的关于人工验证和机器验证之间的区别的定义。blog
首先咱们来看看测试和验证。下面是咱们给出的新定义:
Testing is the process of evaluating a product by learning about it through exploration and experimentation, which includes to some degree: questioning, study, modeling, observation, inference, etc.
(A test is an instance of testing.)
测试是经过探索和实验的方式(包括:质疑,学习,建模,审查,推理等)学习产品并评估产品的过程。ci
Checking is the process of making evaluations by applying algorithmic decision rules to specific observations of a product.
(A check is an instance of checking.)
验证是经过将算法决策规则应用到特定审查过程并对产品作出评估的过程。
注解:
“评估”(“evaluating”)就是对价值作出判断,好的?很差的?经过?失败?好在哪里?很差在哪里?
“评估”(“evaluations”)做为一个名词指的是对产品的评估。
“学习”(“learning”)是发展人的思惟的过程。只有人类可以学习咱们正在使用的词的完整意思,由于咱们同时指的是隐性和显性的知识。
一些隐藏在定义中的东西:
这些定义并不是道德批判。咱们并不认为验证是一件坏事。正好相反,验证是很是重要的。咱们主张好的验证是在计算机测试过程的上下文中发生。也就是说验证也是一种测试的策略。
Human Checking vs. Machine Checking
咱们须要区分人能够作的和工具能够作的。由于除了测试和验证的基本差异,咱们还要区分人工验证和机器验证的差异。这可能会让人疑惑,由于根据定义,验证是由机器来作的。可是人工验证和机器验证是不同的。
在人工验证的过程当中,人们试图遵循一个显示的算法流程。工具不只遵循这一流程,他们还完整具体地体现了这一流程。
人类不能完整具体地体现这些流程。下面这个实验会证实我所说的:告诉人类去执行一组他不可能完成的指令,看看他会怎么作。他不会乖乖的坐在那里直到精疲力尽。他会停下来而且改变或退出流程。人类会比他遵循和试图遵循的流程表现出更多的东西。对这些普通人甚至是只具备基本认知能力的人来讲没有例外。在这个过程当中,人类始终会作的更多(比起彻底遵循某些流程)。人类会常常调整他们的行为,而工具却作不到。
人类会采起积极的措施;工具只能展现出预约的行为。结论是:你能定义一个足够简单的验证,可是人类在验证过程当中或多或少会作些改变,而工具则不会。
须要理解的是,当咱们朝着熟练的,强大的和有效的测试前进的时候,咱们必须使用健壮的测试工具。咱们要注意人工和机器两方面的因素。工具能够帮助咱们不少,而不只仅是自动化的验证。可是,他们必须做为一个辅助性角色。不恰当的使用工具反而会带来麻烦。
你也许会问为何咱们不把人工验证定义为测试。人工验证是测试的一部分。如下是咱们给出的验证的定义:
Checking is the process of making evaluations by applying algorithmic decision rules to specific observations of a product.
以及三种验证的方式:
Human checking is an attempted checking process wherein humans collect the observations and apply the rules without the mediation of tools.
人工验证是人类在没有工具辅助的状况下搜集观察结果而且使用规则的验证过程。
Machine checking is a checking process wherein tools collect the observations and apply the rules without the mediation of humans.
机器验证是工具在没有人类辅助的状况下搜集观察结果而且使用规则的验证过程。
Human/machine checking is an attempted checking process wherein both humans and tools interact to collect the observations and apply the rules.
人工/机器验证是人类和机器交互的状况下搜集观察结果和使用规则的验证过程。
如需转载,请注明出处,这是对他人劳动成果的尊重~