Automated Testing:A Silver Bullet?

 


譯注:「美國人深信月圓之夜狼人出沒。殺死狼人的唯一方法是,以銀製的子彈貫穿它的心臟。所以,There is no silver bullet 的意思是:沒有致命、有效、一擊中的的方法。」(感謝 Jeff 指正、Areca Chen 提供典故!)

一般在提到自動化測試時,通常會有下列的迷失:

  • 我們可以將所有的測試自動化
  • 自動化測試可以提高生產力,讓我們以更少的人力完成所有的測試
  • 測試自動化很簡單( 通常為 capture/play ),所以我們不需要任何教育訓練
  • 測試自動化可以減輕我們的工作負擔
  • 我們不需要作測試計劃就可以開始自動測試
  • 自動化測試會使原本的測試人員變成多餘的
  • 我們不需要花費時間在設計測試個案了
為了要釐清上述的迷失,就必須了解『什麼是自動化測試?』以及『自動化測試到底可以幫您作什麼?』,當您對自動化測試有一定程度的了解之後,才能真正發揮自動化測試的好處。
自動化測試不是銀質子彈 ( Silver Bullet )?
自動化測試 - 或者說是實施自動化測試的策略與工具 - 只是測試人員工具箱 ( toolbox ) 中的一把大榔頭,在這裡我特別強調自動化測試只是工具箱中的工具,而避免提及用自動化測試來取代人工測試,因為人工測試是無法取代的。當然毫無疑問的自動化測試是很有威力的工具,只要您運用得當,工具也會為您帶來極大的好處,關鍵在於何時 ( when ) 以及如何 ( how ) 使用它。
我們有足夠的時間作完整的測試嗎?
到底我們有沒有足夠的時間可以作完整的測試?我想答案是"沒有"。因為有太多狀況要測試,例如不同的資料、平台、作業系統、設定等等,而實際的情形是,隨著交貨的時限越來越接近,分配給測試的時間總是第一優先被壓縮掉,結果專案經理與測試人員,大量刪減測試個案,甚至到最後已經刪減過的測試計劃,還是沒有足夠的時間可以完成所有測試,然後,軟體就出貨了。

有多少的軟體是經過完整的測試才出貨的?很多團隊是以下列的條件來判斷是否該出貨了:
  • 我們是否還有時間?
  • 我們是否還有預算?
  • 我們是否還有資源?
  • 我們是否還有可樂與比薩?
由於測試的工作被任意刪減,開發團隊完全不知道交付出去的軟體品質到底如何 ( 通常是品質低落 ),而最後的結果是需要花更多的成本去解決問題。當開發團隊面對這樣子兩難 ( 時程與品質 ) 的處境時,自動化測試能不能幫我們解決這樣的問題呢?讓我們繼續往下探討吧。
自動化測試可以幫助我們作什麼?
在您計劃開始導入自動化測試之前,您應該清楚瞭解自動化測試的定義,以下是一些常聽到對自動化測試的描述:
  • 在測試時完全不需要人去介入
  • 錄製測試腳本 ( script )
  • 測試工具
  • 不知道
有時候人們在解釋自動化測試時,常常只注意到測試腳本 ( script ) 的錄製或撰寫,這樣的看法真的是太小看自動化測試了。以下對自動化測試的定義是來自 Quality Engineering 社群的定義:

自動化測試就是利用策略、工具以及產出等,減少人工介入非技術性 ( unskilled )、重複性 ( repetitive )、冗長 ( redundant ) 的測試活動。

根據這樣的定義,以下列出一些自動化測試的方法:
方法 說明 範例
範本 ( Template ) 文件的範本,通常含版面格式與指引方針 ( Guideline ) 如測試個案或測試計劃範本,通常是由文件範本或是工具所產生
測試腳本 ( Scripts ) 透過可執行的程式碼,執行測試的動作,程式碼可能是工具產生或是手動撰寫 如 Visual Test scripts、Rational Robot scripts 等
映像檔 ( Images ) 透過壓縮檔案或備份方式,快速建置或回覆測試環境 如用 Ghost 備份測試環境
巨集 ( Macros ) 以巨集的方式執行測試相關工作 如透過 Excel 巨集產生或管理測試資料
批次檔 ( Batch ) 以作業系統批次檔方式執行測試相關工作 如使用 DOS 指令安裝程式或設定選項

從上面的列表,相信您對於何謂自動化測試一定更有感覺了!現在您應該能定義自動化測試對於您與您的測試團隊所代表的意義。然後依照您的定義,您可以建立自動化測試的指導方針 ( guidelines ),讓測試團隊清楚知道哪些測試工作可以自動化。
建立自動化測試的指引方針 ( Guidelines )
您可以依照下列的建議,建立自動化測試指引方針或策略:

1. 定義哪些測試適合自動化測試
  • 以下的工作適合自動化:
    • 冗長的工作
    • 自動化需重複執行、無聊、且常會讓人犯錯的工作
    • 從 well-develope 或 well-understood 的使用案例開始
    • 對於還處於經常變動的系統,從較穩定的部分開始自動化
  • 使用 Data-Driven 技術測試,提高測試涵蓋率的廣度與深度
  • 對整個測試團隊,不需要每個人都作自動化測試的工作,指派少數的專家負責自動化的工作
  • 100% 的自動化測試是不實際的,人工測試還是不可或缺的基礎
2. 計劃作更多的測試
  • 自動化測試讓測試團隊有更多的時間去做更多測試的工作
    • 更多勘查式 ( exploratory ) 的測試
    • 更多組態 ( configuration ) 的測試
    • 更多自動化測試
    • 更多人工測試,特別是針對高風險的部分
  • 費心的規劃測試,哪些要人工測試,哪些要自動化測試,不要嘗試自動化所有的測試
  • 設計所有測試並寫成文件,以確保自動化測試不能執行時,馬上可以人工測試取代
3. 將自動化測試當成是一項投資
  • 訓練自動化測試工具的使用者
  • 建立可重複使用的測試程式碼
  • 將測試切割地更小更模組化以方便日後維護
  • 測試程式碼也需要建立註解或說明文件
  • 記得備份
  • 測試程式碼也需要程式碼控管 ( source control )
  • 瞭解自動化測試也是一種軟體開發的過程,雖然通常是透過工具產生程式碼
4. 以漸進式的方式導入自動化測試
  • 不要妄想在短時間之內就能將所有測試自動化,實行初期速度可以放慢一點,以獲取經驗為主要目的
  • 從小的專案開始導入自動化測試,並且以漸進的方式實行
自動化測試還可以為我們作些什麼?
雖然自動化測試在導入的初期,需要投資在計劃與訓練,但是這些投資日後還是會有所回報的,自動化測試可以讓您:
  • 提昇軟體品質 - 因為您可以在更短的時間,以更少的資源,作更多的測試
  • 提高測試涵蓋率
  • 更多時間投入下列測試活動
    • 細部的規劃
    • 仔細的設計測試個案
    • 建立更複雜的測試
    • 不是更少,而是更多的人工測試
現在您已經瞭解『什麼是自動化測試?』以及『自動化測試到底可以幫您作什麼?』,希望您可以運用這些知識,確保軟體能在通過更多以及更好的測試後才出貨。雖然自動化測試並不是銀質子彈 ( silver bullet ),但是自動化測試確實是很好的工具,只要您能夠將其運用在適當的工作,相信您會得到不錯的回報。
參考資料
原文:The Rational Edge -June 2001- Automated Testing: A Silver Bullet?
Cem Kane's Web site
 

 


Copyright © 2003 by oldsidney
◎本頁最後更新日期:05/20/2004 23:44:59