iT邦幫忙

2023 iThome 鐵人賽

DAY 2
0
自我挑戰組

Unit Test 學習路系列 第 2

Day 1: 測試的基本概念和好處。

  • 分享至 

  • xImage
  •  

今天來了解一下 Unit Test 的基本概念,我會分成幾個部分:

  • 從開發流程來看 Unit Test
  • Unit Test 可以解決什麼問題 ?

從開發流程來看 Unit Test

先來看看我們一般的開發流程:

  1. 拿到需求
  2. 整理需求:包含跨部門釐清需求溝通,列出開發功能,安排開發時程 等。
  3. 開發功能ing
    • 腦袋瓜想一下怎麼做可以實現需求
    • 動手寫幾行程式碼
    • 本地瀏覽器啟動,看一下畫面操作是否符合預期
    • 修改程式碼,重複 步驟 3. 無限輪迴...

那再來看一下 Unit Test 的大概流程,這裡先以 TDD 精神為例:(之後篇章會學到 TDD)

  1. 拿到需求
  2. 整理需求:包含跨部門釐清需求溝通,列出開發功能,安排開發時程 等。
  3. 開發功能ing
    • 腦袋瓜想一下怎麼做可以實現需求
    • [測試] 把腦袋想到的,寫成 測試用的程式碼
    • [開發] 動手寫幾行程式碼
    • [測試] 執行測試成功
    • [開發] 本地瀏覽器啟動,看一下畫面操作是否符合預期
    • [開發] 修改程式碼,重複 步驟 3. 無限輪迴...

看出來差別了?

  • Unit Test 把我們當時開發功能的想法紀錄下來。
  • Unit Test 會留下測試的程式碼,讓未來想驗證結果是否符合預期,可以直接進行測試。
  • Unit Test 本身完全獨立於開發,有寫沒寫都不會影響開發功能。
  • Unit Test 不能簡化開發流程,甚至我們要花更多時間去維護,短視近利的老闆會生氣氣。
  • Unit Test 很明顯只適合需要長期維護的專案,免洗專案(像是廣告活動頁)就別搞了。

Unit Test 可以解決什麼問題 ?

從剛剛的結論可以得知,撰寫測試會額外增加開發時間,而且還是老闆看不到的那種。
那來看看 Unit Test 可以解決什麼問題,看看能不能讓寫 Unit Test 時間成本花的更值得?

  • 降低後續維護專案的成本:
    Unit Test 會在開發過程中留下紀錄,可以讓其他開發人員(或者未來的你)在協作開發或維護可以更快進入狀況,而且留下測試工具讓夥伴可以直接進行驗證。

  • 小範圍進行驗證,升級我們的程式碼品質:
    Unit Test(單元測試):顧名思義就是將專案中的功能切分成小單元,像是function 進行測試,讓我們開發時更容易聚焦處理小範圍的邏輯是否符合預期。
    同時,為了達到小範圍測試,也會影響我們撰寫程式的習慣,我們會更傾向寫出更簡潔、模組化的程式碼(當然,過程中會有重構的陣痛期)。

  • 提高開發時期偵錯能力,降低協作夥伴踩雷 或 專案上線出問題的機率:
    在多人協作的專案中,每一次 commit 前跑過一次測試,可以確保每次 commit 不會搞爛專案,減省為了賠罪請專案同事下午茶的錢。
    或者,專案上線後,突然有一天水逆,有一堆來自不同部門的人來電說「這個怎麼壞了!」「我剛剛資料打超久都沒了,浪費我時間!」「什麼時候可以修好,我今天要交給廠商欸!」讓你的人生直接黑白的體驗。

  • 可以搭配自動化測試工具,簡化除錯的流程(時間成本)

看來寫 Unit Test 初期要努力一點,後面掃雷的機率會大幅降低,可以讓自己在公司成為好人緣代表,也會讓自己養成更好的撰寫習慣,你看看你覺得值得嗎?


從今天入門的Unit Test概念學習,我可以預見在實務工作上使用Unit Test最大的挑戰:

  1. 開發人員的時間壓力。
  2. 持續撰寫與更新 Unit Test 的意志力。
  3. 所有專案協作夥伴都要克服 以上兩點的超能力。

當我們專案中實行MVP(Minimum Viable Product) 衝刺計畫時,第一點與第二點顯而易見,這是我們必須不斷遭遇的挑戰。更甚者,所有參與專案的協作夥伴都必須嚴守 Unit Test 準則,才有辦法讓測試精神發揮最大效用。

因為,只要中途有人放棄更新 Unit Test,測試程式碼就會變成垃圾。未來如果我要維護一項專案,一旦發現測試功能與現有專案不符,我會直接假設專案內所有測試程式碼都沒有長期維護,一樣把他冷凍處理,這時候專案內存在的測試程式碼就會變成包袱。

但即使如此,我還是認為學習 Unit Test 有他的價值,因為所以技術的出現都是為了解決遇到的問題,所以現在我預見的隱憂,一定有其他套件或方式可以讓測試工具更佳方便、更佳好管理,提高開發者使用的意願。搞不好早就有解決方法,只是我初入火坑所以還沒發現而已!


參考資源


上一篇
Day 0 : 我該從哪裡開始學習 Unit Test
下一篇
Day 2: Unit Test/Integration Test/E2E Test 的區別。
系列文
Unit Test 學習路31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言