Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

網站會不定期發佈技術筆記、職場心得相關的內容,歡迎關注本站!

網站
首頁關於我部落格
部落格
分類系列文

© 新人日誌. All rights reserved. 2020-present.

SDD(Spec Driven Development):用規格驅動開發,讓 AI 寫出更可靠的程式碼

最後更新:2026年4月1日基礎概念

你有沒有過這種經驗:用 AI 寫程式,來回改了十幾次,結果還是不如預期?

問題可能不在 AI,而在你給指令的方式。

這篇文章要介紹一個正在改變 AI 開發方式的方法——Spec Driven Development(規格驅動開發),簡稱 Spec Coding。

它和你可能聽過的 Vibe Coding 不一樣,Spec Coding 會先寫好「規格」,再讓 AI 動手寫程式。

這樣做的好處是:AI 不用猜你要什麼,你也不用來回修改到崩潰。

什麼是 Vibe Coding?

在了解 Spec Coding 之前,先來看看大多數人目前怎麼用 AI 寫程式。

Vibe Coding 就是你直接跟 AI 對話,告訴它「我要做一個什麼樣的功能」,然後讓 AI 開始產生程式碼。

簡單來說,就是「憑感覺寫程式」——你不需要事先規劃,只要把想法丟給 AI,它就會幫你生出一段程式碼。

整個流程是這樣運作的:

第一步:撰寫初始 Prompt

你打開 AI 程式助手(不管是瀏覽器上的工具,還是裝在自己電腦上的 IDE 外掛),然後寫一段 prompt 給 AI。

例如:「幫我用 Python 做一個登入功能」或是「我需要一個 Java 的 REST API」。

這段 prompt 就是你跟 AI 溝通的起點。

第二步:AI 產生初版程式碼

AI 收到你的 prompt 後,會根據它在訓練過程中學到的知識,產生一段它「認為」最符合你需求的程式碼。

這時候你會拿到一份初版的樣板程式碼(boilerplate code),通常可以直接跑起來。

到這一步為止,一切看起來都很美好。

第三步:修改 Prompt,反覆調整

但問題來了——AI 產生的程式碼,很可能不是你想要的樣子。

也許它用了你不熟悉的套件,也許它的架構跟你想的不一樣,也許某個功能完全沒做到。

這時候你就要回去修改 prompt,跟 AI 說:「不對,我想要用另一個 library」或「這個部分的邏輯要改」。

然後 AI 會重新產生程式碼,你再看一次,不滿意就再改 prompt。

這個「修改 Prompt → AI 重新產生 → 再修改」的循環,就是 Vibe Coding 的核心。

第四步:達到預期的實作結果

經過幾輪來回之後,你最終會拿到一個接近你想要的結果。

聽起來很直覺,對吧?

Vibe Coding 確實很適合拿來快速做原型(prototype)或是小型實驗,因為你可以在幾分鐘內就拿到一段可以跑的程式碼,不需要從零開始慢慢寫。

但如果你要做的是一個有一定規模的專案,Vibe Coding 的來回修改成本會越來越高,有時候甚至比自己寫還花時間。

Vibe Coding 的問題在哪?

雖然 Vibe Coding 用起來像魔法一樣快,但它有兩個根本性的問題。

問題一:AI 的決策是一個黑箱

當你跟 AI 說「幫我做一個登入頁面」,AI 內部其實有非常多種方式可以實作這個功能。

它可能選擇用 Session 來管理登入狀態,也可能用 JWT Token,也可能用 OAuth 第三方登入。

它可能把密碼存在資料庫,也可能用 bcrypt 加密,也可能用其他你沒聽過的方式。

問題是:你不知道 AI 為什麼選了這個方案,而不是另一個。

更麻煩的是,你用同樣的 prompt 跑 100 次,可能每次拿到的結果都不一樣。

今天它用了 library A,明天它用了 library B,後天它可能又換了一個完全不同的架構。

這就是為什麼很多人覺得用 AI 寫程式「不穩定」——不是 AI 變笨了,而是你的指令給了它太多自由發揮的空間。

問題二:跳過了軟體開發最重要的第一步

在傳統的軟體工程裡,有一個被廣泛使用的開發框架叫做 SDLC(Software Development Lifecycle),中文叫「軟體開發生命週期」。

它定義了一個軟體從無到有、從開發到上線的完整流程。

SDLC 的五個階段分別是:

規劃與設計

這是整個流程的起點。

在寫任何一行程式碼之前,你要先搞清楚:這個專案要解決什麼問題?使用者是誰?功能有哪些?

這些需求會被整理成一份文件,通常叫做 PRD(Product Requirements Document,產品需求文件)。

PRD 就像是蓋房子之前的藍圖——沒有藍圖就開工,蓋出來的東西大概率會歪。

實作

有了需求文件之後,工程師才會根據這份文件開始寫程式。

因為大家對「要做什麼」已經有共識,所以寫出來的程式碼也會更有方向。

測試

程式寫完之後,會進入測試階段,也叫 QA(Quality Assurance,品質保證)。

這個階段要確認每個功能都能正常運作,有沒有 bug、有沒有安全性漏洞。

部署

測試通過後,程式碼會從開發環境(dev)推到測試環境(staging),最後再推到正式環境(production)讓真正的使用者使用。

維護

上線不是終點。

上線之後還要持續修 bug、根據使用者回饋改進功能、處理各種突發狀況。

Vibe Coding 跳過了哪一步?

看完 SDLC 的流程,你應該發現了——Vibe Coding 基本上跳過了第一步「規劃與設計」,直接從第二步「實作」開始。

你沒有先想清楚需求是什麼,就直接讓 AI 動手寫。

AI 不知道你的全貌,只能根據你那一句 prompt 去猜。

這在做小專案或快速原型的時候沒什麼問題,反正改一改就好。

但當你的專案有一定規模,功能之間有依賴關係,需要多人協作的時候,少了「規劃」這一步,後面的修改成本會像滾雪球一樣越來越大。

有時候來回跟 AI 修改的時間,甚至比你自己從頭寫還要久。

什麼是 Spec Driven Development(規格驅動開發)?

了解了 Vibe Coding 的問題之後,我們來看看 Spec Driven Development 是怎麼解決這些問題的。

Spec Driven Development(規格驅動開發) 的核心概念很簡單:先寫規格,再讓 AI 寫程式。

這裡的「規格(Spec)」指的是一份描述系統行為的文件,它會清楚定義:

  • 這個功能的行為是什麼?(例如:使用者送出帳密後,系統要驗證並回傳 token)
  • 有哪些限制條件?(例如:密碼至少 8 個字元,帳號不能重複)
  • 遇到錯誤時要怎麼處理?(例如:密碼錯誤回傳 401,缺少欄位回傳 400)
  • 預期的輸入和輸出分別是什麼?(例如:輸入 user + pass,成功輸出 JWT token)

規格就像一份合約

你可以把這份規格想像成你跟 AI 之間的一份合約。

在 Vibe Coding 裡,你只跟 AI 說了一句「幫我做登入功能」,剩下的全部讓 AI 自己決定。

這就像你跟裝潢師傅說「幫我弄一個漂亮的客廳」,然後就離開了——師傅可能裝了你不喜歡的風格,你回來一看只能打掉重做。

但在 Spec Coding 裡,你會先寫清楚:「客廳要北歐風格、地板用淺色木紋、沙發靠左牆、電視掛右牆、預算 30 萬以內。」

師傅拿到這份規格,做出來的東西自然會更接近你的期待。

AI 也是一樣的道理。

一份規格,同時產出四件事

Spec Coding 跟 Vibe Coding 最大的差別在於:規格不只是拿來寫程式碼用的。

你可以把規格想像成一顆種子——種下去之後,它會同時長出好幾樣東西。

同一份規格可以讓 AI 同時幫你完成四件事:

產出程式碼

因為規格已經把每個行為都寫清楚了(例如「POST /login 接受 user 和 pass 兩個參數」),AI 不需要猜你想怎麼實作,直接照著規格寫就好。

產出測試案例

規格裡面寫了「正確的帳密要回傳 200」、「密碼錯誤要回傳 401」——這些規則本身就是測試案例。

AI 可以直接根據這些規則,自動產生對應的測試程式,不用你再另外寫。

產出技術文件

規格本身就是一份可以閱讀的文件。

其他工程師看了這份規格,不用去翻程式碼,就能知道這個功能在做什麼、接受什麼參數、會回傳什麼結果。

產出驗證標準

功能做完之後,你可以拿規格逐條比對——AI 做出來的東西,有沒有符合每一條規則?

如果某一條沒通過,你馬上知道問題出在哪,不用大海撈針。

換句話說,規格變成了整個專案的唯一事實來源(Single Source of Truth)。

不管是寫程式、寫測試、寫文件、還是驗收功能,全部都是從這同一份規格展開的。

一句話總結 Vibe Coding 和 Spec Coding 的差異

Vibe Coding 是讓 AI 猜你要什麼;Spec Coding 是告訴 AI 你要什麼。

Vibe Coding 把決定權交給了 AI,你只能在事後修正;Spec Coding 把決定權留在你手上,AI 只負責執行。

Spec Coding 的完整流程

Spec Coding 的流程分成幾個階段,每個階段都有明確的產出:

第一步:寫 Prompt(但不是寫實作)

和 Vibe Coding 一樣,你還是從 prompt 開始。

但差別是,你不是在描述「怎麼做」,而是在描述「要做什麼」。

你寫的是系統的行為(behavior)和限制條件(constraints)。

第二步:產生需求規格(Requirements)

AI 根據你的描述,產生一份需求規格文件。

這份文件會定義整個專案的層級結構:功能要怎麼分、測試要怎麼做、文件要怎麼寫。

第三步:審核需求

這一步很關鍵——你要自己看過這份需求規格。

如果滿意,就進入下一步。

如果不滿意,就修改規格,而不是修改程式碼。

因為到這裡為止,AI 還沒寫任何一行程式。

在這個階段修改的成本非常低。

第四步:產生設計文件(Design Document)

需求確認後,AI 會根據規格產生一份設計文件。

這份文件會列出每個功能的具體實作方式,像是待辦清單一樣。

第五步:實作

如果你對設計文件也滿意,就讓 AI 開始動手寫程式。

因為有明確的規格和設計文件,AI 產生的程式碼會更穩定、更符合你的預期。

實際範例:用戶登入功能

來看一個具體的例子,比較 Vibe Coding 和 Spec Coding 的差異。

Vibe Coding 的做法

你直接跟 AI 說:

幫我做一個 /login 頁面,讓用戶可以登入。

AI 可能用 Session、可能用 JWT、可能用 OAuth,你完全無法預期。

來回修改個五六次是家常便飯。

Spec Coding 的做法

你會先寫一份規格,像這樣:

功能:用戶認證(User Authentication)

端點:POST /login

接受參數:
  - user(字串,必填)
  - pass(字串,必填)

錯誤處理:
  - 如果缺少 username,回傳錯誤碼

測試案例:
  - 正確的帳密 → 回傳 200
  - 缺少帳號 → 回傳對應錯誤
  - 密碼錯誤 → 回傳 401

注意到了嗎?這份規格裡面沒有任何一行程式碼。

但 AI 拿到這份規格後,它知道端點在哪、參數是什麼、錯誤要怎麼處理、測試案例有哪些。

AI 不用猜了。

而且這份規格本身就可以用來產生測試,確保 AI 寫的程式碼符合你的要求。

Spec Coding 和其他開發方式有什麼不同?

軟體開發的歷史上,出現過很多不同的開發方法論。

為了幫你更清楚理解 Spec Coding 的定位,我們來比較三種常見的開發方式。

傳統開發:先寫程式碼,再補文件

這是最早、也是最直覺的做法。

工程師拿到需求後,靠自己的直覺和經驗直接開始寫程式碼。

程式碼寫完能跑了,再回頭補上文件和註解,記錄自己做了什麼。

這個方式的好處是啟動速度快,不需要事前準備太多東西。

但缺點也很明顯:因為沒有事先規劃,程式碼的結構容易變得混亂,文件也經常寫得不完整(甚至根本忘了寫)。

而且,如果換一個工程師來接手,他只能看程式碼猜你當初在想什麼。

測試驅動開發(TDD):先寫測試,再寫程式碼

TDD 是 2000 年代開始流行的開發方法。

它的核心概念是:在寫任何程式碼之前,先寫測試。

舉個例子,假設你要做一個「計算兩數相加」的功能。

在傳統開發裡,你會直接開始寫加法的程式碼,寫完再手動算算看答案對不對。

但在 TDD 裡,你會反過來。

你會先寫一支小程式,這支小程式不做任何功能,它唯一的工作就是「檢查」——去呼叫你還沒寫好的加法功能,然後看看結果是不是 5。

如果是 5,它會告訴你「通過」;如果不是 5,它會告訴你「失敗」。

這支專門用來檢查的小程式,就叫做「測試」。

注意,這時候你只寫了這支檢查用的小程式,真正的加法功能還沒寫。

所以你一跑測試,結果一定是「失敗」——因為加法功能根本不存在。

接下來,你才去寫真正的加法程式碼。

寫完之後再跑一次測試,如果這次顯示「通過」,就代表你的加法功能是正確的。

這就是 TDD 的邏輯:先寫檢查用的小程式,再寫真正的功能,最後用檢查程式驗證功能對不對。

通過之後,你再重構(refactor)程式碼,讓它更乾淨。

這個「寫測試 → 寫程式 → 重構」的循環,就是 TDD 的核心流程。

TDD 的好處是:你從一開始就知道程式碼「應該做什麼」,而且每次改動都有測試保護,不容易改壞東西。

但 TDD 有一個前提——寫程式碼的人是你自己。

因為是你在寫,你腦中有完整的上下文,就算測試寫得不夠詳細,你也知道該怎麼做。

規格驅動開發(Spec Driven Development):先寫規格,再讓 AI 寫程式碼

Spec Driven Development 可以看成是 TDD 和行為驅動開發(BDD)的進階版。

BDD(Behavior Driven Development) 是 TDD 的延伸,它強調用「人類看得懂的語言」來描述系統行為,而不是用程式碼寫測試。

Spec Coding 把這個概念再往前推一步:你不只描述行為,還要把限制條件、錯誤處理、輸入輸出格式全部寫清楚,變成一份完整的規格文件。

然後把這份規格交給 AI,讓 AI 去產生程式碼、測試、和文件。

為什麼在 AI 時代,規格變得更重要?

關鍵差異在這裡:

在傳統開發和 TDD 裡,寫程式碼的人是你自己。

就算需求寫得不夠清楚,你腦中有完整的上下文,你知道這個專案的背景、技術限制、使用者是誰。

但在 Spec Coding 裡,寫程式碼的人是 AI。

AI 沒有你腦中的上下文,它只看得到你給它的那份規格。

規格寫得越清楚,AI 的產出就越穩定、越接近你的預期。

規格寫得越模糊,AI 就越容易猜錯,你就得花越多時間來回修改。

所以在 AI 時代,寫規格的能力,可能比寫程式碼的能力更重要。

小結

讓我們整理一下這篇文章的重點:

  • Vibe Coding 適合快速原型和小實驗,但因為指令模糊,AI 的產出不穩定。
  • Spec Driven Development 先寫規格再讓 AI 寫程式,產出更可預期、更可靠。
  • Spec Coding 的核心流程是:Prompt → 需求規格 → 審核 → 設計文件 → 實作。
  • 在規格階段修改的成本遠低於在程式碼階段修改。
  • 規格本身就可以用來產生測試案例,形成完整的品質保證流程。

現在 AI 寫程式的能力越來越強,但「怎麼跟 AI 溝通你要什麼」才是最關鍵的技能。

寫好規格,就是跟 AI 溝通最有效的方式。

目前還沒有留言,成為第一個留言的人吧!

發表留言

留言將在審核後顯示。

基礎概念

目錄

  • 什麼是 Vibe Coding?
  • Vibe Coding 的問題在哪?
  • 問題一:AI 的決策是一個黑箱
  • 問題二:跳過了軟體開發最重要的第一步
  • Vibe Coding 跳過了哪一步?
  • 什麼是 Spec Driven Development(規格驅動開發)?
  • 規格就像一份合約
  • 一份規格,同時產出四件事
  • 一句話總結 Vibe Coding 和 Spec Coding 的差異
  • Spec Coding 的完整流程
  • 第一步:寫 Prompt(但不是寫實作)
  • 第二步:產生需求規格(Requirements)
  • 第三步:審核需求
  • 第四步:產生設計文件(Design Document)
  • 第五步:實作
  • 實際範例:用戶登入功能
  • Vibe Coding 的做法
  • Spec Coding 的做法
  • Spec Coding 和其他開發方式有什麼不同?
  • 傳統開發:先寫程式碼,再補文件
  • 測試驅動開發(TDD):先寫測試,再寫程式碼
  • 規格驅動開發(Spec Driven Development):先寫規格,再讓 AI 寫程式碼
  • 為什麼在 AI 時代,規格變得更重要?
  • 小結