※ 引述《prag222 (prag)》之銘言:
: 坦白說unit test直覺上就是增加開發成本
: 我第一次寫unit test覺得是在幫老闆燒錢
: 我個人是覺得unit test不見得不需要每個功能都實作
: 把一些重要的功能邏輯,或有機會異動的程式碼 做unit test會比較好吧
: 不然只做新增修查delete,這種操作應該不用寫unit test
: 小弟不懂~覺得沒啥用處,是因為遇到太多人只會嘴
: 用過後真的體會到它的好處的人不知道有多少
: 不然只會遇到一堆嘴上功夫而已
Unit Test跟其他自動化測試需不需要,先得看你是什麼專案
如果是那種完全不在乎品質,交貨後的維護也不干你們的事
連手動測試都沒在做或隨便做做的那種專案,寫一堆爛code會動能收錢就好
那還真的沒什麼做的必要
不過這種專案應該不是太多,而且有志往軟體技術深耕的人應該也不會太想待這種專案
如果是那種後續維護都要你們負責,或是做產品的,出去就要賣好幾年,改很多版的
那你多半需要做Unit Test跟其他自動化測試
Unit Test的主要目的並不是在"當下"找出問題
雖然你多多少少會透過它在當下找到問題
但它主要目的是在之後無數次的變更中,告訴你你的新code有沒有把原本的功能搞爛
如果沒有它,這件事就是手動做
而一個有規模的專案,手動做一次至少是好幾個人X好幾天,甚至幾星期
又或者是不做,然後燒香拜佛祈求不要出包
而這會造成一個延伸的效應,就是案子愈久愈沒有人敢去大幅度的改code或是refactor
大家改變愈做愈小,最後都是在那邊治標不治本,久了就愈來愈難維護
而從開發者角度,其實最大的好處是幫助我把code架構寫得更好
因為如果code的藕合度太高,會非常難unit test
所以寫unit test會自然讓人寫出比較低藕合的code
當然也可以寫高藕合的code然後用一堆mock,但是用太多mock本身就是不好的做法了
Unit Test跟其他自動化測試主要是幫你把測試的成本降低,還有提升品質
所以如果你的成本算法是"開發+測試+解bug",那麼做這些是有用的
但如果你的成本算法是"開發"然後沒了,那或許就沒用了
之所以會有它增加成本的錯覺,是因為他增加開發這段的時間
但是它增加的時間會在後面的測試還有解bug加倍還回來
只是一般比較差的團隊,都只有估開發時間
後面的雖然都有做,但是都不估的,好像不用時間一樣
所以估算一出來當然就覺得好像增加了成本