寫程式怕東怕西?
你改了東,壞了西?
我的程式沒問題?
透過這三天的課程,我覺得,只要我相信,狀況就會改變。
這次上課的講師是91,又是一個我Follow很久的一個偶像等級人物。
這是他的部落格(In 91)。
這次上課的流程也大致可以透過91寫的系列文章(30天快速上手TDD)一窺一二。
推薦若有考慮是否要花錢去上課,先看完一整個系列,你完全懂,恭喜這課程我覺得對你來說效益不大。
若,整個霧煞煞,快鎖定SkillTree,然後,把你所有問題帶到課堂上拼命問。
回到正題,我承認,對於TDD這個議題,在上課以前我就如同91文章內所寫。
- TDD不過就是一種新議題。
- 單元測試,我哪有那個美國時間。
各種排斥,但,我的程式就是偶有寫錯的地方。
以最近一個錯誤來說,使用者查詢條件是:XX編號為XXXXX,但,我的Linq就是下XX名稱為XXXXX。
錯誤夠低級了吧!!!
換新公司以後,其實專案上都有單元測試的專案在,沒寫過的我,也糊裡糊塗的跟著寫。
但,說真的,就是依樣畫葫蘆,只知道,我必須寫測試程式。
其實,說真的跟以前寫程式沒什麼不同,差別在,我去寫了一段驗證他的程式。
而,驗證的這段程式很可能是我為了綠燈而讓它綠燈。
現在,我相信未來我寫的測試程式會真正的讓人懂,讓人體會它的好。
我也不再如此的迷惘。。。
或許,你認為我太把這堂課神話,但,認真上課後的我就是如此。
你要我來講這門課有什麼不好的地方嗎!?有。。。
- 上課的講義不是完整版本,有提供紙本,上面有空白處上課時頭影片會有答案。(91有聽到大家的心聲,說會提供填空答案)
- 三天各自有Lab檔案,Lab檔案希望可以不要加密。
- Lab檔案也可以先提示每個Lab的大致用意。
- 最終串起BDD這個部分感覺時間太趕,應該還有很多案例或實戰中的經驗可以分享&傳授。
講講我自己上課的方式:
- 紙本講義我一行都沒抄,專注當下的解釋。(還好後續有提供)
- 老師在Live操作Lab,不要怕沒跟上,就只顧著跟著老師打字。(為何而寫比較重要。語法不會有助教、有老師在實做時間來幫你)
- 一有問題就問,91&助教耐心一等一。
- 作業一定要寫,91親自幫你CodeReview,機會太難得。
- 來上課一定有某種目的,記得三天結束前取得你想要的目的。
再來講講,我學到了什麼:
- 解除相依、關注點分離的重要。
- 單元測試起手勢 => 3A原則。(Arrange、Actual、Assertion)
- 面對傳奇程式碼如何讓它也可以有測試保護我們的修改或重構。
- 活用 NSubstitute 瞭解Stub、Mock兩種本質上不同。
- Stub => 模擬相依物件回傳的值為何。(擁有實際回傳值)
- Mock => 用來做Assert,驗證互動。(是否有呼叫某個Function、呼叫幾次等等)
- 測試覆蓋率神話,重點真的不是覆蓋率。(但,若公司政策還是當標準,好像還是無解)
- 透過Firefox套件進行網頁測試(Selenium IDE)
- 承上,將錄製的結果做成UnitTest的程式碼。
- 紅燈、綠燈、重構的良性循環,不要一次幹完所有Production Code。(這點我想我還要好一段時間適應)
- 看開了!當需求單位沒有提出需求,切莫腦補。(這點頗難,因為從頭到尾需求單位都覺得你應該知道)
- Specflow 透過說故事的方式迅速寫出TestCode。(這讓我太驚艷)
- 透過EntityFramework來做整合測試。
- Pickles 有生命的文件產出工具,測試情境到哪裡文件就到哪裡。
- 不管是寫單元測試或是TDD、BDD,不是強調你寫多少測試程式,而是要真正給你帶來正面的能量。
下星期我就要再公司內部開分享會了,也開始陸續作屬於自己的LAB。
主要講xUnit,但,這三天下來好多東西可以講,迫不及待與團隊們分享。
91好像有講一句話,我也不確定有沒有了。
現在我想說:相信改變(開始寫測試),我的程式就會變的很可靠。
這三天只是一個起始,未來肯定在實務上遇到更多的問題,相信撐下去就是我的拉!!