為什麼我開始寫測試?因為我被雷到了!

Google test
cc by-sa 4.0

前言

說個故事吧...
我以前也像別人一樣是個驍勇善戰不寫測試的開發者,直到我的膝蓋被 bug 射了一箭

故事

首先我不可否認,clean code 跟 clean coder 的瘋狂 TDD 推坑攻勢奏效了XD

過去我沒有寫測試的習慣,甚至覺得測試是不必要的,有半數原因是因爲我寫的程式通常是遊戲或是圖像相關,然後有部分原因是因爲程式架構混亂寫不了測試。

去年算是一個轉機,首先我撰寫一份簡易 shell 的程式,作爲練習我特意將功能切的很細並發現這樣好像可以寫些測試,於是我寫了我人生中的第一個測試程式(其實程式沒切好,寫測試的時候遇到了相依性的問題只寫了部分的測試)。再來就是期末的專案,我們嘗試為開發板製作吉他效果器功能,程式碼涉及訊號處理,這不打緊,除了用上開發板外我們還在外部接了一些簡單的濾波器等 硬體 電路。在成果發表前四個小時,我們把開發板從暫時的線路上拔下來接上成品用的線路,然後蹦~~所有吉他效果居然全部都失效!那天我們整晚沒睡,遇上這種鳥事大家都快崩潰。我們嘗試重新編譯程式,換一張開發板,換一條電源線,換一臺電腦燒錄,換一個一天前的版本,甚至換到三個月前的版本,都沒用...。問題的來源很簡單,我們沒有寫測試(軟體和硬體都沒有),我們對程式碼沒有信心,在這個可能是線路 bug 也可能是軟體 bug 的情況下我們毫無頭緒(後來發現是線路問題,就是聲音輸入沒有進到處理器反而直接流出輸出線路去了)。

然後

這種事情沒被雷過是沒感覺的,我漸漸體會到所謂對程式沒信心是意見多恐怖的事情,你不知道它爲什麼會動你也不知道爲什麼它不會動,假使這件事發生在一間公司的大型專案裏面,一堆這種程式碼,我還真不敢想像。這學期的作業我開始嘗試 TDD,目前來說算是頗愉快的體驗,畢竟在實際撰寫實作程式碼前我就能藉由撰寫測試去思考這個模組該如何與其他的程式碼區塊交互運作,也能提早發現設計上的盲點。我想測試是必然的,這毋庸置疑,至於 TDD 我想我需要花一些時間去體會其價值,現在我就不多加評論了。

最後

還是買本書來看好了。

參考資料

Comments

comments powered by Disqus