你有沒有過這種經驗:
- 剛修完一個 bug,測完了,覺得很棒;結果才過幾天就又收到新的 bug 回報,原本修好的功能好像又壞了。
- 每次調整了一點程式邏輯,就得在瀏覽器上點來點去,測完後才發現上次修的另一個地方又被影響了。
- 感覺自己整天都在處理突發狀況、火燒屁股的事情,一天下來忙到翻,但卻說不出忙在哪裡。
如果你也有這些感受,那可能是因為「還沒開始單元測試的你一定很忙」。當我們沒有任何自動化測試時,開發過程中看似省事,但卻常常在後期付出更多的時間成本。這篇文章要和你分享:其實一個人就能開始單元測試,並透過一些簡單的測試,替自己「減輕」開發的負擔。
這麼做對我有什麼好處?
- 不用再手動一個一個按
沒寫測試時,每次修改功能後,你可能就要打開瀏覽器,進行多種操作流程、點擊不同按鈕,直到確定「好像沒壞」才放心。但只要你建立了一兩個「簡單的自動化測試」,每次改完程式就能跑一下測試,程式會自動幫你做檢查,比手動測好多了。某次上線前,不小心改錯了某個Function導致計算結果都不正確,手動測試很難一下子發現。但有測試後,一跑測試就立刻紅燈警告,避免了正式上線的災難。
- 隨時知道程式哪裡壞掉
有測試時,只要程式的某部分壞了,跑測試就能快速告訴你問題在哪裡,甚至在哪個函式或哪段程式碼。少了手動排查流程,也更能快速鎖定問題。 - 給自己多一層保護
測試不只是給大公司或大團隊用的保護網,就算是自由工作者、Side Project 開發者,或是團隊裡最孤獨的我,也能靠「幾條測試」降低反覆 Debug、修 Bug 的風險。
為什麼大多數人還沒開始測試?
- 「感覺很難,不知道從哪開始」
大部分初學者對測試的印象是「要寫很多莫名其妙的函數,而且一開始就要很複雜」。事實上,測試也可以很簡單,從最容易的函式測試下手就行。 - 「時間不夠、進度太趕」
很多人認為寫測試會拖慢開發速度,「老闆都在催了,哪有時間寫測試?」然而,你現在沒花的測試時間,往往會在未來的 Debug 與重構中「雙倍奉還」。 - 「沒看到好處,覺得測試只是浪費時間」
有些人沒親身體驗過測試帶來的效率提升,所以覺得只是不必要的額外工。對此,我們可以透過小規模的實驗、局部的測試來累積信心。
上面提到的只是常見阻力,並不代表所有人都如此。有些開發者早就把測試當成日常,也有團隊在某些專案中推行,但在其他專案卻沒時間做。每個環境都不一樣,需要具體情境來思考。
行動吧:一個人也能做什麼?
- 從「最常出包的功能」開始測
- 想想看,你最常被報 bug 的功能是什麼?最常因一點小改動就壞掉的 module 又是哪個?先從這裡下手寫測試。
- 舉例:一個常常要計算折扣的函式,或是一個複雜的字串處理邏輯。先寫幾條簡單的測試用例,確保輸入 A 就一定回傳 B。
- 分開小函式,單點測試
- 單元測試英文叫作「Unit Test」,就是聚焦在「Unit」級別的小單位測試。
- 如果你的程式碼是一整塊,可以嘗試把它抽出來成為獨立函式,再對這個函式寫測試。
- 挑戰「1 小時內完成第一個測試」
- 別想太複雜,只需要:
- 安裝 PHPUnit(或任何你想用的測試框架),
- 新增一個測試檔,
- 裡面寫一個 testXxx() 方法,測試你想測的函式。
- 跑一下測試,看它成功或失敗,就能體驗到測試最基本的流程。
- 用案例「證明」測試的價值
- 在自己的專案裡面,主動記錄一下:自從你多寫了幾條測試後,是否在之後的改動中更快發現錯誤?或是手動測試的次數減少了?
- 這樣的「證有」證明會是你在團隊或老闆面前宣傳測試時的好材料。
「還沒開始單元測試的你一定很忙」,不是一句隨便的口號,而是無數過來人累積下來的經驗談。
- 單元測試帶來的好處,不需要等到團隊一起行動才看得到;只要你願意花一點時間嘗試,就能在日常開發中感受到有測試的踏實感。
- 當然,僅僅靠一兩個測試檔,還不能代表已經完整覆蓋所有情境,但它至少能「證明」測試在某些情境下確實有效。
下一篇,我們一起正式進入 PHPUnit 的世界,教你如何安裝與撰寫第一個簡單的測試。只要做完下一篇,你就能從「不知道測試是什麼」進階到「寫出你的第一支測試」,幫助你一步一步往更完善的測試之路邁進。
文章回顧:
- 開場:描繪「忙到翻」的開發日常。
- 測試解決哪些忙亂:實際案例證明測試能幫忙。
- 為什麼還沒開始?:從心態、時間、環境探討一般阻力。
- 初步行動:一個人就能開始的簡易測試策略。
- 結論與引導:強調先有一些測試就能帶來改變,並預告下一篇關於 PHPUnit 的教學。
希望你能在看完本文之後,嘗試寫下你的第一隻測試,讓自己不再「忙到翻」而是「忙得有條不紊」!
如果你想知道如何安裝與使用 PHPUnit,敬請期待 走進 PHPUnit 的世界:從 0 到 1 的測試入門