2015-08-04

[講師] 教導公司暑期實習生 Unit-Testing & TDD Introduction (1)

很榮幸在7月底幫公司的暑期實習生上了一堂課
Unit testing & TDD Introduction

由於Target Audience都是學生
姑且猜測他們寫code經驗比較不足
所以這次就安排了Unit-Testing的基礎課程以及讓他們實作練習的Coding Dojo

今天安排了整整4小時的課程
所以我把課程切分成三部分 : 
1. 聽課
2. 實作
3. 小組報告

課程一開始 我先放個Why TDD的影片
這招是跟Daniel學的
在開頭放影片 讓準時進來的學生不無聊
讓遲到的學生就算沒看到也沒損失XD

接著我讓他們從以下四個問題挑一個來回答


然後就來玩群眾智慧的遊戲了
我請他們隨機配對
兩兩分享一下彼此的答案
然後請兩人協調出這2張答案的分數
兩張答案要共享7
簡言之就是兩者相加要等於7
最後交換手上的故事
繼續下一個配對


今天總共讓學員們隨機配對3
此時大家手上的故事應該就有3次分數的總和了




這活動的目的是為了讓他們自己決定誰的故事值得分享
分數最高的四位 也順便成為了各組小組長

沒想到大家都還蠻客氣的
3 run的總和下來 最高分才12
不過不可否認的
透過群眾智慧選出的這幾位小組長
表現上確實很有潛力喔~

分好小組之後
便開始介紹今天的主題
也透過一些簡單的實作練習讓各組建立下一堂課的實作環境

安裝nunit (unit test framework)
寫出第一個unit test project
執行第一個unit test

第二堂課是要玩codind dojo
Dojo是道場的意思
是一個能夠練習武功的地方
所以coding dojo就是個能夠讓大家安心練習寫程式的地方


今天coding dojo進行的方式是 Randori
各組同一時間只有一台電腦能寫code
各組組員輪流上台寫程式
圖片來源 : httppt.slideshare.netviniciusa1r3sapresentao-coding-dojo-em-10-minutos

各小組會有以下角色:
分別區分成 駕駛區及觀眾席




駕駛區裡坐著:
Driver : 實際下手Coding
Navigator: 可與Driver討論或提供方向
觀眾席裡就是坐著觀眾
Audience: 台下觀眾,不能介入coding

5分鐘一到,角色是會輪替的
如此一直輪替直到活動結束

今天實作的題目是:
網球計分系統

這題目看似簡單,其中卻藏了一些邏輯危機喔
真的蠻適合當作Coding Dojo Kata (練習的套路)

各小組在進行Coding Dojo
我就在各組間走動觀察

 一開始大家都還沒有進入狀況
所以20分鐘後 我中斷了Coding Dojo
請他們反省跟討論接下來的策略
接著 Coding Dojo繼續進行
很明顯地有一組已經知道怎麼玩了
開始按部就班地建立Test Case


其他組則還是在為了通過第一個測試而努力



他們的問題在於忘了Baby Step




於是我要求他們盡可能先通過第一個測試
不要想太多
不要帶太多情境
先求通過第一個測試之後再Refactor



其實TDD雖說先寫測試
但也不是先寫測試這麼地膚淺
他的一個價值在於Focus on 需求
小步小步地完成需求
所以先寫出第一個陽春版的測試並不丟臉
但同學們就是想太多了
想要一次全包
這不就又回到前面介紹的Integration Test了嗎?



最後請各小組上台Demo以及分享他們的經驗
我相信他們一定也有感受到衝擊
希望能在他們心中埋下一顆TDD的種子



下一集我們再來介紹如何寫出第一個TDD !!!