最近有一個朋友問 Teddy :『team members 不會寫 unit tests 要怎麼辦?』對於 Scrum (agile) teams 來講這算是很常見的問題。廣義的來說,不管是否採用 agile methods,只要想要實施單元測試的團隊,都可能會遭遇同樣的問題。
想當年(實在很不想寫這三個字 >_<)...Teddy 剛出社會的時候,根本沒聽過什麼叫做 unit testing,程式要怎麼測?就 programmer 自己測啊,用人工的方式來測試。一直到工作了幾年之後,那時候好像 JUnit 剛出來,Teddy 才開始學到 unit testing 的觀念。當時 Teddy 用的最多的語言是 VB(大概佔了 Teddy 所寫的程式 85% 以上),其次是 Java/JavaScript,再其次是微軟的 ASP。Teddy 第一個正式在工作上所寫的 unit test case 就是用 VB 寫的。當時還沒有免費的 VB unit testing framework 可以用,Teddy 依稀記得花了一點點錢在網路上買了一個商業版的 VB unit testing framework。當時 Teddy 的學歷是五專電子科畢業,從來沒修過任何軟體工程的課,更沒有修過軟體測試的課。不是要臭屁說 Teddy 有多厲害,而是要強調,寫 unit tests 這件事沒有那麼難。
幾天前跟指導教授提起這件事,指導教授說,在學校(敝校...XD)資工系大二的學生修程式設計的課就需要寫 unit tests。Teddy 當年在研究所修 OOP,OOAD 課程的時候也是有被要求要寫 unit tests。時代在進步,經此訓練相信新一代的 programmers 應該會具備寫 unit tests 的基本能力。
***
話說回來,對於已經在業界工作的鄉民們,如果有心想要寫 unit tests,該如何著手。先不談什麼 mock objects, stubs 這一類幫助做到 unit test Isolation的技巧,就單單講如何測試一個 class 的 methods 或是一個 C 程式的 function。
先講第一個方法:自修。不用急著去找書來看,網路上就有很棒的極短篇文章。這兩篇是 Teddy 覺的最經典的:
邊看邊用 JUnit 寫幾個範例,應該馬上就可以抓到單元測試的精神。如果嫌這樣還不夠,JUnit 網站還有一堆文章可以參考。
等 unit tests 寫多了,會發現怎麼自己寫的 unit tests 不是那麼 unit tests... 好像跟很多其他模組牽扯到,無法讓 unit test 跟『三輪車』一樣跑很快(難道是因為沒有老太太...XD),或是很容易因為相依的模組或是資料錯誤而導致 unit tests 執行錯誤。為了提昇 unit test Isolation,可以去找一些書來看。例如:
如果沒什麼時間(相信 99.99% 的鄉民都是屬於這一類的)那麼看第一本 JUnit in Action 就好了(鄉民內心獨白:七刀,知道我沒時間還叫我看書!),Teddy 當年也是看這一本長大的。想做 TDD 的可以參考一下第二本。至於第三本書則是非常的『凶險』,厚達 800 多頁,如果真的傻傻的想等看完再開始寫 unit tests,那......就有的等了。
以上都算是『unit testing 基本款』,如果有鄉民要問:『如何做 UI,Javascript,Web Services 等等的單元測試』,就請自行 google 一下,那有那麼好康什麼東西 Teddy 都幫你『傳便便』。
***
***
***
那我順便打個廣告,買unit testing課程送GUI testing簡介XD
回覆刪除To Spirit Du:
回覆刪除我比較想要送炸雞跟可樂...XD
呵 當初幫老師弄教材時 不小心就弄進去了
回覆刪除