Testing and Checking Refined

仍是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」)是發展人的思惟的過程。只有人類可以學習咱們正在使用的詞的完整意思,由於咱們同時指的是隱性和顯性的知識。

  • 「探索」(「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. 
人工/機器驗證是人類和機器交互的狀況下蒐集觀察結果和使用規則的驗證過程。

 

如需轉載,請註明出處,這是對他人勞動成果的尊重~

相關文章
相關標籤/搜索