線上課程 AI x BDD:規格驅動全自動開發術 軟體設計模式精通之旅 合購方案 企業服務 學員案例 部落格 活動 登入 / 註冊

用行為驅動開發(Behavior-Driven Development, BDD)方法論解決 AI 時代軟體開發三大痛點(上)

週五下午,你用 AI 在三十分鐘內生出了一個完整的功能模組。程式碼跑起來了,Demo 也過了,你帶著滿足感關上筆電,準備放假。

週一早上回來,發現有個邊際案例沒覆蓋到。你打開那段程式碼,由於是請 AI 寫的,第一時間還有些看不太懂。你試著請 AI 修,它改了 A 壞了 B,修了 B 又動了 C。

三個小時後,不禁懷疑:「我自己寫,是不是還比較快?」

根據 CodeRabbit 針對 470 個開源 GitHub PR 的分析,AI 協作產出的程式碼平均產生 1.7 倍的問題數量,其中 XSS 等安全漏洞更高達 2.74 倍。而 GitClear 針對大規模程式碼的分析也發現,AI 協作讓程式碼的重複率明顯上升,重構的比例卻反而下降。AI 幫我們寫了更多程式碼,但花在整理上的時間卻更少了。

問題有多嚴重?據 NBC News 報導,Fiverr 平台上 WordPress 錯誤修復需求在半年內暴增 712%;而 404 Media 的調查也揭露,越來越多工程師專門以「清理 AI 產出的程式碼」為業,修復費用往往比一開始就請人寫還高。

而在 2025 年中,規格驅動開發(Spec-Driven Development, SDD) 逐漸在軟工圈中提升能見度,說明未來在撰寫程式碼前,你必須先把規格寫清楚,再讓 AI 動手。


目錄

  1. 規格驅動開發(Spec-Driven Development, SDD):把規格做對
  2. SpecKit 用規格引導 AI,但這樣就夠了嗎?
  3. 寫規格其實是假議題?真正重要的是「做對的規格」

一、規格驅動開發(Spec-Driven Development, SDD):把規格做對

既然 AI 腦補是問題的根源,業界給出的回應是:「在讓 AI 寫程式之前,先把規格寫清楚。」

這個思路被稱為規格驅動開發(Spec-Driven Development, SDD),正在成為 AI 輔助開發中最受關注的方法論之一。

什麼是規格驅動開發?從 Vibe Coding 到 Spec-Driven Development 的轉變

規格驅動開發的核心主張很直接:在生成程式碼之前,先撰寫一份結構化的規格文件,作為 AI 開發的「唯一事實來源」。

這個概念其實不新,但在 AI 寫程式的時代獲得了新的生命。原因在於,當開發者用自然語言跟 AI 對話來寫程式——也就是所謂的 Vibe Coding,效率看似提升了,但問題也跟著來:

  • 你講的是一句話,AI 理解的是另一件事——自然語言本身就充滿模糊空間,AI 只能靠猜來填補你沒說清楚的部分
  • 就算 AI 猜對了大方向,細節上的邊界案例和業務規則往往是錯的,因為這些隱含知識從來沒有被寫下來
  • 更麻煩的是,每一輪修改對話都可能讓 AI 在修 A 的同時破壞 B,程式碼的一致性越改越差

SDD 的回應方式是:與其讓 AI 猜你要什麼,不如先把需求寫成機器也能讀懂的結構化規格。 用這份規格來約束 AI 的行為,讓它在明確的框架內施工。

不過,「先寫規格」這件事在實際做法上有深有淺。從目前業界的嘗試來看,可以大致分成三種程度:

  • 最基本的做法是開發前先寫一份規格,寫完就交給 AI 去實作,規格本身在功能完成後可能就不再維護了——這比 Vibe Coding 好,但規格的生命週期很短,下次改需求時又要重來一遍。
  • 進階一點的做法是讓規格持續活著,功能完成後規格不丟掉,而是隨著系統演進持續更新,成為團隊長期維護的參考文件。
  • 極端的做法則是人類只寫規格、完全不碰程式碼,所有程式碼都由規格自動生成,開發者不再直接改 code。這聽起來很理想,但目前還沒有成熟的工具能穩定做到這件事。

目前大多數 SDD 工具(包括 SpecKit、Kiro)都還停留在第一種程度,也就是「寫完規格就交給 AI」的階段。

層次做法規格的角色
Spec-first(規格優先)開發前先寫規格,完成後規格可能丟棄單次任務的指引
Spec-anchored(規格錨定)規格在功能完成後持續保留,隨功能演進更新長期維護的參考文件
Spec-as-source(規格即原始碼)人類只編輯規格,程式碼完全由規格自動生成唯一的維護對象

規格驅動開發如何減少 AI 寫程式的反覆修改?

為什麼有了規格,AI 就能減少反覆修改?來看一個對比。

沒有規格時(Vibe Coding):

你:「幫我做一個員工出勤打卡功能。」

AI 生成了一個基本的打卡按鈕和時間紀錄。但你的系統其實需要區分上班打卡和下班打卡、遲到要自動標記,而且跨日夜班的打卡時間計算邏輯完全不同。

於是你開始一輪又一輪的修改對話,每次 AI 都只改了你提到的部分,又在別的地方造成新問題。

有規格時(SDD):

先在 spec.md 中定義:打卡分為上班/下班兩種類型、上班時間超過 09:00 標記為遲到、夜班跨日以班表起始日為基準計算、每人每日限打卡兩次。

AI 根據這份規格一次生成符合所有條件的實作,因為它不需要猜測任何隱含需求。

這就是 SDD 減少反覆修改的核心概念:

  • 減少 AI 的「腦補」空間:規格把模糊的自然語言轉換成結構化的需求描述,AI 不再需要自行填補資訊空白
  • Token 效率提升:當指令精確時,AI 不需要反覆試錯,Token 用量會明顯下降
  • 開發流程標準化:SDD 將開發拆分為「定義、規劃、分解任務、實作」四個階段,每個階段都有明確的檢查點,錯誤能在早期被攔截,而不是累積到最後才爆發

二、SpecKit 用規格引導 AI,但這樣就夠了嗎?

SDD 的概念聽起來合理,但實際用起來呢?

目前最具代表性的 SDD 工具是 GitHub 開源的 SpecKit。它把上述的 SDD 理念落地成一套具體的工作流程。

水球我先講結論:在工具層面,它能夠高效地協助你拆解與管理規格、提出技術方案並產出任務清單,AI 再按清單逐項實作。因此在開發者社群中引起不少討論。讓我們快速看看它做到了什麼,又留下了什麼無解的問題。

SpecKit 的四階段流程解決了什麼?

SpecKit 將 AI 輔助開發標準化為四個階段,每個階段都必須經過開發者驗證才能進入下一步:

階段做什麼產出
Specify(定義)用自然語言描述需求與成功定義spec.md
Plan(規劃)AI 根據規格提出技術方案與架構設計plan.md
Tasks(分解任務)拆解為 15–30 分鐘可完成的小任務任務清單
Implement(實作)AI 按任務清單逐項完成程式碼功能模組

這套流程的價值在於:它強迫開發者在寫程式之前先想清楚需求,也讓 AI 在明確的框架內工作,而不是自由發揮。對全新專案(Greenfield)和為既有系統新增功能的場景來說,這確實比 Vibe Coding 有效率得多。

SpecKit 在實戰中遇到的三個瓶頸

不過,當開發者真正把 SpecKit 用在實際專案中,幾個問題很快浮現。

瓶頸一:審閱疲勞,文件比程式碼還難讀

SpecKit 在每個階段都會生成 Markdown 文件。一個中型功能(約 3–5 個使用者故事)下來,產出的 .md 檔案數量多到讓人覺得負擔很大。

這些文件彼此重複、與程式碼內容重疊,而且後續只能靠 Ctrl+F 來查找——維護成本反而比直接審閱程式碼更高。 換句話說,原本是為了提升品質才導入的文件流程,結果反而讓效率越改越糟。

瓶頸二:規格寫了,不代表 AI 會照做

即使有了詳盡的規格,AI 仍然會忽略指令或過度執行規則。

在實測中,Agent 有時會無視現有類別的描述而重新生成重複的程式碼,有時則漏掉需要一併更新的既有函式。SDD 工具確實能把開發的精準度拉高一大截,但剩下的那一部分仍然需要開發者手動介入,而那往往是最棘手的,因為會花費更多時間修改。

瓶頸三:規格寫出來了,但沒人驗證「寫對了沒」

這是最根本的問題。

SpecKit 擅長的是「把規格寫出來」和「按規格切分任務」,但它缺少一個關鍵環節:自動化驗證規格本身是否正確。

規格文件是靜態的 Markdown,它無法自己告訴你「這條需求描述是否真的涵蓋了所有業務場景」。當規格本身有遺漏或偏差時,後面再精確的流程也只是在把錯誤的東西做得更快。

這就引出了一個更根本的問題:重點不是把規格寫出來,而是怎麼確認 AI 做出來的到底對不對。 如果規格本身沒有被驗證的機制,那我們只是把「猜測」換了一個更正式的格式而已。

要解決這個問題,需要一套完全不同的思維。


三、寫規格其實是假議題?真正重要的是「做對的規格」

目前為止,我們與 AI 協作開發的路上,經歷了以下路徑:

  1. AI 確實為軟體工程突破效率瓶頸,但我們累積的是未來高昂的維護成本。
  2. 規格驅動開發(SDD) 強調:「先把規格寫清楚,再交給 AI 開發」。
  3. SpecKit 把 SDD 工具化了,但碰到了瓶頸;那就是:「寫清楚規格」和「寫對的規格」是兩件不同的事。

你可以把每個 API endpoint 的參數、回傳格式、錯誤處理都鉅細靡遺地寫出來,讓規格看起來非常「清楚」。但如果使用者真正需要的行為和你定義的功能有落差呢?

這就是為什麼水球我認為,我們需要回到一個已經被驗證超過十年的方法論:行為驅動開發(Behavior-Driven Development, BDD)。

行為驅動開發最早由 Dan North 提出,它是測試驅動開發(Test-Driven Development, TDD)的延伸,但有一個根本性的轉向:從「程式碼要通過什麼測試」,轉向「系統應該展現什麼行為」。

BDD 的三個核心主張

一、從使用者行為出發定義需求,而非從技術架構出發

用一種叫做 Gherkin 的領域特定語言(Domain-Specific Language, DSL),讓團隊的技術與非技術角色,都能聚焦在產品應該發生的效果,而不是技術細節。

二、用實例化需求(Specification by Example, SBE)強調協作與範例

BDD 的核心流程不是一個人關起門來寫規格,而是開發者、測試人員、產品經理一起用具體範例來探索需求的邊界。

三、可執行規格(Executable Specification):規格就是測試

這是 BDD 和 SDD 最關鍵的區別。 當 AI 生成的程式碼不符合行為定義時,測試會立刻失敗;規格自己會告訴你「這段程式碼不對」。


AI 在這個流程中的角色,將會從一個寫 code 的角色,轉變為從需求探索就開始參與、貫穿整個開發流程,實踐「用 AI 幫你找到對的規格,再用規格保護 AI 產出的程式碼」。

但是,讓 AI 輔助的 BDD 具體實作到底長什麼樣?用什麼工具?怎麼運行的?一個真實的開發場景從頭到尾該怎麼走?

這些問題的答案,我們放在系列文的下一篇。如果你已經感受到「寫對規格」比「寫清楚規格」更重要,那下一篇將帶你看到:當 BDD 遇上 AI,開發效率的天花板會被推到什麼程度。

繼續閱讀:用 BDD 方法論解決 AI 時代軟體開發三大痛點(下)

想完整學會 AI x BDD 全自動開發?
看課程方案 →

立即訂閱水球軟體學院部落格的電子報,接收最前沿的軟體工程方法學問

訂閱即表示你同意我們依隱私權政策處理你的 Email

加入 LINE OA