l

2011年11月15日 星期二

不會寫 unit tests

November 15 21:18~22:21


最近有一個朋友問 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』的人來教,結果教完之後還是不會。在這邊 Teddy 好心介紹 一批便宜的牛內 ...嗯嗯...一個管道,北科大 ezScrum 團隊除了有提供企業界導入 Scrum 以外,也有提供單元測試的教育訓練,經濟又實惠,有需要的鄉民們可與 ezScrum 團隊聯繫


***

啊...什麼,你說什麼,看完這一篇還是不會寫  unit tests...當然啊,Teddy 還沒資格來教鄉民們寫  unit tests,請自行覓食。


***

友藏內心獨白:有時候,花點小錢找人教反而是最省錢的方法

3 則留言:

  1. 那我順便打個廣告,買unit testing課程送GUI testing簡介XD

    回覆刪除
  2. To Spirit Du:

    我比較想要送炸雞跟可樂...XD

    回覆刪除
  3. 呵 當初幫老師弄教材時 不小心就弄進去了

    回覆刪除