自動化測試是一項“一旦開始,就需要持續投入”的工作,所以它一直是測試領域的一塊雞肋。不做吧,好像手工測試重復得讓人有些厭倦,而且手工測試時間也縮短不了。做吧,害怕投入的比回報要多。
沒實施自動化的團隊有各種各樣的困擾。有的說:“項目有太多的老代碼需要補充自動化測試腳本,補不起!”有的說:“項目開發太緊張,如果同時還要自動 化,等不起!”還有的說:“自動化測試工具太貴了!買不起!”確實,各種各樣的“傷不起”使得大量的組織在“要不要自動化”這個問題上總在了解和觀望,躊 躇不前。
我們閱讀了一些關于自動化測試ROI的文章, 發現大多都是介紹各種不同的計算方法,但來自實際的數據分享比較少。所以,2011年當我們組織想推行自動化測試的時候,為了打消大家(尤其是管理層)對 于自動化測試的投入和產出方面的疑慮,計算我們自己的自動化測試投資回報率ROI(Return on Investment)成了我們啟動時就考慮的問題。本文將分為四部分介紹我們的實踐方法和結果。
第一部分:業界計算自動化測試ROI的方法
簡言之,ROI = 收益/投入。但收益如何計算,投入包括哪些,眾說紛紜,并沒有一個定論。
在Dion Johnson的“test automation ROI”中給出了三種計算自動化測試ROI的方法。第一種方法“簡單ROI”著重從“錢”的方面去看。它考慮了工具、培訓、機器等各種費用,并把測試時間 的投入通過單位時間的工資轉化成為錢。第二種方法“效率ROI”與第一種方法不同的是從測試效率的角度,只考慮了時間投入所產生的收益,而沒有考慮其它如 購買工具方面的投入。這個方法比較適合測試人員計算收益。第三種方法“降低風險ROI”著重計算自動化測試與手工測試相比在降低風險方面的收益。它會假設 不做某種自動化測試,相關的風險一旦成為事實所帶來的損失,從而計算ROI。這個方法比較適合管理人員從整體考量自動化的收益。
那么,目前我們的團隊期望自動化測試能帶來哪些收益,尤其是哪些收益是目前不能奢望的?我們的經理愿意提供多少資源投入自動化測試呢?帶著這些問題,我們開始了自己對自動化測試ROI的定義和度量。
第二部分:我們計算自動化測試ROI的方法
在度量自動化測試的收益方面,角度很多。我們選擇的是從“多、快、好、省”四個方面去看。
更多
鑒于我們處于自動化測試的初級階段,我們打算暫時先不去追求“更多”。即我們不奢望一年之內整個項目組在一個版本里做更多的工作,因為在自動化投入初期 難以提高團隊的生產力。我們也不奢望測試人員馬上能有更多時間去做更有價值的工作(相對于一次測試的多次重復執行)。因為測試人員通過自動化測試從測試執 行上節約出來的時間需要投入到自動化工具和技能的學習上去。
更快
在時間維度上,我們希望能夠更快地發現和修復穩定的主流程上的明顯的嚴重缺陷。如果一個測試人員手工測試多個功能,那么測試執行的并行度總有個上限。而 多個并行執行的自動化測試腳本可以更快速地驗證版本,一次性地報告問題。這尤其在測試初期版本不穩定,或者是每日構建的時候有用。有時,甚至是在我們不覺 得有測試必要的時候,自動化測試可以及時報告剛引入的問題。另一方面,更快地發現缺陷也意味著可能可以更快地修復缺陷。
更好
我們希望自動化測試可以幫助我們實現對“更好”的追求,包括質量、信心、士氣三個方面。
1、更好的質量
更好的質量最容易被理解成為更少的缺陷。但這里需要強調的是“更少的缺陷個數并不僅僅能依靠我們基于界面的自動化測試來達到”。我們這里希望自動化測試 能夠幫助我們減少生產環境中某種特定類型的缺陷。這些缺陷包括環境或者配置相關的缺陷、在主流程上本來正常但因為后期修改影響到的功能、以及容易被忽略的 地方(如:同一功能的多個入口、不常使用的功能)等。
2、更強的質量信心
在內部 測試中,我們希望借助自動化測試來提升的是對質量的信心。這主要體現在:(1)對于小版本和并行版本的質量更好地把關。小版本通常要求更快速的響應。并行 版本通常要求測試人員頻繁切換環境和被測對象。而人在壓力下也更容易犯錯。所以,我們常碰到的是匆忙中由于疏忽,一些比較重要或者明顯的問題沒有被及時發 現。(2)對缺陷修復的質量更好地把握。根據統計,大約7%的缺陷修復會產生新的缺陷,而這些新缺陷有時會出現在前面已經測試過并且不會再手工測試的地 方。對于如上兩種情況,重復利用自動化測試腳本可以不需要額外的投入,快速得到關于整個版本穩定性的信息和質量信心。
3、更高的士氣
對于測試團隊,我們希望自動化測試可以喚起更高的工作熱情。這一方面來自于可以部分地將測試人員從大量重復的測試執行中解放出來,另一方面來自于新技 術、新工具帶來的新鮮感。開發團隊和終端用戶會是自動化測試的間接受益者,因為開發團隊能感到問題會更快地暴露出來,終端用戶會感到應用程序更穩定了。甚 至在不遠的將來,如果測試時間可以借力自動化而縮短,那么用戶希望的功能也能更快地交付使用了。