SDD 和 TDD 是什麼關係?可以同時使用嗎?
SDD(規格驅動開發)與 TDD(測試驅動開發)並不互斥,兩者關注的層次截然不同。SDD 著重在動筆寫程式之前先釐清「要做什麼」,將需求、系統邊界與驗收標準以結構化文件明文化,讓整個團隊(包括 AI 代理)對目標擁有共同認知。TDD 則著重在實作層面,以一個先失敗的紅燈測試來引導程式碼生長,確保每行新程式碼都有對應的驗證。在 Spec Kit 的工作流程中,speckit.specify 產生的 spec.md 正好為 TDD 提供精確的測試目標——你可以直接把驗收條件(Acceptance Criteria)逐條翻譯成測試案例,再開始紅綠重構循環,兩套方法論相輔相成而非競爭。
若你的團隊已有成熟的 TDD 文化,Spec Kit 只需補上「需求文件化」這一環,幾乎不需要改變既有的測試習慣。反過來說,若你原本就採用 SDD,加入 TDD 只是讓每條驗收條件都有機器可執行的對應驗證,降低人工回歸測試的負擔。
Spec Kit 只能搭配 Claude Code 嗎?
不,Spec Kit 的核心是一套以 Markdown 文件為中心的方法論,並不綁定任何特定 AI 代理或廠商。constitution.md、spec.md、plan.md、tasks.md 這四份文件可以搭配 GitHub Copilot、Cursor Agent、Gemini CLI 或任何支援系統提示(System Prompt)的工具使用,核心流程完全相同。Claude Code 之所以被列為首選,是因為它原生支援斜線命令(/speckit.specify、/speckit.implement 等),能直接讀取並執行 .claude/commands/ 底下的技能檔,省去手動複製貼上的步驟。若改用其他代理,技能檔的 Markdown 內容本身就是完整的操作指引,只需在對話開頭手動提供即可,沒有隱藏的黑箱邏輯。
若使用其他代理,只需在對話開頭手動貼上 constitution.md 的內容作為系統提示,並依序提供對應文件,工作流程基本相同。部分代理(如 Cursor)支援 .cursorrules 檔案,可將 constitution 內容放入其中達到自動載入的效果。
小型專案或個人 Side Project 也需要寫 spec.md 嗎?
這取決於專案的預期壽命與功能複雜度。對於只需要幾小時完成、不打算迭代的一次性腳本,撰寫完整 spec 確實得不償失;但只要專案超過單一功能、預計迭代兩次以上,或涉及多個模組之間的互動,一份精簡的 spec.md 就能大幅降低「AI 猜錯需求方向」的風險。Spec Kit 允許輕量化使用:你可以只填寫「功能目標」與「驗收條件」兩個區塊,其餘欄位留空,讓 speckit.clarify 視需要補問,避免一開始就被空白模板嚇退。實際上,個人 Side Project 的 spec.md 平均只需 20 到 30 分鐘就能完成初稿,卻能節省後期反覆修正的數小時。
spec.md 了——文件的存在本質上是在替 AI 的上下文視窗減壓。
個人專案的 spec.md 同時也是很好的「自我澄清工具」——撰寫規格的過程本身就能幫你理清思路,強迫你在動手之前回答「這個功能真正的成功標準是什麼」,減少實作過程中的迷失感。
執行 speckit.implement 會自動修改我的程式碼嗎?
會,這正是 speckit.implement 的設計目的,執行前請務必做好版本控制準備。它會讀取 tasks.md 中的任務清單,逐一交由 AI 代理執行,具體動作包含新增檔案、修改現有程式碼、安裝依賴套件以及執行測試命令。每個任務完成後會在 tasks.md 中標記為完成狀態([x]),以便中斷後能精確續接而不重複執行已完成的工作。整個實作過程是批次自動化進行的,AI 不會逐一詢問每個小步驟的確認,因此事前仔細審閱 tasks.md 的任務內容比事後修復更重要。
若只想預覽計畫而不實際修改程式碼,可先完整閱讀 tasks.md 確認任務的範圍與順序,再決定是否啟動實作階段。部分任務若包含破壞性操作(如刪除資料表),建議手動在任務前加入「人工確認」節點暫停自動化流程。
規格寫得太詳細,會不會綁手綁腳、失去彈性?
過度規格化確實是一個真實風險,但 Spec Kit 的模板設計本身就內建了防止這個問題的機制。spec.md 明確要求區分「必要行為(MUST)」與「期望行為(SHOULD)」兩個層級,AI 在實作時對 SHOULD 類條件擁有較大的詮釋空間,只有 MUST 條件才屬於不可妥協的紅線。此外,規格並非一次定案的契約文件,speckit.clarify 與 speckit.analyze 都預設規格會隨迭代演化,每次功能變更都可以透過 speckit.specify 重新更新對應段落。真正危險的不是「規格寫得太詳細」,而是「規格的詳細程度不對稱」——把實作細節塞進驗收條件,卻對真正關鍵的業務邊界語焉不詳。
建議將實作細節(如具體函式名稱、資料結構定義、演算法選擇)留在 plan.md,而非塞進 spec.md,如此便能在不觸動驗收條件的前提下自由調整技術方案,重構時也不需要同步修改規格文件。
spec.md 回答「什麼算做完、什麼不在範圍內」,plan.md 回答「要怎麼做到、用哪些技術」,兩者職責分明,彈性自然保留,也讓不同角色的協作者各自關注對自己最重要的文件。
如何讓 AI 嚴格遵守 spec,而不是自作主張?
關鍵在於把約束明確寫進 constitution.md,而不是只在單次對話中口頭說明。constitution.md 會被每次呼叫技能時自動帶入上下文,因此在其中明確寫下「未經明確批准不得新增第三方依賴套件」、「所有公開 API 的介面簽名必須符合 spec.md 的定義」、「修改核心模組前必須先更新對應規格」等原則,AI 遵守的穩定性會顯著提升,因為這些約束是結構化的而非一次性的提醒。此外,speckit.analyze 可在每個實作階段完成後交叉比對規格文件與實際產出,自動找出偏離點並生成差異報告,讓你在問題變大之前及早介入。若 AI 仍持續偏離預期,通常代表 spec 的驗收條件本身寫得不夠具體可量化,而非 AI 的問題。
constitution.md 的「AI 行為準則」區塊加上明確指令,例如「若任務描述與 spec.md 內容衝突,以 spec.md 為準,並主動告知使用者衝突的具體位置」,可大幅減少 AI 靜默偏移的情況。
若發現 AI 仍持續偏離,通常代表 spec 的驗收條件寫得不夠具體——回頭補充可量化的條件(如「API 回應時間須低於 200ms」、「錯誤訊息必須包含錯誤代碼與建議修正方向」),比反覆在對話中提醒 AI 要遵守規格更有持久效果。
constitution.md 和 spec.md 有什麼差別?
兩者的層次不同,適用範圍也截然不同:constitution.md 是「專案級」的永久原則文件,定義技術棧選型、程式碼風格、命名慣例、安全底線與 AI 行為守則,對專案中所有功能都普遍適用,一旦確立便長期有效。spec.md 則是「功能級」的一次性文件,描述特定功能的需求背景、使用者故事、功能範圍與驗收條件,功能完成後即可歸檔,不需要持續更新。你可以把 constitution.md 想成公司的員工手冊,適用於所有員工的所有工作;而 spec.md 則是特定專案的工作說明書,只在該專案執行期間有效。這個層次區分確保了全局原則的穩定性,同時也讓功能規格可以獨立演化而不互相干擾。
constitution.md 應該放進版本控制並長期維護,每次重大技術決策都應同步更新;spec.md 完成後建議移至 .specify/archive/ 資料夾以保留歷史記錄,但不必持續維護舊版規格。
spec.md,導致每個功能規格都要重複聲明相同原則,既冗餘又容易不一致。這類跨功能的全局內容屬於 constitution.md 的職責範圍。
可以對既有專案補寫 spec 嗎?從哪裡開始?
完全可以,而且這是 Spec Kit 最常見的使用場景之一,許多團隊都是在專案進行中才引入規格驅動的工作方式。建議從「最常出現 bug 的模組」或「即將進行重構的功能」開始,而不是試圖一次性補齊整個專案的規格,否則規格撰寫本身會成為另一個阻塞點。具體步驟是:首先執行 speckit.constitution 建立全域憲章(可從既有的 README、架構決策記錄 ADR 或 Wiki 文件中提取現有原則),接著針對目標模組執行 speckit.specify,在回答 AI 釐清問題的過程中同步梳理既有的隱性行為。現有的程式碼本身就是最好的規格輸入來源,讓 AI 先閱讀程式碼再提問,通常比從空白模板填寫更有效率。
constitution.md → 核心模組 spec.md → plan.md(梳理現有架構與技術債) → tasks.md(列出重構或新增任務)。不需要從零開始,現有程式碼和文件都是規格撰寫的寶貴輸入。
對既有程式碼補寫 spec 時,speckit.clarify 特別有價值——它會提出那些「所有人都知道但從未被書面化」的隱性假設,將口耳相傳的知識顯式化為可追溯的文件,降低團隊成員流動帶來的知識流失風險。
tasks.md 中的任務順序是怎麼決定的?可以自行調整嗎?
speckit.tasks 在生成任務清單時,會讀取 plan.md 中的架構設計與模組依賴圖,自動推導各任務之間的前置依賴關係,並以拓撲排序決定執行順序。例如「資料庫 Schema 建立」必定排在「Repository 層實作」之前,「Repository 層」必定排在「Service 層」之前,整個執行序列確保不會出現依賴尚未就緒就開始實作的情況。生成後的 tasks.md 是純文字 Markdown 格式,你可以直接編輯任務順序、拆分粒度過大的任務、合併過細的任務,甚至加入原本不在計畫中的額外步驟,speckit.implement 會完全尊重最終的排列。
若要在自動化流程中插入人工審核節點(如「待 UI 設計師確認視覺稿後再繼續」),只需在對應位置加入一個狀態為 [ ] 人工確認:等待設計審核 的任務,speckit.implement 遇到此類任務時會暫停並提示需要人工介入,不會自動跳過。
tasks.md,確認任務粒度(每個任務理想控制在 30 分鐘內可完成)與執行順序符合預期。事前微調比事後修復 AI 走偏的實作節省更多時間,也能避免產生大量需要回滾的無效變更。
規格過時了怎麼辦?如何讓 spec 持續保持有效?
規格老化是長期維護專案的必然挑戰,沒有任何方法能完全避免,但 Spec Kit 提供了低成本的應對策略。建議採用「觸發式更新」而非「定期全面審查」:每當需求變更、新增重要功能、發現重大 bug 或完成重構時,將「更新對應 spec.md」列為第一個任務而非最後一個,讓規格和程式碼永遠在同一個 commit 或同一個 PR 中同步演化。執行 speckit.analyze 可快速比對現有規格與實際程式碼之間的落差,產生一份具體的差異報告作為更新起點,避免人工逐行比對的繁瑣工作。若規格與現實的落差已經過大,可以考慮將舊 spec 歸檔後重新執行 speckit.specify,以現有程式碼作為輸入讓 AI 重新萃取規格,往往比手動更新舊文件更快。
過時的 spec 比完全沒有 spec 更危險,因為它會讓 AI 產出看似合理但實際偏離現況的修改,且這類問題往往要到後期才被發現。定期執行 speckit.analyze 是維持規格健康度成本最低的方式,建議至少在每個迭代結束時執行一次,確保文件與實作始終對齊。