對于測試人員,軟件測試是一個持續學習并實踐的過程。他需要學習的內容可能包括:
行業知識:為什么需要這個軟件?軟件如何幫助使用它的人和團體去獲得行業優勢?
用戶角色:目標用戶是誰?他們有什么特點,有什么期望?軟件如何幫助他們去獲得個人成就?
軟件產品:產品是一種解決方案。它解決了行業和用戶所面臨的問題嗎?
計算平臺:只有深刻理解軟件所依賴的計算平臺(如操作系統、中間件、網絡協議等),才能更好地測試。
開發技能:理解項目所使用的具體技術,知曉典型的技術缺陷,具備測試開發能力。
測試方法:針對當前項目,選擇合適的測試方法,并能夠熟練地應用。
程序缺陷:研究當前(和相關)項目的缺陷,提煉錯誤模式(Pattern),制定緩解或預防方案。
開發團隊:語境(context)決定策略和實踐。在一起工作的人,是所有項目語境中最重要的組成部分。
測試者不需要在項目之初就掌握所有知識,他可以通過每天的工作去逐步理解用戶、項目、技術和團隊。更重要的是,他要在每天的工作中實踐所學內容:規劃測試方案,創建并執行測試用例,分析測試結果,編寫測試報告。實踐就是練習,是“學”的自然延伸。知行合一才構成“學習”的完整內核。
如果學習非常重要,那么如何才能高效地學習呢?敏捷大師Andy Hunt在《Pragmatic Thinking and Learning》中指出“一種高效的學習環境應該允許你安全地做三件事情:探索、創造和應用”。
探索就是在陌生的環境中玩(play)。你需要自由地探索才能學習。我們不僅僅接受信息,而是親自探索和構建思維模型。
玩引入了一種新奇的感覺,也就是樂趣。用一種好玩的方式學習新資料或者解決問題,可以讓這個過程變得更讓人享受,也讓學習變得更容易。為了更好地學習,請更好的玩。
你需要自由地創造——不介意自己的創造沒有成功。通過構造來學習,而不是通過學習來構造。(這是“原型”、“曳光彈”、持續集成等方法獲得成功的原因之一)
你需要在日常實踐中應用到你學到的東西。你持續使用和實踐的技能會(在腦皮層競爭中)占據統治地位,大腦會為它們提供更多方便。
這種探索應該相對沒有風險,因為你肯定不想因擔心害怕而止住探索的腳步。(安全有助于)更好地利用反饋,讓失敗也變得有意義。
雖然Andy討論的是廣義的學習與探索,但是他的話解釋了探索式測試的成功之道。正如Cem Kaner所言:
探索式測試強調測試者的自由和責任,為了持續優化其工作的價值,將測試相關學習、測試設計、測試執行和測試結果解讀,作為相互支持的活動,在整個項目過程中并行地執行。
Exploratory software testing emphasizes the personal freedom and responsibility of the individual tester to continually optimize the value of 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.
探索式測試在本質上鼓勵測試人員去自由地探索、創造和應用。
《軟件測試經驗與教訓》:“探索是帶著使命在某個空間中有目的的漫游,但沒有預先確定的路線。探索包括不斷學習和實踐”。
在探索式測試中,測試者創造出一切有助于學習和實踐的數據和工具。它們包括輸入數據、結果檢查腳本、數據分析報告、業務流程圖表等。
探索式測試者持續應用他所學到的知識。所謂“學而時習之,不亦說乎”,探索式測試將學習與應用作為相互支持的活動逐步展開,為測試者的知識提升提供了平滑的學習曲線。
探索式測試是一項富有智力挑戰的活動,充滿了樂趣。如果你沒有感到智力的快感,那么一定是哪里做錯了。
此外,Andy也指出,為了鼓勵自由的探索,我們需要“安全的”環境。
測試者應該擁有獨立且隔離的測試環境,他的測試活動所照成的破壞性后果不會影響團隊的其他成員。
當測試者破壞了他的測試環境,他可以快速地創建新測試環境。虛擬化技術可以提供多樣的軟、硬件和網絡配置。版本管理系統、自動化構建和全自動安裝有助于部署特定版本的軟件。
在測試中使用產品數據甚至產品系統是有很有幫助的。這時,應該將測試環境置于某種沙箱(sand-box)中,使測試導致的產品崩潰或數據損壞不會被沙箱以外的系統所感知。
測試環境中內建豐富的開發、測試、調試、監控工具。它們是探索所必需的指南針、GPS、電筒、繩索、背包和帳篷。有經驗的探險家不會空手上路。
最后,值得強調的是,所謂“探索”和“學習”都是隱喻(metaphor)。它們是指南針,不是規程手冊。Steve McConnell在《代碼大全》中用了整整第2章來討論“用隱喻來更充分地理解軟件開發”,很值得一讀。通過豐富的案例和分析,他很好地論述了隱喻的威力和范圍:
與其說一個軟件隱喻是一張路線圖,還不如說它是一盞探照燈。它不會告訴你到哪里去尋找答案,而是告訴你該如何尋找答案。隱喻的作用更像啟發性方法,而不是算法。
A software metaphor is more like a searchlight than a road map. It doesn't tell you where to find the answer; it tells you how to look for it. A metaphor serves more as a heuristic than it does as an algorithm.
原文轉自:http://www.cnblogs.com/liangshi/archive/2011/01/16/1936689.html