測試相關概念
- Test Data
- 用來測試系統的輸入
- Test Case
- 包含測試步驟、預期結果、測試資料
- Oracle
- 理想的結果,作為判斷測試是否成功的標準
- Verification(驗證)
- 確認系統是否符合規格(specification)
- 若出錯,通常是開發或設計的問題
- Validation(確認)
- 確認系統是否符合使用者需求
- 若出錯,代表產品目標可能有誤
Bug 與錯誤類型
- Bug
- 程式中的錯誤或偏離預期的行為
- Failure
- 偏離預期的事件(event),如系統崩潰或錯誤輸出
- Error
- 導致 failure 的程式錯誤(code issue)
- Fault(缺陷)
- 造成 failure 的設計或開發上的錯誤,可能潛伏在系統內直到被觸發
測試輔助工具
- Stub
- 用來代替其他元件的簡單實作,會回傳硬編碼(hard-coded)值
- Mock
- 類似 stub,但除了回傳預設值,還可驗證是否正確調用
- Driver
- 負責執行測試指令並初始化變數的工具
測試覆蓋率(Test Coverage)
- Line Coverage(行覆蓋率)
- 測試過的程式碼行數相對於總行數的比例
- Branch Coverage(分支覆蓋率)
- 測試所有條件分支是否都被執行過,如 if、switch 內的所有可能路徑
測試類型(Testing Types)
單元測試(Unit Testing)
- 測試程式的最小單位(smallest unit of software)
- 需隔離(isolate)被測單元,避免外部依賴影響測試結果
- 常使用 dummy value、mock 物件來替代外部依賴
整合測試(Integration Testing)
- 測試不同組件(components)之間的交互(communication)和架構(architecture)
- 測試方式
- Big Bang Testing(非漸進式測試)
- 一次測試所有 components,通常用於大型應用程式
- Incremental Testing(漸進式測試)
- 逐步新增模組進行測試,直到完整測試整個系統
- Top-Down Testing
- 從最上層開始,尚未開發的底層使用 stub 代替
- Bottom-Up Testing
- 從最底層開始,尚未開發的上層使用 driver 代替
- Back-to-Back Testing(對比測試)
- 比較已知良好版本與新版本的輸出
- 若 output 相同,則新版本仍保有舊版本的正確功能
- 可作為 incremental testing 的一部分
- Big Bang Testing(非漸進式測試)
黑箱測試 vs 白箱測試
黑箱測試(Black Box Testing)
- 不需要知道內部結構,透過輸入與輸出來驗證系統行為
- 常見測試方法
- Boundary Value Analysis(邊界值分析)
- 測試邊界值,如最大、最小、剛好超出範圍的數值
- Cause-Effect Graph(因果圖測試)
- 一種設計測試案例的方法,也稱為 fishbone diagram
- 不同的輸入條件(cause)會導致不同的結果(effect)
- Pair-Wise Testing(成對測試)
- 測試多個參數的不同組合,減少測試案例數量的同時仍保證足夠覆蓋率
- State-Based Testing(狀態測試)
- 測試不同狀態下的輸入,確認狀態變更的正確性
- Boundary Value Analysis(邊界值分析)
- 測試種類
- Functional Testing(功能測試)
- 確保系統功能符合需求
- Regression Testing(回歸測試)
- 重新測試已驗證過的功能,確保新的修改沒有破壞舊的功能
- Non-Functional Testing(非功能測試)
- 測試效能、安全性、可靠性等非功能性需求
- Functional Testing(功能測試)
白箱測試(White Box Testing)
- 需要了解內部結構,測試程式碼本身
- 常見測試方法
- Control Flow Testing(控制流程測試)
- 設計測試案例,使所有條件分支(branch condition)皆被執行
- Data Flow Testing(資料流測試)
- 測試變數的生命週期,包括變數的定義(declaration)與使用(use)
- Control Flow Testing(控制流程測試)
- 應用範圍
- Unit Testing
- 最主要用於單元測試
- Integration Testing
- 用於確保不同模組之間的溝通正確
- Unit Testing