May 19 20:43~11:35
上禮拜六、日(5月17~18日)上「單元測試與持續整合實作班」,連同這一次課程,這是Teddy第四次上這門課(兩次公開班,兩次企業內訓)。上過Teddy課程的學員可能會知道,每隔一段時間,同樣的課程,Teddy都會稍微更新一下教材內容。這次上課Teddy增加了一個很基本的問題:「什麼是軟體測試?」
根據《The Art of Software Testing》這本書的看法,測試有以下兩種類似但說法不同的定義。
稍微幫鄉民把上面兩句英翻中一下:
- 軟體測試是一個流程,或一系列的流程,目的是確保電腦程式做了它該做的事,以及沒做它不該做的事。
- 測試是用找尋錯誤的意圖來執行程式的過程。
以上兩句話,也就是一般鄉民對測試的理解,就是「找錯誤」,或是白話一點的「看看程式有沒有問題」。
***
測試的目的,如果只是停留在找bug,那麼當專案時程「很敢 很趕」的時候,就可以把測試的功夫給省了。反正客戶會幫我們測,有問題再來解bug就好了。在軟體開發中「偷工(減少工序)」早已是公開的秘密,請參考下圖。
工程師:啊,時程很趕怎麼辦,嗯,我看先讓程式看起來可以動就好了,其他什麼設計、架構、測試的問題,以後再說。就先拿爛程式去交差吧。
世界認證的大師告訴我們下面這個重要觀念:
對!「寫出爛程式不會讓你趕上截止日期」,只有隨時隨地確保程式碼處在clean code的境界,才是讓開發速度變快的方法。關於何謂clean code,在《Clean Code》這本書有很多看法,其中有兩點和測試有關:
- Clean code必須包含單元測試與驗收測試(需要知道撰寫測試與做好設計的技巧)
- Clean code必須能通過所有的測試(靠持續整合來幫忙)
***
所以,關於測試的兩個面向就是:
- 說明程式沒有「明顯的」bug。
- 協助專案維持在clean code的層次。
兩者都很重要,但有些人只看到第一點,因此認為測試是外加的,是可被省略的一個步驟。但如此一來程式碼就無法維持在clean code的層次,跳過測試不但不會加快開發速度,反而會導致專案越走越慢,軟體也就逐漸成為硬體。
***
友藏內心獨白:這就是所謂的面面俱到嗎?
理論上是這樣沒錯。不過實際經驗上,沒寫自動化測試,改用手動測試其實也還行啦,測的人仔細一點,重點有測到,勉勉強強還可以交差了事啦,百分之八十重要的功能都測過,剩下的百分之二十如果不小心有Bug,老實說客戶不會那麼在意,下次修就好。特別是當公司沒有QA,你RD兼QA時就得這麼幹。
回覆刪除