---
# System prepended metadata

title: TDD (Test-Driven Developer)

---

# TDD (Test-Driven Developer)
TDD(test-driven develop) 以測試帶動開發，利用先撰寫測試讓開發人員能針對需求釐清功能

## TDD 5 step 紅綠測試
1. **撰寫測試function**: 撰寫功能前，需釐清功能規範，並撰寫測試
2. **執行測試function**: 確保所有測試都Fail，以此驗證測試程式符合測試需求
3. **撰寫功能程式**: 建立最小可最簡單符合測試的需求功能
4. **執行測試**: 最小可測試程式必須通過所有測試
5. **重構並改進**: 進行功能程式的重構、修改，將程式完善，或發掘新需求，再從第一步驟開始新增測試功能。

`除新增的測試外，也要確保新增的功能符合舊有已開發測試程式`

## 優點: 
1. 以測試帶動開發，利用先撰寫測試讓開發人員能針對需求釐清功能，並確保功能定義良好，不然無法建立測試，這迫使開發人員首先考慮接口，而不是僅僅只是直接開發。

2. 雖然先行撰寫測試有時可能會撰寫更多程式，但往往能事先避免事後花費大量時間Debug，讓你能更早偵測到錯誤，為您省下大量時間

3. 練習撰寫測試程式，能迫使自己使用設計原則和設計模式來撰寫易於擴展和測試的程式碼，最終會讓你的程式碼更易於維護

## 缺點:
1. 單元測試較適合穩定發展的公司，產品、客戶等等，功能都有一定的穩定度，相比新創公司，需要快速交付產品得到市場回饋，或者時常更改產品需求，TDD會讓開發成本大幅提升，這時需要在這之中找到平衡點。

2. 通常開發測試集的人員與開發功能的人是同一個，所以在功能上常常會有盲點，如果在較大的團隊中，可以將撰寫測試的開發人員與主要功能開發人員分開，較能避免Bug盲點，以避免以錯誤方式測試錯誤的程式，在後期交付客戶才發現功能開發上的問題。



## 參考資源
- Youtube- [Test-Driven Development In Python](https://www.youtube.com/watch?v=B1j6k2j2eJg)
