2016年7月17日 星期日

一些去上自動測試與 TDD 實務開發的心得


在文章開始之前,先提供一下一些背景 context:
* 課程資訊: Skilltree 自動測試與 TDD 實務開發(使用C#) 第六梯
* 授課講師: 91哥  可參考 91 敏捷開發之路  30 天快速上手 TDD


感覺我好像很久沒有寫技術文了,因為七月前三週週末都在上 TDD,就算是週日,也在寫作業,複習 91 哥教的一些 Lab,只能說,這三週過得太精實了,如果看到我太久沒發文,一定就是有什麼作業要交,課程要上,或是交了男朋友了...

因為 91哥這門課很難搶,我去年本來有報到一次,後來因為去日本玩,所以就跳過了... 今年這次剛好有好心人讓票給我,當然就要去上一下。(沒想到下一次報到課程,也已經換了一家公司了... 所以說,老師開課的機會是不等人的,有機會,你有想要學習,不要猶豫,如果你遇到好雇主幫你出錢上課,那真的恭喜你,但如果是跟我一樣自費上課,就盡量找人一起報名組團體報名)


先來說明一下為什麼想要去上 TDD 的原因,其實這門課主要並不是教 TDD 或是一些專有名詞的定義,而主要是在教『開發』的部分,用 TDD 輔助開發的方式以及流程,還有一些習慣,像是 baby step 之類的,或是『紅燈,綠燈,重構』的循環。在我過去任職的 urAD,當時有寫過一陣子的 PHPUnit,因為是測試新手,雖然有寫,但是我知道自己有些卡關的地方,一直過不去。其實 TDD 在我心中覺得最難的部分有幾個要點 (撇開團隊合作的部分):

1.  本身對程式的重構能力不好,某種程度上 一直無法提升對程式碼的解耦,職責分離等等。
2.  不知道如何開始,或是好不容易鼓起勇氣一試,發現頻頻卡關,需求又有 deadline,結果為了趕上線,中途放棄,就沒有持續... QQ。
3. 為了測試而寫出來的 code,寫起來也很彆扭。
4. 沒有搞懂自己到底在做什麼測試,也用錯方法跟工具等等。
5. 沒有足夠的時間養成這個習慣,三天兩頭就被調去做不同的專案。

如果有一半的困難要點是可以撇除的,那本我覺得測試這件事情,本身不難,難的是: 遇到什麼詭異的需求,遇到什麼可怕的舊程式,再來就是對於 Web 開發流程有一定的經驗,像是寫程式的經驗,重構的能力,這些都是靠經驗累積出來,才會慢慢感受到 TDD 要怎麼開始,以及持續。

因為有些實際工作上遇到的狀況跟學習的卡關,很多我覺得是書本上,看書學不到的,所以這門課,因為 91 哥上課的 lab 都是從一些實際專案上會遇到的情況來做教學,真的是蠻受用的! (y) 我就愛聽實戰應用案例 :P 而且從很多角度切入,教我們什麼情況可以用哪些方法來測試。(也覺得自己 OOP 還有待加強... Orz)

另外作業的部分,一定要交,寫了之後才知道,原來上課是一回事,回家打開電腦看看 spec 之後就呆掉了,沒錯,這就是卡關的開始,一定要動手寫作業,如果連這一步都沒有開始,就不會深刻感受到 TDD 的感覺,重點是要習慣一些起手式,接著就是老師會幫我們 code review。 而且我發現有寫作業的話,下一堂課通常也會記憶猶新 XD (當然上完後之後我是不知道... XD 我自己都心虛 :P )

而且我不會 C# 還是用 C# 硬寫作業了,說真的還真的有一半的時間都在 stackoverflow 某些寫法該怎麼表達 (好在還有一點 Java 的基礎...),然後 LINQ 我真的很不熟... 但我也不好意思用一些自己都看不懂的寫法去寫作業... 。沒有特別堅持啦 :P  這堂課的作業可以用自己習慣的語言去寫。只是因為我還有報八月份的 ASP.NET MVC 的課,想說遲早要多接觸 C# 的,那麼就不如這時候就先適應適應。

然後順便 po 一下這是中餐的便當,還不錯,菜色我最喜歡的蒸蛋。

如果你在報名時有填寫申請證書最後一天課程會拿到 (雖然這不是很重要,但如果你想要,一定要記得勾選想要證書 XD):

另外 91 哥在上課剛開始時會介紹一些書籍,(還有當天的獎品 :P),其中一本叫做單元測試的藝術,在第一週介紹後我就立刻去買了,如果你要買的話,請買第二版:

題外話一下,目前看單元測試的藝術到第五章,(其實我本來是想說等我看完再整理一次文章,但想想算了 XD),等你上完第一堂課之後,我個人覺得,一定要努力搞懂 Mock 跟 Stub 的差別,網路上有很多比較的文章,但是,範例舉例的比較好懂的文章我很少遇到... ,有些也寫得很模稜兩可,這時候你一定要看一下這本書的第三章跟第四章,真的寫得不錯 ! 其實第一章到第四章都跟第一天的課程有關係,上完課再看,幫助我釐清不少問題,像是單元測試的定義,跟整合測試的差別,Stub, Mock 等等。

簡體書有些翻譯我還要寫成 snippet 才記得起來,像是:
- stub = 存根
- mock = 模擬對象
- fake = 偽對象
- external dependency = 外部依賴

XD 其實看久了就習慣了。如果沒有書可以參考,第一堂課後,一定要看91哥的30天快速上手 TDD。


小結
關於寫測試這件事情,我也還在努力,但是怎麼開始很重要。雖然我不敢期待自己可以遇到一家,非常注重軟體開發的公司,一部分也是自己能力要夠。

只是我覺得有寫過測試的經驗,看待開 Method 的方法會很不一樣,還有我學到循環複雜度這件事情 XD 好好玩! 突然覺得 Visual Studio 好強!。雖然我可能不常用 TDD,以後會忘記,但是只要回憶學習的方式是什麼,就 (應該)有機會 pick up 起來,然後再來重新報一次課

我也要感謝跟我坐在同一排的同學,C# 有問題都是他們在幫我解圍,引導我一條可以去 google 找解答的方向。每次遇到新的問題,就像要起身去健身房一樣,去之前都好懶惰,不想動,去了之後 『哇! 還好我有來』 『現在心情超好的』。

用 TDD 來開發,最後要練到自然而然,91哥說他這段過程大概要1年半的時間。

沒有留言:

張貼留言

若你看的文章,時間太久遠的問題就別問了,因為我應該也忘了... XD

Vue multiselect set autofocus and tinymce set autofocus

要在畫面一進來 focus multiselect 的方式: 參考: https://jsfiddle.net/shentao/mnphdt2g/ 主要就是在 multiselect 的 tag 加上 ref (例如: my_multiselect), 另外在 mounted...