選擇一些能夠引起底層數據運算的輸入域,多次重復輸入相同的值,觀察結果是否相同。
對每一個輸出域,思考其在不同情況下出現的不同結果顯示,然后將這些情況分別應用到測試中,觀察輸出域是否和預料相同。
對每一個輸出域,思考哪些結果是不能或者不應該出現的,然后想辦法觸發這些非法的結果,看看是否能夠實現。
嘗試觸發遞歸式的函數調用,如文檔中嵌套自身文檔,超鏈接中嵌套自身鏈接,類似的錯誤。
嘗試觸發數據的存儲溢出,觀察由此導致的結果。
看到上面的建議,我們不會認為這是在做隨機測試。針對用戶界面的探索式測試顯得很有“條理”,雖然隨機測試也可能會涉及到上面提到的幾條建議,但這是“隨機”的,測試工程師無法控制測試覆蓋的范圍。探索式測試則不同,它會存在文字記錄,會做覆蓋率分析,比隨機測試更為有序和可控。
誤區4:探索式測試階段在一般性測試之后。
這是一個普遍的誤解,總有人認為探索式測試是一種后期測試,當一般性測試都結束之后,再搬出探索式測試來找找漏洞。這里再強調一遍,探索式測試是一種測試思想和方法,不是測試技術,它可以應用于廣泛的一般性測試之中。正因為如此,在敏捷世界中,探索式測試和一般性測試所處的位置是一樣的,沒有前后之分,只要測試工程師需要探索式測試,那么它就可以存在。
以一個迭代周期為例,在計劃階段,測試工程師通過了解用戶的需求和用戶故事的制定和優先級評定來審視當前的測試計劃和流程,挖掘現有計劃中未覆蓋的重要測試點,這也是探索式測試的組成部分。在正式開發階段,測試工程師在測試過程中與開發人員不斷的交流,從中尋找潛在的產品問題,有時候開發人員的一句提醒就可以成為測試的重要線索,而探索式測試就是要凸顯這些發現問題的機會。在收尾階段,測試工程師會總結此輪迭代的缺陷列表和分析,在回顧過程中可能發現其他的問題,為下一次的探索式測試做準備。
如果探索式測試位于迭代的后期,那么測試工程師就會錯失計劃、開發等階段深入參與項目的機會,或者說即使深入參與了項目,但是如果沒有探索式測試的意識貫穿于其中,那么發現問題的機會往往會從身邊溜走,而這是測試工程師最忌諱的事情。所以,如果你需要探索式測試,那么就把這種思想應用于測試的各個階段,盡可能最大化它的價值。
誤區5:探索式測試需要老手來做。
探索式測試看起來很神秘、很酷,所以大家可能有些望而生畏,覺得是一個很高深的東西,懷疑自己是否適合做探索式測試,導致的結果就是在一個測試團隊里可能會把探索式測試重擔交給富有經驗的老手來做。這種做法正確嗎?我們不妨先來分析一下新手與老手的主要特點。
新手缺少測試經驗,沒有經過系統的學習和思維訓練, 喜歡按照指令來做事情,不過接受新事物能力強,偶爾會因為不懂狀況而搞出一些“小意外”;老手則是久經沙場,對測試技術和方法有充分的理解,喜歡有所突破,不過慣性思維影響了接受新鮮事物的意識。這里所說的特點是筆者在日常工作中觀察的結果。分析完特點,再回頭看看探索式測試,它是一種啟發式的思維方式,我們需要創新,需要跳出常規測試的條條框框,需要找到“意外”的問題。對照新手、老手的特點,探索式測試更適合誰呢?這不是一個是非問題,新手、老手各有其優點:新手能夠快速打開自己的創新思路,老手可以快速深入產品的內部機理。所以,不論是新手還是老手,都不要為自己貼上標簽,探索式測試工程師需要一定的技能,具備了這些特質,你就可以出色地完成探索式測試,敏捷測試專家Lisa Crispin總結了必要的技能:
小心的觀察者:觀察不正常和不期望的結果,并對正確性的假定很小心,能夠細微的觀察軟件特征或模式。
認真的思考者:在運行中檢查測試并將其改到非預期的方向上,能夠解釋尋找缺陷的邏輯并提供清晰的測試狀態。
系統的叛逆者:思維嚴密、系統化,同時還要具有多樣化的觀點。
資源的挖掘者:探索測試人員應該發掘更多他們可以使用的工具、技術、測試數據、朋友和信息源。
總結
探索式測試還處于摸索和發展階段,有關對它的認識還在不斷的演變當中,探索式測試作為一種測試方法,值得測試工程師應用于廣泛的常規測試中,它需要建立在對產品深入了解的基礎上,不是黑盒測試,它雖是啟發式的思維方式,但是又具有條理性、可控性,探索式測試需要貫穿于整個測試周期中,以發揮其價值。探索式測試的適合人員不是以新手老手為衡量標準,必要的技能才是考量的要素。
原文轉自:http://www.anti-gravitydesign.com