學習的一個重要成果是成為更優秀的測試人員。他們可以根據項目語境,選擇合適的流程、技術和工具來高效地測試,以推動軟件質量的提高。
既然學習非常重要,那么如何才能高效地學習呢?軟件專家Andrew Hunt指出:“一種高效的學習環境應該允許你安全地做三件事情:探索、創造和應用。”[Hunt08] Andrew的解釋如下:
探索就是在陌生的環境中玩(Play)。你需要自由地探索才能學習。我們不僅僅接受信息,而是親自探索和構建思維模型。玩引入了一種新奇的感覺,也就是樂趣。用一種好玩的方式學習新資料或者解決問題,可以讓這個過程變得更讓人享受,也讓學習變得更容易。為了更好地學習,請更好地玩。
你需要自由地創造——不介意自己的創造沒有成功。通過構造來學習,而不是通過學習來構造。這是“原型”、“曳光彈”、持續集成等方法獲得成功的原因之一。(曳光彈是Andrew Hunt和David Thomas在《程序員修煉之道》中提出的開發方法,通過快速實現系統的部分功能以獲得即時反饋。曳光彈與原型制作都可以快速獲得反饋,其主要差別是,原型制作生成實驗性且最終被拋棄的代碼,曳光彈生成簡約卻完整的代碼,并且構成了最終系統的一部分。)
你需要在日常實踐中應用到你學到的東西。你持續使用和實踐的技能會在腦皮層競爭中占據統治地位,大腦會為它們提供更多方便。
這種探索應該相對沒有風險,因為你肯定不想因擔心害怕而止住探索的腳步。安全有助于更好地利用反饋,讓失敗也變得有意義。
雖然Andrew討論的是廣義的學習與探索,但是他的話解釋了探索式測試的成功之道:探索式測試在本質上鼓勵測試人員去自由地探索、創造和應用。
探索是帶著使命在某個空間中有目的的漫游,但沒有預先確定的路線。探索包括不斷學習和實踐[Kaner01]。
探索式測試者持續應用他所學到的知識。所謂“學而時習之,不亦說乎”,探索式測試將學習與應用作為相互支持的活動逐步展開,為測試者的知識提升提供了平滑的學習曲線。
探索式測試有助于測試人員在合適的時間學習合適的內容,并立即應用,以獲得真實反饋。這提高了學習效率和效果,并降低了浪費測試資源的風險。
在探索式測試中,測試者創造出一切有助于學習和實踐的數據和工具。它們包括測試輸入數據、結果檢查腳本、數據分析報告和業務流程圖表等。
探索式測試是一項富有智力挑戰的活動,充滿了樂趣。
問:“學習”有助于獨立測試人員更好地工作與發展。從測試團隊和開發組織的角度看,探索式測試能夠提供什么幫助?
答:探索式測試有助于“機動性”,該特性在現在比以往任何時候都更重要。
隨著互聯網與Web應用席卷全球,軟件競爭比以往更加激烈。開發組織不僅要減少缺陷,還要跟蹤不斷變化的用戶需求和市場需求,在緊迫的時間約束下交付贏得用戶的產品。這要求軟件企業在業務、研發、營銷等方面均保持高機動性。其中,探索式測試可以在以下方面為產品研發提供幫助。
首先,探索式測試將許多測試決策置于更合理的時機,從而避免了浪費。在Web應用等高競爭性領域中,開發組織面臨模糊且持續變更的用戶需求。更重要的是,他們必須在一切明朗之前著手行動,因為交付的時機將在很大程度上決定市場的反應,此外真實的用戶反饋將有助于下一次更準確地交付。面對高變動性的開發過程,測試人員需要將測試設計合理地分配到整個開發周期,根據當前的開發進度和真實的測試反饋,做出恰當的測試決策。這有助于避免在信息不充分的情況下做出錯誤的決定,從而導致嚴重的浪費和返工。
其次,探索式測試不停地根據實際情況,調整測試計劃,優化測試策略,因此能夠更有針對性地測試,從而更快速地穩定(Stabilize)產品。探索式測試和語境驅動測試建議,測試人員總是自問:“我現在可以測試什么?應該如何測試?”這有助于測試人員更動態地審視被測試產品和測試策略,并運用多樣化的手段去探索產品。隨著對業務領域的認識不斷深入,隨著逐漸了解產品的設計和弱點,隨著對測試技術和工具的更加熟悉,測試人員會不斷調整測試策略,使得在整個產品開發過程中,重要錯誤的發現率都保持在比較高的水平[Kaner01]。而及時地發現重要錯誤能夠幫助開發組織降低風險、快速推進。
測試需要探索,而探索要要大量的思考[Kaner01]。積極思考的探索式測試是具有挑戰性的智力過程,常常需要以不確定的順序反復實施鉆研、嘗試、迂回、調整、評估等活動。好的探索式測試不會使測試更簡單,但是它會使測試更有效,從而在測試速度和缺陷發現上獲得更多的回報。
問:探索式測試是否只適用于功能性測試?
答:作為一種測試風格,探索式測試可應用于各種類型的測試。
以安全測試為例,請想象一下黑客是如何攻破軟件產品的。他們的基本方法是“錯誤猜測”:通過分析已知的安全缺陷,抽象出可利用的缺陷模型,然后開發出相應的缺陷挖掘工具。這些工具可以是黑盒工具,通過持續地輸入攻擊數據來發現缺陷;也可以是白盒工具,通過掃描(開源)源代碼來識別漏洞。他們運行工具,分析輸出中的蛛絲馬跡,一旦發現疑似缺陷,便深入探索。整個攻擊過程常常需要廣泛掃描、深入挖掘、迂回前進、反復嘗試。從安全測試的角度看,黑客都是探索式測試的絕頂高手。
相比安全測試只需“斷其一指”,性能測試需要建立被測試產品的性能模型,并考察它在不同負載下的性能指標,因此需要更多的預先設計。然而性能測試的關鍵內容:用戶的行為模式、充足的高質量測試數據和完整的性能監測指標(特別是面向業務的性能指標),是難以僅通過一次測試設計便可以獲得的。性能測試工程師需要與開發團隊緊密協作,通過閱讀、研究、實驗等手段來探索性能測試模型和技術,并逐步挖掘用戶行為、制造測試數據及建立性能指標。
問:在功能實現之前,探索式測試是不是無用武之地?
答:對于探索式測試有一個誤解,那就是探索式測試只通過運行測試以獲得知識。實際上,探索式測試者能夠也必須通過其他手段探索被測試軟件。