探索性測(cè)試和手工測(cè)試的比較和分析
最近看了不少有關(guān)探索性測(cè)試的討論和觀點(diǎn),老實(shí)說越看越糊涂。所以忍不住吐槽一下,在這里和大家討論一下探索性測(cè)試。希望對(duì)于想學(xué)習(xí)和嘗試探索性測(cè)試的朋友有所幫助澄清,或者是更加糊涂,^_^。
探索性測(cè)試有很多很多的定義:
百度百科的定義:“同時(shí)設(shè)計(jì)測(cè)試和執(zhí)行測(cè)試”。 嗯。。什么意思?
Cem 老人家的正式定義:“a style of software testing that emphasizes the personal freedom and responsibility of the individual tester to continually optimize the quality of his/her work by treating test-related learning, test design, test execution, and test result interpretation as mutually supportive activities that run in parallel throughout the project”。啊。。 糊涂了。。。
有人說:“手工測(cè)試就是探索性測(cè)試”。 更糊涂了。。。
又有人說:“探索性測(cè)試就是一遍探索一遍測(cè)試”。 徹底糊涂了。。。。
。。。。。
那么探索性測(cè)試到底是啥玩意???
我們先來看一個(gè)例子吧。很多人都玩過猜數(shù)字的游戲吧。我心里想一個(gè)數(shù)字,你來猜。你可以問任何問題,我回答“是”還是“不是”。然后你通過不斷問問題和我的回答來最終猜到我心想的數(shù)字。在猜對(duì)的情況下問的問題越少得分越高。比如,我心里想了一個(gè)數(shù)字。你可以問“大于零?”,我說“是”。你現(xiàn)在知道是正數(shù)了,你然后問“小于100?”,我說“是”。你現(xiàn)在知道是小于100的正數(shù),你然后問“小于50?”,我說“不是”。你現(xiàn)在知道是介于50和100間的數(shù)。你繼續(xù)再問幾次后因該就能猜對(duì)了。
在這個(gè)簡(jiǎn)單的游戲中有兩個(gè)策略至關(guān)重要:
1.你要根據(jù)前面問題的答案來分析和設(shè)計(jì)下一個(gè)問題。第一個(gè)問題可能不著邊,但是第二個(gè)問題會(huì)讓你跟接近你想要的答案。第三個(gè)會(huì)更加靠近,以此類推。
2.僅僅根??前面問題的答案來設(shè)計(jì)下一個(gè)問題可以最終幫你猜對(duì)數(shù)字,但是要想用最少的問題來猜對(duì)數(shù)字不僅要根據(jù)前面問題的答案,而且需要對(duì)問題本身其它知識(shí)加以綜合運(yùn)用使用其它策略和技術(shù)。比如在知道是小于100的正數(shù)后,你可以使用binary search,最多猜6次就可以猜對(duì);如果你不知道binary search,你可以猜是否小于90?小于80?小于70?… 猜上十幾次也可以猜對(duì);或者猜是否小于99?小于98?小于97?… 猜上幾十次也可以猜對(duì)。所以采用不同策略直接決定你猜對(duì)的速度。
所以兩個(gè)關(guān)鍵因素:前面問題的答案+有效的策略。
探索性測(cè)試和猜數(shù)字游戲完全一樣。在這里要猜的數(shù)字就是你要找的bug。你問的問題就是你做的測(cè)試,每個(gè)問題的答案就是你測(cè)試過程中產(chǎn)品的輸出。第一輪你只有一個(gè)非常模糊的范圍比如測(cè)試某個(gè)模塊的某個(gè)功能。在你測(cè)試的時(shí)候通過觀察產(chǎn)品的反應(yīng)和輸出來判斷分析下一步做什么會(huì)發(fā)現(xiàn)bug。當(dāng)然實(shí)際測(cè)試中不會(huì)像猜數(shù)字那樣直接和簡(jiǎn)單。
下面我們來看一下一個(gè)真實(shí)的測(cè)試?yán)?。有一次我在測(cè)試一個(gè)用戶界面的錄入頁(yè)面。用戶可以輸入比如姓名,年齡,等等很多信息,最后系統(tǒng)根據(jù)輸入的內(nèi)容處理保存到數(shù)據(jù)庫(kù)中。當(dāng)然我對(duì)每一個(gè)輸入框都會(huì)嘗試不同的數(shù)據(jù)比如空值,很長(zhǎng)的字符串,空格等等,系統(tǒng)都沒有問題。但是我注意到每次保存的時(shí)候系統(tǒng)都會(huì)生成一個(gè)本地文件,該文件的名字是其中一個(gè)輸入框的我的輸入。該輸入框的唯一限制就是不可以為空不可以超過255個(gè)字符。我想到文件名字中不可以有斜杠“”,于是我就在該輸入框中如入“abcd”,它通過了輸入校驗(yàn),但是保存的時(shí)候系統(tǒng)就崩潰了。這就是探索性測(cè)試一個(gè)非常典型的例子,通過觀察分析上一次測(cè)試的產(chǎn)品反應(yīng)和輸出來判斷系統(tǒng)會(huì)有問題的地方,然后設(shè)計(jì)調(diào)整步驟和測(cè)試數(shù)據(jù)反復(fù)嘗試直到完全驗(yàn)證模塊沒有問題或找到bug.
探索性測(cè)試和手工測(cè)試的區(qū)別:手工測(cè)試通常是指完全按照預(yù)先設(shè)計(jì)好的步驟一步一步人工測(cè)試直到驗(yàn)證了所要驗(yàn)證的功能。如果結(jié)果和預(yù)期結(jié)果一致,則驗(yàn)證通過;如果不一致,則是bug.可以看出手工測(cè)試過程單調(diào)沒有思考沒有變通。在上面的猜數(shù)字的游戲中你明明已經(jīng)知道是正數(shù),你還在按照游戲開始前設(shè)計(jì)的步驟問大于-100?大于-90?。。。。當(dāng)然現(xiàn)實(shí)生活中沒有這樣的傻子,在你“手工”測(cè)試的時(shí)候你或多或少已經(jīng)使用“探索性”了,只不過你沒有意識(shí)到罷了。所以很多人誤認(rèn)為探索性測(cè)試是個(gè)時(shí)髦新測(cè)試技術(shù),研究了半天又不知道到底新在那里和自己一致做的有什么不同?;蛘呋腥淮笪蛟瓉碜约阂呀?jīng)探索了很多年了。但是探索性測(cè)試有效率高和效率低之分,所以有人干脆就把效率高ET的才叫ET, 效率低的ET叫手工測(cè)試。這也是讓人糊涂的原因之一吧。
測(cè)試自動(dòng)化就是把手工測(cè)試的每個(gè)步驟有測(cè)試自動(dòng)化工具來完成。好處是不用人做了,缺點(diǎn)是測(cè)試過程中仍然沒有思考沒有變通。
Ad-hoc測(cè)試(隨機(jī)測(cè)試):沒有預(yù)先設(shè)計(jì)好的步驟,也沒有明確目標(biāo),也沒有策略。在上面猜數(shù)字的游戲中你明明知道是正數(shù),你還在東一榔頭,西一棒槌的亂猜等于100?等于-100?等于0?。。。當(dāng)然也有可能被你一不小心蒙對(duì)了。
探索性測(cè)試和測(cè)試自動(dòng)化各有各的優(yōu)缺點(diǎn)。至于什么時(shí)候開始測(cè)試自動(dòng)化,什么時(shí)候開始ET,先測(cè)試自動(dòng)化后ET,還是先ET后測(cè)試自動(dòng)化需要看項(xiàng)目產(chǎn)品具體情況了。沒有絕對(duì)對(duì)錯(cuò),以盡早發(fā)現(xiàn)bug,發(fā)現(xiàn)更多的的bug為宗旨。另外既然ET和測(cè)試自動(dòng)化的各自優(yōu)缺點(diǎn),微軟有些組最近兩年在嘗試“探索性測(cè)試自動(dòng)化”的方式來把探索性測(cè)試和測(cè)試自動(dòng)化相結(jié)合,充分發(fā)揮各自的優(yōu)點(diǎn)??吹竭@里你可能要恨我了,我剛學(xué)會(huì)測(cè)試自動(dòng)化,你又提倡ET了;我剛搞清楚ET,你又開始提倡探索性測(cè)試自動(dòng)化了。。。呵呵,人類發(fā)展過程就是通過社會(huì)分工,揚(yáng)長(zhǎng)避短。專注于做自己擅長(zhǎng)的事情,把自己不擅長(zhǎng)做的事情交給擅長(zhǎng)的人去做。社會(huì)發(fā)展是如此,云計(jì)算是如此,測(cè)試也是如此。有人說過:“The computer is incredibly fast, accurate, and stupid (test automation). Man is unbelievably slow, inaccurate, and brilliant (exploratory test). The marriage of the two is a force beyond calculation?!?/P>
其實(shí)我們可以看到探索性測(cè)試入門容易或者你已經(jīng)在做了多年了,難得是有效地探索性測(cè)試,或者做效率高的ET(否則被別人不屑為手工測(cè)試了J)。
評(píng)論