March 19 22:00~22:40
問對問題很重要
最近兩個周日到台中上「單元測試這樣學就會了實作班」企業內訓,有學員問到:「如果工程師不寫測試怎麼辦?」這是一個經常被問到的問題,Teddy想從另一個角度來思考這個問題:「為什麼要寫自動化測試?」
Teddy曾經聽過一種說法:「公司不是花錢請你來寫測試,是請你來解決問題。」言下之意就是寫自動化測試並不重要,寫程式解決問題才重要。某種角度來看,這樣說也沒錯。但如果順著這個邏輯推演下去,這句話是不是也可以改成:「公司不是花錢請你來寫程式,是請你來解決問題的。」所以開發人員也不用寫程式了,整天想著怎麼解決問題就好了?這樣聽起來好像有點怪怪的。
除非你是老闆的兒女或親戚,否則公司當然是花錢請員工來解決某種類型的問題。所以Teddy覺得這句話應該這樣看:「公司是花錢請你來解決問題,如果寫程式不寫測試可以解決問題,那就不寫測試。如果寫測試可以解決問題,那就寫測試。如果什麼都不做可以解決問題,那就每天裝忙就好」。
所以現在問題變成:「自動化測試可以解決什麼問題?」
***
測試的兩種價值
自動化測試提供公司與開發團隊兩種價值:
- 確保系統品質(出貨前系統沒有明顯的bug)
- 讓軟體變軟(團隊不懼怕修改系統並加速產品上市時間)
一般人,尤其是沒有開發經驗的管理階層或是涉世未深的開發人員,很可能只看到自動化測試的第一種價值。因此,在時程很 敢 趕的時候,測試就變成可犧牲對象。就好像以前,為了聯考音樂課、體育課、美術課這些「聯考不考」的課程都可以被借去上國文、英文、數學一樣。反正退一萬步想,還是可以在出貨之後「請客戶幫我們測啊」。
因此測試變成可有可無,或是為了趕上時程而應該也可以被拿來省略的一道工序。
***
真正的專家知道,自動化測試的第2個價值才是改變團隊與產品的根本,也是公司競爭力很重要的一環。如果你的產品寫好之後不需要修改與維護,大可不需要自動化測試。例如,用完即丟的活動性軟體、接外包專案寫好後丟給客戶自己維護的系統、注定沒人用的系統,或是開發完之後你就準備離職的那種系統。
如果你的系統會被長期使用,而且很可能需要修改,省略測試所「賺到」的時間,很快就會「還回去」。正所謂「出來混,總有一天是要還的」。用比較正式的說法,累積技術債的利息已經太高,高到還不起的程度。
***
結論
在《Clean Architecture》書中,用「龜兔賽跑」的故事來說明「一開始看起來很快不一定最後是贏家」的道理。敏捷開發強調團隊需要有穩定的開發步調,而自動化測試就是一種讓團隊保持穩定開發步調的方式。
公司不是花錢請你(程式設計師)來寫測試,是花錢請你來解決問題,完全正確。因為你是專業人士,所以你知道什麼時候寫測試可以幫助公司解決問題,什麼時候欠點技術債可以獲得更好的投資報酬率。
***
友藏內心獨白:炒短線與長期投資的操作手法一定不同。