探索式測試(exploratory testing)是一種自由的軟件測試風格,強調測試人員同時開展測試學習、測試設計、測試執行和測試結果評估等活動,以持續優化測試工作??紤]到它所具備的即興發揮、快速實驗、隨時調整等特征,其思維方法可以追溯到軟件開發的最初歲月。作為一個特定的技術術語,它是由測試專家Cem Kaner博士在1983年提出的,并受到語境驅動的軟件測試學派(context driven testing school)的支持。測試專家James A. Whittaker曾是Cem Kaner在佛羅里達工學院(Florida Institute of Technology)的同事,后來擔任過微軟測試架構師和Google測試總監?;谠谖④浀墓ぷ鹘洑v和積累,他撰寫了《Exploratory Software Testing》一書,進一步擴展了探索式測試的概念和方法。
探索式測試有豐富的內涵,Kaner博士用一頁幻燈片的篇幅介紹了探索式測試的核心。
首先,探索式測試是一種軟件測試風格(style),而不是一種具體的軟件測試技術(如等價類劃分、邊界值分析、組合測試等)。作為一種思維方法,探索式測試強調依據當前語境(context)選擇合適的測試技術,而不局限于特定的測試技術。雖然James A. Whittaker將他的書命名為《探索式軟件測試》,該書所提出的方法集仍舊屬于軟件測試技術(基于系統化錯誤猜測和測試隱喻),而不代表整個探索式測試。Whittaker的工作是很有意義的,本文指出它不是探索式測試的全部,是為了強調:當你和別人討論”探索式測試“時,你們得達成共識。你們是在討論一種思考方法,還是在討論這種思考方法指導下的測試技術。
然后,探索式測試強調獨立測試人員(individual tester)的個人自由和責任(personal freedom and responsibility),其目的是為了持續優化其工作的價值(value)。測試人員應該為個人和團隊負責,調動所有能量,發揮人的靈活性,在整體上持續優化個人和團隊的產出。這段描述和精益生產(lean production)、敏捷軟件開發的理念高度一致,這也是探索式測試受到敏捷團隊歡迎的原因之一。
最后,探索測試建議在整個項目過程中(throughout the project),將測試相關學習(test-related learning)、測試設計(test design)、測試執行(test execution)和測試結果解讀(test result interpretation)作為相互支持的活動(mutually supportive activities),并行地(parallel)執行。實際上,人腦難以并行地執行多項任務。探索式測試旨在將測試學習、測試設計、測試執行和測試分析做為一個循環快速地迭代,在較短的時間內(如1個小時)完成多次循環,以不斷收集反饋、調整測試、優化價值。該思路再次與敏捷軟件開發小步快跑、持續反饋的理念不謀而合。
探索式測試與即興測試(ad-hoc testing)有何區別?
探索式測試與即興測試的都強調”即興發揮“,利用直覺和經驗,快速地試驗被測試應用,并不停地調整測試策略。開發大師Andy Hunt在《Pragmatic Thinking and Learning》中指出,直覺是非顯性知識的代名詞,是大腦富(Rich)模式的杰出能力。如果我們只使用大腦的線性模式(語言可表達的顯性知識、邏輯思維),而漠視富模式的能量,我們將浪費自身的巨大潛力。
然而人是不完美的,某些直覺可能是認知偏見或錯誤。這就引出了探索式測試與即興測試的關鍵不同:探索式測試是帶著”反思“的學習和優化過程。在探索式測試中,測試人員不斷地提出假設,用測試去檢驗假設,通過解讀測試結果來證實或推翻假設。在這個過程中,測試人員不斷完善頭腦中被測試應用的模型,然后利用模型、技能、經驗去驅動進一步的測試。相比即興測試不注重測試計劃和設計,探索式測試在不停地優化測試模型和測試設計。因為測試設計和測試執行的切換速度很快,許多人誤以為探索式測試沒有測試計劃和設計。實際上,這些活動是被切分到細微的時間片中,并被反復執行。
如何實施探索式測試?
探索式測試是一種測試風格,它鼓勵測試人員依據當前語境選擇合適的測試實施方法。我個人認為SMART原則為探索式測試提供了一些很好的建議。
Specific(具體的):測試需要一個具體的目標。
Measurable(可度量的):有明確的度量可以評估目標是否達成。
Achievable(可實現的):當前的目標應該是可實現的。這潛在地要求將一個大的目標分解為多個小目標,每個小目標也是具體的、可度量的。此外,跟蹤小目標的完成情況也提供了整體進度的可度量性。
Relevant(相關的):目標要切合當前語境,符合團隊利益,且不忘企業愿景(vision)。
Time-boxed(有時間限制的):為每個目標設定一個合理的最后期限。這是幫助測試人員在固定的時間窗口(time window)中排除不相關干擾、專注工作。
依據SMART原則,測試人員可按如下描述逐步展開探索式測試。
首先,測試人員制定測試計劃。他分析被測試應用,確立若干個具體的測試任務,每個任務針對一個可能的風險。
然后,他將測試任務分解為一系列子任務,每個子任務都有明確的退出條件和時間限制。
在短暫的測試計劃之后,測試人員根據優先級選擇一個小任務,在一個固定的時間窗口中執行探索式測試。我建議時間窗口的長度是50分鐘,因為這是人腦可以專注工作的極限時間。再這段時間里,他設計測試,執行測試,評估測試結果,獲得知識,然后為了獲得新知再設計測試。
在時間窗口結束后,測試人員應該適當休息,放松思維。
隨后,他會反思當前的測試進展,并優化測試計劃。也許他會為當前任務追加一個時間窗口;也許他會再增加一個新的任務以彌補當前測試計劃的不足;也許他會精簡一些任務以反映他對測試對象的最新認知。
這時,他會更有自信地開始新一輪探索式測試。
再次重申,以上只是一種可能的探索式測試實施方法。負責任的測試人員一定會選擇他自己的方式展開測試,因為只有作為領域專家的他,才能做出最符合語境的決策。當然,集合整個團隊的能量,進行伙伴評審、頭腦風暴、結對測試等活動,有助于產生更好的測試結果。
原文轉自:http://www.anti-gravitydesign.com