跳至主要内容

[Day 02] 為什麼要寫測試?有哪些測試?

為什麼要寫測試?

要做什麼事情,總是要有個說服人的原因,不然我好好的開發幹嘛還要花時間在看不到功能的測試呢?

  1. 確保程式碼正確,防止無預期的錯誤:像是改了 A 功能壞 B 功能。

  2. 方便重構程式碼:測試能確保重構後的功能依然是正確的。

  3. 交接容易:新人進入專案,能快速了解功能,且較不容易改壞原本的功能。

我覺得光是以上三點,就足夠讓我們寫測試了,以長久來看,如果不是那種短期的活動網站,寫測試絕對能夠省下很多時間。

那一直在說要寫測試,到底要寫哪些測試呢?

測試種類

測試的種類有分三種,單元測試、整合測試以及端對端測試。

  • 單元測試 (Unit Test):針對程式中的最小單元進行測試,例如:函式、類別。

  • 整合測試 (Integration Test):針對多個組件或模組之間的互動和整合測試,例如:使用者點擊按鈕跳出彈跳視窗。

  • 端對端測試 (End-to-End Test):模擬真實使用者情境,測試整個應用程式的功能和流程,例如:使用者登入、使用者註冊。

測試金字塔

根據上面的測試種類,就形成了一個測試金字塔的概念,就像下面那張圖:



圖片來源:[Tech Blog] Test-Pyramid

金字塔越靠近頂端(E2E 測試),所耗費的成本越高,但是越貼近使用者,像是很多公司會使用人力測試,撰寫測試報告等等,雖然很耗費時間成本,但是最符合實際使用者操作的情況。 相反的,金字塔越靠近底部(單元測試),所耗費的成本越低,在開發的時候就可以進行,且如果單元測試做的夠好,也可以避免整合測試及端對端測試可能發生的錯誤。

所以在開發的時候,我們會希望能夠盡量多做單元測試,但是這並不代表我們不需要做整合測試及端對端測試,而是如果單元測試做的夠多夠好,就可以減少在做整合測試及端對端測試的人力及時間成本。

單元測試 vs 整合測試

第一次學測試的時候,很難理解單元測試跟整合測試的差別,其實可以把整合測試想成是多個單元測試的組合,所以就算單元測試是正確的,也不能保證組合起來是正確的。

下面這張圖,可以很快速的理解他們之間的差別。



圖片來源:Unit_vs_integration_tests GIF