手動測試與自動化測試的選擇

在聊手動測試與自動化測試的選擇之前,先聊聊手動測試和自動化測試的優缺點和適用場景。

手動測試
手動測試是指測試人員手動操作軟體應用程式,確認使用起來一切安好、一切符合規格和預期。

優點
  • 以人類的角度使用一個軟體產品
    畢竟產品最終就是要給人使用,判斷這個軟體應用的功能、流程設計是不是直覺、易懂、美觀等等。而且也能很輕易的發現介面上的問題,比方跑版、點了之後乍看好像沒有反應等。
  • 即時的適應變化
    在敏捷開發中,一個還在開發甚至是設計中的軟體功能就可能需要測試參與了,其中可能有多次的大改,自動化在這時候就是完全不適合的狀況。
  • 進行探索性測試
    發掘一些被規格書遺漏掉的部分、特殊的使用情境、一些很清奇的操作、在一些原本簡單但越來越複雜的軟體系統中,嘗試各種操作的交互。
缺點
  • 當軟體功能穩定時,每次都以手動來執行相同的測試,較耗費人力、時間。
  • 在測試次數極為頻繁、時程緊迫的狀況下,測試人員容易因為精神上的疲倦而導致錯誤和盲點,導致測試結果可能不可靠。
  • 測試速度仰賴測試人員的熟練度。如果功能交給其他不熟悉的人測試,時間上可能會有巨大的差異。
適合的場景
  • 探索性測試 (Exploratory Testing):發掘一些沒有明確定義在規格書上的行為,一些特殊場景下可能沒考慮到的問題。
  • 可用性/易用性測試 (Usability Testing):對於界面是否直覺、美觀,文字大小、排版、顏色、聲音等測試。
  • 臨時/隨機測試 (Ad-hoc Testing)
  • 小型的專案 - 可能沒有自動化的時間及預算。
  • 新的功能 - 功能還在發展初期,會經常變化等。
  • 頻繁更動的功能 - 雖然不是發展初期的功能,但還是可能時常大幅更動。
  • 不穩定的功能 - 可能因為測試環境資源不足、第三方服務(理想上這要做 mock)等問題,而時好時壞(多嘗試幾次可能成功或不成功)的功能。
接著來聊聊自動化。 

自動化測試
自動化測試通常是指相對於手動測試,透過程式、工具來執行預先定義好的測試步驟。目的同上,為了確認一切符合預期。

優點
  • 準確、一致的執行測試步驟
    不會遺漏任一瑣碎的步驟,在被自動化涵蓋的部分,有任何非預期的細微改動都能夠發現。
  • 能大量的重複執行、不間斷的執行
    如果一天之內有多次要確認操作行為都和之前一樣的改動,自動測試能穩定的執行,確保一切如常,沒有意外的影響。
  • 相對可靠的結果。
缺點
  • 初期建置的成本非常高。
  • 維護的成本容易被低估。
  • 靈活性低,也難以檢察可用性問題。
適合的場景
  • 回歸測試:已經穩定的軟體專案,每次更新需要執行所有過往的測試,來確認既有的功能都沒有問題。
  • 大型專案:從長遠來看,預計會不斷執行相同測試案例的專案。而不是demo性質,展示一次就塵封的專案。
  • 需要大量重複執行的測試:或許不用回歸測試,之後也可能不再維護,但如果短期內要多次頻繁執行,自動化測試也很適合。 
總結
測試的最終目的是要在有限的時程中,盡可能確認程式的行為符合預期(或哪裡不符合預期)。

在迭代快速的功能、界面或操作流程頻繁更動的專案中,更適合能夠靈活適應的手動測試;自動化在這樣的場景下會需要頻繁的修改測試腳本,容易投入不符合效益的人力去開發及維護,這也可能讓原先適合手動測試來發掘問題的這個時機被耽誤。

而在已經穩定的功能需要大量重複執行一致的測試時,自動化會是首選,能節省人力去執行大量重複測試的時間,並且自動化測試的執行時間較容易預估,且能得到準確的結果。

手動測試和自動化測試是相輔相成的。
兩者都有各自適合的情境,要用在對的時機才能發揮最大的效益。

留言

這個網誌中的熱門文章

殺蟲劑悖論 pesticide paradox