Testing and Checking Refined
还是James大叔的文章:http://www.satisfice.com/blog/archives/856
本文提出了Testing和checking的定义和他们之间的区别。
============以下是译文===========
测试和使用工具在被人类认识的一开始就是两件事(不仅是两件事,而且是两件具有很多不同特征的事情)。
测试是脑力劳动并且是无形的,而工具的使用是公开的(可见的和有形的)。工具已经侵入到每个流程并且改变了那些流程。
因此,至少成百上千年我们都在思考:是我做的还是工具在做?我到底是真正的战士还是只是将矛扔了出去?我是农民还是只是
用犁耕地的人?正如Marshall McLuhan说的那样:我们创造了工具,然后工具造就了我们。
进化是一个我们如何标记自己和周围事物的内在的过程。我们也许见证了工业化如何将橱柜工人编程橱柜工厂,并且诱惑我们谈论
橱柜制作者如何改变角色,但是橱柜工厂的工人肯定不会突变成橱柜工人。橱柜工人仍然存在,尽管是少数的,但是他们真是存在
在工厂的周围,仍在制造昂贵的和好质量的橱柜。优秀的橱柜工人仍然有市场,去解决宜家不能解决的问题。这样的情景也出现在
科学和医学界。它甚至出现在任何地方:工具在人类劳动中的演变说明了什么?任何追求卓越的人都必须和工具所对应的角色斗争。
因此,不要感到惊讶,今天,测试是一个在很多方面引入了工具的过程,也是对测试人员思维挑战的过程。
如果我们想要快速测试一个产品,应该怎么做呢?也许你会说让工具来做吧。这给那些熟练的软件测试人员带来了巨大压力。
同时那些并不熟练的测试人员的测试就像工业化时期的橱柜工厂。诚然,在某种程度上一直存在压力。现在“持续部署”的敲响了
另一场战争的擂鼓。
我们相信熟练的认知工作不是工厂工作。那就是为什么要理解什么是测试,工具怎样支持测试。
Checking vs. Testing
基于上述理由,在快速软件测试方法论中,我们区分了机器可以做的和仅能由熟练测试人员完成的部分。我们采用一个普通的英语单词
“checking”指代工具可以做的部分。就像我们已经达成共识的区分“编程”和“编译”一样。编程是程序员做的,编译是程序员使用特定的工具做的,
尽管编译的结果也是由程序员决定的。让我们来思考一下,没人谈论自动化编程和手动编程,在编程的同时,由很多其他东西是靠工具来做的,
一旦工具也能做这些东西,那就不能再被称之为编程了。
我和Michael用了超过三年的时间去寻找一个新的关于人工验证和机器验证之间的区别的定义。
首先我们来看看测试和验证。下面是我们给出的新定义:
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.)
测试是通过探索和实验的方式(包括:质疑,学习,建模,审查,推理等)学习产品并评估产品的过程。
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”)是发展人的思维的过程。只有人类能够学习我们正在使用的词的完整意思,因为我们同时指的是隐性和显性的知识。
- “探索”(“exploration”)指的是测试天生就具有探索性。所有的测试都在进行某种程度上的探索,但也可能被某些脚本元素限定。
- “实验”(“experimentation”)指的是在进行过程中与主题的互动和观察,也包括涉及纯粹假设的“思想实验”。也说明了测试就是一门科学。
- “算法”(“algorithmic”)代表能被工具执行的可以显示表达出来的一种方法。
- “审查”(“observations”)指的是整个观察过程,而不仅是结果。
一些隐藏在定义中的东西:
- 测试包含验证,但验证不包含测试。
- 验证由工具执行而不是人,工具只能辅助测试。当然,工具的作用远不止验证。
- 我们并没有说验证必须是自动化的,但是验证是可以完全自动化的,而测试则天生是人类活动。
- 测试是开放式的调查,就像福尔摩斯破案一样,而验证是基于特定事实和规则的事实验证。
验 - 验证和确认(confirming)是不同的,验证是确认经常使用的方式(回归测试中最为典型),我们也能想像他们不用于确认(例如一套自动生成的验证随机的通过一个巨大的空间,寻找任何的不同)
我们经常遇到的问题是验证和测试被混淆了,因此我们的目标就是消除这种混淆。
在计算机科学意义上讲,断言,就是验证。但不是所有的验证都是断言。即使在有些断言中,断言之前的代码是验证的一部分,而不是断言的一部分。
这些定义并非道德批判。我们并不认为验证是一件坏事。正好相反,验证是非常重要的。我们主张好的验证是在计算机测试过程的上下文中发生。也就是说验证也是一种测试的策略。
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.
人工/机器验证是人类和机器交互的情况下搜集观察结果和使用规则的验证过程。
如需转载,请注明出处,这是对他人劳动成果的尊重~
Testing and Checking Refined的更多相关文章
- 如何交叉编译开源库-->编译c-ares库从失败到成功的过程[ocean]
编译c-ares库从失败到成功的过程c-ares-master: apt-get install libtool ####https://github.com/c-ares/c-ares ==== ...
- 将luarocks整合进openresty
缘由 随着功能需求的深入, openresty领域的包已经不够用了, 需要lua领域本身累积的库, 也就是luarocks. 本文讲解了windows 10桌面和ubuntu server两套系统的方 ...
- Moq/moq4
moq The most popular and friendly mocking framework for .NET var mock = new Mock<ILoveThisFramewo ...
- Penetration Testing、Security Testing、Automation Testing
相关学习资料 http://www.cnblogs.com/LittleHann/p/3823513.html http://www.cnblogs.com/LittleHann/p/3828927. ...
- C/C++ unit testing tools (39 found)---reference
http://www.opensourcetesting.org/unit_c.php API Sanity AutoTest Description: An automatic generator ...
- Unit Testing PowerShell Code with Pester
Summary: Guest blogger, Dave Wyatt, discusses using Pester to analyze small pieces of Windows PowerS ...
- tsung: an open-source multi-protocol distributed load testing tool
ROPERTIES::type: KnowledgeBase_Cloud:END: 开源.多协议.分布式的压力测试工具 Item Summary tsung-recorder start 通过p ...
- 读书笔记-Software Testing(By Ron Patton)
Software Testing Part I:The Big Picture 1.Software Testing Background Bug's formal definition 1.The ...
- HTML <canvas> testing with Selenium and OpenCV
from: https://www.linkedin.com/pulse/html-canvas-testing-selenium-opencv-maciej-kusz Since HTML < ...
随机推荐
- 剑指offer系列59---寻找丑数
[题目]把只包含因子2.3和5的数称作丑数(Ugly Number). * 例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 解法一 ...
- bzoj4637: 期望
Description 在米国有一所大学,名叫万国歌剧与信息大学(UniversalOperaandInformaticasUniversity).简称UOI大学.UO I大学的建筑与道路分布很有趣, ...
- Java事务处理全解析(一)——Java事务处理的基本问题
Java中的事务处理有多简单?在使用EJB时,事务在我们几乎察觉不到的情况下发挥着作用:而在使用Spring时,也只需要配置一个TransactionManager,然后在需要事务的方法上加上Tran ...
- MVC之Razor语法
Razor是MVC3中才有的新的视图引擎.我们知道,在ASP.NET中,ASPX的视图引擎依靠<%和%>来调用C#指令.而MVC3以后有了一套新的使用@标记的Razor语法,使用起来更灵活 ...
- [HTMLDOM]删除已有的 HTML 元素
摘自www.w3school.com:http://www.w3school.com.cn/htmldom/dom_elements.asp如需删除 HTML 元素,您必须清楚该元素的父元素: < ...
- php命名空间学习
在一个命名空间中,当 PHP 遇到一个非限定的类.函数或常量名称时,它使用不同的优先策略来解析该名称. 1.类名称总是解析到当前命名空间中的名称.因此在访问系统内部或不包含在命名空间中的类名称时,必须 ...
- HttpClient和HttpURLConnection整合汇总对比
性能 1.HttpUrlConnection直接支持GZIP压缩:HttpClient也支持,但要自己写代码处理. 2.HttpUrlConnection直接支持系统级连接池,即打开的连接不会直接关闭 ...
- 树莓派,使用opencv调用自带的摄像头
OpenCV&Pi Cam – Step 1 : Install It’s quite easy to install your new Pi Camera. Installation pro ...
- Yii2.0高级框架数据库增删改查的一些操作
yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2.0高级框架数据库增删改查的一些操作 --------------------------- ...
- quartz定时任务时间设置描述
这些星号由左到右按顺序代表 : * * * * * * * 格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 1 秒 是 0-59 , ...