在軟體開發過程中, 單元測試有點像買保險的概念
在上次被問到單元測試的一些問題後
紀錄一下
自動測試 VS 手動測試
項目 | 自動測試 | 手動測試 |
---|---|---|
開發時程 | 久 | 短 |
測試時程 | 極快 (秒/分) | 系統越大越慢 (分/時) |
測試完整度 | 依照覆蓋率判斷 | 落觀音 |
系統更新掌握度 | 高 | 有把握自我意識良好, 沒把握時自己嚇自己 |
持久性 | 無限 | 人類會心累 |
CI/CD | 可自動化 | 人工測試/人工佈署 |
改A壞B | 及時反應 | 不明不白 |
人工測試碰到的狀況
ex: 測試會員購物流程
- 註冊會員帳號
- 填一堆會員資料
- 會員登入
- 綁定資料
- 選擇商品
- 加入購物車
- 結帳
- 付款
- 後台確認訂單
- etc…
人工測試的狀況常常會遇到
- 會員帳號重複申請
- 驗證碼又打錯
- 密碼要中英文混用
- etc…
有寫單元測試就一定沒問題?
有單元測試沒有整合測試
會遇到每項功能測試都正常
但…流程上似乎有問題
什麼是單元/整合測試?
單元測試
- 確保方法或物件可獨立運作, 進行檢查和驗證
- 可重複測試
- 可反應驗證結果
- 可及時發現設計和需求存在的缺陷
- 可在系統Runtime狀態發現Bug
整合測試
- 確保模組與模組之間互動行為正確無誤
- 確保單一物件測試通過, 是否影響整體流程
單元測試的好處有哪些?
單元測試的優點 (減少觀落陰時間)
- 迅速找到程式出錯點
- 提升回饋速度與開發效率
- 降低系統Bug含量
- 提高系統品質
減少測試人力成本
- 短時間快速全面測試系統
- 大型系統測試甚至要跑20分鐘
- 降低測試人員負擔(心累想離職)
- 減少重複性工作
- 減少On call人力成本
多一層保障
- 重構系統維持可維護性
- 系統更新多了一層保障
- 後續維護不怕改壞系統
- 公司老闆說話更有立場
單元測試適用於…
- 系統結構比較清晰穩定
- 系統耦合性低
- 系統底層穩定
- 開發團隊需具備 S.O.L.I.D. 設計原則 知識
- 公司時程沒壓力為前提下
不是每一套系統都適合進行單元測試
開發時程非常緊湊的專案
- 程式碼撰寫量變大 (原系統程式碼 + 測試程式碼)
- 時程會拉長
需求不確定
- 初期建置需交付Demo
- 若硬要寫可能會因時程拉長, 降低公司業務競爭力
價值性不高
- 產值較低的系統
- 公司認為價值較低的系統
人力成本低的公司
- 要寫出低耦合性的系統, 代表系統架構可能難度較高
- 公司需聘請較多資深工程師, 或聘請外部講師或顧問協助
所以導入自動化測試系統就保證不會有問題?
NO!
畢竟測試也是人寫出來的, 也是會有鬼遮眼的地方
自動化測試比較像是一種買保險概念
若遇到單元測試沒測到的
就只能持續補強各種測試案例
讓系統每次改版與更新都能安安穩穩!