為何 SRE 與測試密不可分#
測試是 SDLC 不可或缺的一環,目的是在軟體上線前找出 bug、錯誤與缺陷。
測試愈詳盡、愈嚴謹,系統愈穩定。SRE 才能把心力放在 production 的其他面向,而非疲於繞過錯誤。
各種測試類型#
單元測試(Unit testing)#
- 開發者在自己模組上做的低階測試
- 通過後才把程式碼合進中央倉庫
- 多數開發工具內建單元測試框架,可直接客製
- 屬於功能性測試,但範圍小
功能測試(Functional testing)#
聚焦業務需求,驗證動作的輸出是否正確(而非中間狀態):
- 回歸測試(Regression testing):每次合併新程式碼後執行,確認沒破壞既有功能
- 遞增測試(Progression testing):針對新程式碼測試是否有新缺陷
例如服務 A 應傳資料給服務 B,若資料順利送達,功能測試就通過;但服務 A 花了 1 小時才送達這種「中間狀態」,不在功能測試範疇,要靠效能測試補捉。
使用者測試(User testing)#
- 模擬使用者在完整應用環境的行為
- 多從 UI 切入,但失敗會反映後端問題
- 與單元、功能測試相互關聯
效能測試(Performance testing)#
- 在特定工作負載下評估系統表現
- 確保高峰流量下的效能與可靠性
- 自動化工具可注入大量請求,用來找瓶頸與穩定度
混沌測試(Chaos testing)#
- 在受控環境中蓄意注入故障,驗證系統的反應與韌性
- 是降低未發生即下線的重要實踐
冒煙測試(Smoke testing)#
- 又稱 shakedown 測試
- 端對端驗證系統基本功能
- 多在 pre-production 上線前最後執行
- 確認應用「能否走完最基本流程」

Figure 3.2: Overview of various phases of testing
測試的價值#
- 產品品質:每種測試各補不同層面的缺陷,反覆迭代直到系統穩定
- 安全:及早抓出程式中的安全漏洞與敏感資料外洩風險,並驗證基礎設施安全(OS 版本、防火牆等)
- 節省成本:愈早發現問題愈便宜;上線後再修要付出更高代價
- 系統效能:理解高負載與故障下的行為,協助 SRE 為 production 做好準備
- 客戶滿意:少 bug、多穩定,是客戶滿意度的根本
案例:2017 AWS S3 災難#
2017 年 AWS S3 大規模當機,影響全球數千家業務。根因是一道 S3 擴充指令的錯字,意外移除大批伺服器。本可在較低層環境先測試指令而避免——這個案例說明基礎設施程式碼也必須測試,不是只有業務邏輯需要驗證。
多階段測試的真實流程#
- 開發完成後,CI/CD 把程式碼部署到測試環境
- QA 進行多種功能測試,包括遞增與回歸測試
- 通過後部署到 pre-production 環境
- SRE 在此進行混沌測試與效能測試
- 全部通過後才能進入 production
測試應該嵌入 SDLC 的每個階段,不是某一階段的單獨任務。挑選內建測試能力的工具,並讓 QA 用自動化測試案例擴大覆蓋範圍,是維持系統穩定與提升客戶滿意的捷徑。