---
# System prepended metadata

title: 我們應該測試什麼
tags: [TDD, Note]

---

# 我們應該測試什麼

## 寫有意義的測試


## 測試驅動設計/設計驅動測試

### 測試驅動設計：
- 寫最簡單的代碼只為了通過測試
- 不去想很多設計,而是從結果開始
    - 由顧客的角度去思考
    - 顧客不需要結構
- 步驟
    - 看需求
    - 設想軟體要處理的問題
    - 寫出測試列表
    - 使用測試列表來引導開發

### 設計驅動測試：
- 寫出 class/function 表
- 並為每個功能寫測試
![](https://i.imgur.com/TAeco4P.png)

## 重複的代碼和 Rule of Three
- Rule of Three
    - 重複同樣代碼至少(平均)三遍再進行重構
    - 為什麼要至少重複三遍
    - 過早進行重構,有可能讓代碼不夠抽象化 
    - 三遍：不用太早也不用太晚
        - 太早：可能會讓代碼抽象化失敗
        - 太晚：重構工作量太重
- 減少重複的代碼 -> 讓重構代碼變得簡單
    - 但在 TDD 過程中會讓重複的代碼變得越來越多
    - (不用設計)
    - 但要額外花時間去重構
    - 但也不要一昧地減少重複
        - 減少代碼可讀性
        - 讓單一測試變得太臃腫


###### tags: `TDD` `Note`