通用術語
- Test data
- 用來測試系統的輸入
- Test case
- 包含測試步驟, 預期結果, 測試資料
- Oracle
- 理想的結果
- Bug
- error 或是偏離預期的行為
- 用詞
- failure
- 偏離預期的 event
- error
- 導致 failure 的 code part
- fault
- outcome
- failure
- Verification
- 確認系統是否符合 specifcation
- 這裡出問題是工程師的錯
- Validation
- 確認系統是否符合使用者需求
- 這裡出問題代表產品目標有錯
- Stub
- 用來代替其他 component 的 template,會回傳 hard-coded value
- Mock
- 用來代替其他 component 的 template,會回傳預先設定的值,而且會檢查調用的次數
- Driver
- 用來執行 commands 還有初始化變數的 template
Test coverage
- line coverage
- 根據程式碼實際執行的程式碼行數來計算
- branch coverage
- 檢查程式碼是不是不同的可能都跑過
- 考慮 if, switch…
- 檢查程式碼是不是不同的可能都跑過
Testing Types
Unit Testing
- 專注在測試 smallest unit of software
- 要 isolate unit,避免其他 unit 影響測試結果
- 用 dummy value
Integration Testing
- 專注在測試 communication 和 architecture
- type
- non-incremental
- 一次測試所有 component,測試整個應用程式
- Big Bang Testing
- incremental
- 每次新增一個 module,做一些測試,反覆執行
- Top-Down Testing
- 從最上層開始,下面調用的部分用 stub 代替
- Bottom-Up Testing
- 從最底層開始,上面呼叫的部分用 driver 代替
- non-incremental
- Back-to-Back Testing
- 把已知良好的版本和新版本比較
- 如果 output 一樣,就代表新版本舊的功能是正確的
- 可以是 incremental testing 的一部分
Black Box vs White Box Testing
- Black Box Testing
- 不需要知道內部結構
- 用 input 和 output 來測試
- Boundary Value
- 測試高低邊界值,過了就假設中間都過了
- Cause-Effect Graph
- 一種設計 Test Case 的方法
- 又稱為 fishbone diagram
- 不同的 cause 會導致不同的 effect
- 最後會有一個 table 來表示所有可能輸入的組合會對應到什麼結果
- Pair-wise Testing
- 測試多個參數的可能組合
- State-based Testing
- 測試不同狀態下的輸入,確認 state 改變的情形
- White Box Testing
- 知道內部原理,嘗試測試程式碼本身
- Control Flow Testing
- 寫涵蓋所有 branch condition 的 test case
- Data Flow Testing
- test case 要涵蓋所有的變數,包含 declaration 和 use