Spec-Driven Development 是什麼?
用「規格」驅動開發,而不是靠感覺寫程式
在實務開發中,你是否遇過這些狀況:
-
功能寫完才發現「跟需求理解不一樣」
-
PM 說「我以為你知道我要的是這個」
-
文件寫了,但從來沒有人照著文件實作
-
API 文件永遠落後實際程式碼
這些問題的核心,其實都指向同一件事:
👉 規格(Specification)沒有成為開發的核心事實來源(Single Source of Truth)
而 Spec-Driven Development(規格驅動開發),正是為了解決這類問題而出現的一種開發思維與流程。
一、什麼是 Spec-Driven Development?
Spec-Driven Development(SDD) 是一種:
先定義「可驗證的規格(Specification)」,再依照規格進行實作、測試與驗證的開發方式
在 SDD 中:
-
規格不是附屬文件
-
規格本身就是開發依據
-
程式碼必須滿足規格,而不是反過來
規格通常包含哪些內容?
依系統類型不同,Spec 可能是:
-
API 規格(OpenAPI / Swagger)
-
行為規格(Given / When / Then)
-
狀態轉移規格(State Machine)
-
合約規格(Contract / Invariant)
-
Domain 規則(Business Rules)
重點不是「格式」,而是:
規格必須清楚、可討論、可驗證
二、Spec-Driven Development 怎麼使用?(實際流程)
以下是一個典型的 SDD 開發流程:
Step 1:先寫「規格」,不是先寫程式
例如 API 規格(OpenAPI):
此時你還沒有任何 Controller / Service / DB Code。
Step 2:與利害關係人確認 Spec
-
PM:確認流程與欄位是否正確
-
前端:確認 request / response
-
QA:確認邊界條件與錯誤情境
👉 規格就是討論的共同語言
Step 3:用 Spec 驅動實作
開發時:
-
Controller → 對應 Spec
-
Validation → 來自 Spec
-
Domain Logic → 不得違反 Spec 定義
很多團隊會:
-
直接從 Spec 產生 API Stub
-
或產生 Client SDK / Mock Server
Step 4:用 Spec 驗證結果
-
Contract Test
-
API Test
-
BDD 測試(Spec = Test Case)
👉 測試不是猜需求,而是驗證規格
三、Spec-Driven Development 的優勢
1️⃣ 降低需求誤解成本
規格是:
-
明確的
-
可閱讀的
-
可驗證的
比起「口頭需求」或「模糊文件」,錯誤更早被發現。
2️⃣ 規格成為 Single Source of Truth
-
不再有「文件一套、程式一套」
-
規格 = 設計 = 驗收標準
3️⃣ 非同步協作能力大幅提升
前後端可以:
-
同時開發
-
用 Mock Server 對接
-
不互相等待
4️⃣ 測試與驗證更自然
Spec 本身就能轉成:
-
API Test
-
Contract Test
-
BDD Scenario
👉 測試不是額外負擔,而是規格的一部分
5️⃣ 對大型系統、微服務特別友善
-
合約清楚
-
服務邊界明確
-
版本控管容易
四、Spec-Driven Development 與傳統開發差在哪?
| 面向 | 傳統開發 | Spec-Driven Development |
|---|---|---|
| 開發起點 | 先寫程式碼 | 先定義規格(Specification) |
| 文件角色 | 事後補寫,容易與實作不一致 | 核心依據,規格即事實來源 |
| 溝通方式 | 口頭說明或即時討論為主 | 以規格文件作為共同語言 |
| 測試來源 | 依開發者理解自行撰寫 | 直接驗證是否符合規格 |
| 變更成本 | 後期才發現問題,修正成本高 | 規格階段即可發現,成本較低 |
簡單一句話總結:
傳統開發是「程式碼導向」
SDD 是「契約導向」
五、Spec-Driven Development 的缺點與限制
SDD 並不是銀彈,實務上也有代價。
❌ 1️⃣ 前期成本較高
-
需要時間寫 Spec
-
需要訓練團隊閱讀與撰寫規格
👉 對小型、短期專案可能顯得「太重」
❌ 2️⃣ 規格寫不好,反而更痛苦
-
規格過度抽象 → 沒用
-
規格過度細節 → 綁死實作
👉 Spec 需要經驗累積
❌ 3️⃣ 需求頻繁變動時,維護成本高
如果需求:
-
每天改
-
邏輯尚未穩定
Spec 會一直被推翻,反而拖慢節奏。
❌ 4️⃣ 不適合探索型 / 原型階段
-
PoC
-
快速試錯
-
創意探索
👉 比較適合 需求已相對明確的系統
六、什麼情境特別適合用 Spec-Driven Development?
非常適合以下場景:
-
✅ API / 微服務
-
✅ 金流、訂單、帳務系統
-
✅ 區塊鏈 / 跨鏈 / 協議型系統
-
✅ 多團隊協作
-
✅ 對正確性要求極高的系統
(這點其實非常符合你目前研究的跨鏈 / 協議 / Relay Chain 類型系統)
七、總結
Spec-Driven Development 的核心精神不是工具,而是一個觀念:
「先把系統要『做什麼』說清楚,再討論『怎麼做』」
它讓:
-
規格 → 成為契約
-
程式 → 成為實現
-
測試 → 成為驗證
如果你曾經因為「需求不清楚」而反覆返工,
那 SDD 會是一個值得嘗試的開發思維。
留言
張貼留言