當筆者還是個軟件測試小白的時候,我的英國測試主管有一天操着他濃重的倫敦口音對我說過:“Vincent,你知道嗎,用例執行這種事情也許很多人都可以做。但是能將你們的測試經驗和思考能力應用到探索性測試中,並將它發揮到極致,才是一種你們價值的最大體現方式。”
主管的這番話在我當時幼小的心靈內留下的深刻的印象,從此以后對於探索性測試我便開始了孜孜不倦的研究。
探索性測試,不但對於一個軟件測試項目而言,是常規測試非常有效而且有益的補充;同時也是我們測試從業人員展示自己的技術和主觀能動性的好平台。
那么我們要怎樣去做好探索性測試,盡情的施展自己的測試才能呢?筆者想用這篇文章給大家提供一些方針和思路。
第一:探索性測試的定義
首先從定義上而言,探索性測試(Exploratory Test)是敏捷世界里的一種重要測試方法,作為一個研究性的工具,它是用戶故事測試和自動化回歸集的重要補充。它是一種經過深思熟慮的測試方式,沒有測試腳本,可以使你的測試超出各種明顯已經測試過的場景。探索測試將學習,測試設計和測試執行整合在一起,形成一種測試方法。
探索性測試重在‘探索’,他強調了我們在測試中的未知因素和我們對被測系統進行主動學習的過程。 探索是人類進步的重要步伐,正因為善於探索,哥倫布才發現了新大陸;正因為用於探索,阿波羅才登上了月球。探索性測試還強調測試設計和測試執行的同時性,這是相對於傳統軟件測試過程中嚴格的“先設計,后執行”來說的。測試人員通過測試來不斷學習被測系統,同時把學習到的關於軟件系統的更多信息通過綜合的整理和分析,創造出更多的關於測試的想法。
我們可以通過下面的圖來闡釋探索性測試:

第二:探索性測試的定義
用語言來總結的話,探索性測試可以定義為由以下過程構成:
- 明確測試范圍
- 識別被測對象的期望功能和需求
- 了解被測對象的基本性狀
- 發現被測對象的潛在不穩定區域
- 創建一個測試綱要並用它來指導測試
這里我們提到的識別,了解,發現,創建這個過程在探索性測試中可以多次循環,並且並沒有固定的順序限制。 我們可以先腦補出自己想要進行測試的點,然后再對這些點去進行探索;反之當然也可以先對系統進行探索,進而發現潛在的風險對象從而確定測試點。 探索性測試鼓勵創新和發散性思維,在探索性測試中‘跑偏’是被允許的:

當然這種跑偏是受到你的測試目標范圍,以及你當前測試綱領的限制的,否則無限跑偏的話,有限的時間就可能被投入到過於細枝末節的軟件特性方面去了。 所以我們在探索性測試中的發散思維要有一個度,發散到一定程度后還要再收斂回來。例如,當發覺在一個測試的分支路徑上已經花了很長時間也沒有找到問題的答案時,則可以考慮先放棄那個區域的探索了,因為還有一個主線的測試任務在等着你。

第三:探索性測試的常用方法
探索性測試最主要應用到我們測試理論中的設計技術就是“基於經驗的測試”和“錯誤推測法”了。 更具體一點的話,我們可以在測試中應用以下的一些思路:
- 破壞法 - 用常規手段破壞系統的正常運作進程 - 比如在提交表單的過程中刷新頁面中斷提交操作
- 極限法 - 嘗試去接觸到系統處理的極限所在 - 比如在文本處理的控件內嘗試最大輸入的可能性
- 取消法 - 測試系統能不能正確的處理用戶的取消和刪除操作 - 比如在一個手機APP打開某模塊時,按下home鍵后,APP有沒有正確處理?
- 暴力法 - 使用非常規操作,看看軟件會不會發生崩潰或異常 - 比如測試手機輸入鍵盤時,同時按下多個按鍵
- 逆向法 - 通過相反的思維來思考問題,軟件能處理異常情況嗎 - 比如我們通常都會關注一個系統的支付能不能正常工作,那么當遇到無效支付信息的處理呢?
了解了這些理論和方法,那么以后遇到你的測試主管發起探索性測試的時候,相信你就可以在團隊中脫穎而出,讓你的同僚們刮目相看了吧!
那么如果我的測試主管根本就不曾發起探索性測試呢?沒關系,你自己也可以在時間允許的情況下,使用探索性測試的技術,對你所測過的功能進行一次深層次的探索,說不定就能打開新世界的大門呢。
如果你自己就是測試的主管,還沒有意識到探索性測試的功效?接着往下看:
第四:探索性測試的益處
文章開頭我們就提到,探索性測試對於測試團隊是一種非常有益有效的補充,具體而言我們可以總結出以下的益處:
- 探索性測試可以幫助我們定位到隱藏比較深的問題 -常規測試沒有覆蓋到的深度,我們可以在探索性測試里去一探究竟
- 探索性測試可以為后續測試覆蓋的延申提供思路 - 在探索性測試中我們可以發現常規測試忽視掉的細節,從而指導我們后續對測試用例庫的維護
- 探索性測試可以加深測試人員對被測系統的了解 - 越探索越了解,越了解越想把他測個明白
- 探索性測試可以激發測試人員的積極性 - 每天都在執行用例多無聊,來一次說測就測的旅行吧
探索測試有這么多好處,但是我們也要注意他的局限性,不要陷入一些常見的誤區,比如:
- 探索性測試就是隨便測試,到處點點
- 探索性測試是要遵循一定章法並符合測試要領的
- 時間不夠,所以干脆全都做探索性測試,不寫測試用例了
- 盡管探索性測試是一種有效的測試方法,他不能替代最主體的系統測試
- 回歸測試好費勁啊,我們用探索性測試去覆蓋回歸需求吧
- 探索性測試更注重的是思考和學習,不斷發現新的問題,而版本的回歸測試,是對原有的功能的保證,為持續迭代提供質量把關。
p.s. 探索性測試一般在什么情況下測試團隊可以,也應該去做?
- 在常規測試已經進行得比較完備的情況下,進行探索性測試可以檢查測試的完整性,拓展當前測試的覆蓋度和深度。
- 在測試工作推進受阻的情況下(比如開發進度停滯),我們應該把這一段可能被浪費掉的時間利用起來,穿插進對已測功能的再次探索是一個非常好的選擇。
- 出於對現存測試設計和結果存疑的情況下,可以使用探索性測試來確認。(如果探索性測試發現大量或者嚴重問題,顯然可以證明已經完成的測試是不合理不完整的)
- 在bug驗證時,如果加入適當程度圍繞該被測功能點的探索性測試,可以及時發現可能由修復帶來的新問題,從而減輕后期大規模回歸測試的壓力。
- 在剛開始對一個模塊的測試時,如果對於被測功能認知度還不夠,不妨先做一次探索性測試。這樣有助於了解系統,並且規划和調整后續測試進程。
好了,關於探索性測試我們就探討到這,下次遇到探索性測試的機會時,去好好發揮你的測試才華吧!
-
- 軟件測試交流群:306924419 加群時請備注:博客園-Vincent
-
個人工作qq:2049427226
