規格驅動開發實戰:AI 時代的軟體開發新典範
學員實作手冊
本手冊旨在引導學員透過 Copilot CLI 與 Spec Kit 的上手實作,掌握規格驅動開發 (Specification-Driven Development, SDD) 的核心概念與實踐方法。SDD 是一種以規格為核心的軟體開發方法,特別適合在 AI 時代下提升開發效率與軟體品質。本課程將以實際案例為基礎,帶領學員從環境準備、規格制定到功能實作,逐步完成一個完整的專案,並學習如何應對開發過程中的常見挑戰。
第一次迭代
環境準備
-
建立專案資料夾
mkdir duotify-membership-v1 chdir duotify-membership-v1 -
檢查 Specify CLI 工具環境
specify check -
初始化 Spec Kit 專案範本
specify init --ai copilot --script ps --here -
建立一個
AGENTS.md檔案 (給 Copilot CLI 看的)檔案內容如下:
We're going to be using slash command from `.github\prompts\`加入版控:
git add AGENTS.md && git commit -m "Add AGENTS.md" -
啟動 GitHub Copilot CLI 互動式環境
更新 Copilot CLI 到最新版
npm i -g @github/copilot透過
copilot -v命令查看 Copilot CLI 版本0.0.343 Commit: 5847051啟動 GitHub Copilot CLI 互動式環境
copilot --allow-all-tools
制定憲法
/speckit.constitution Create principles focused on code quality, testing standards, user experience consistency, and performance requirements
/speckit.constitution All specifications, plans, and user-facing documentation MUST be written in Traditional Chinese (zh-TW)
制定規格
/speckit.specify
# 會員註冊流程
我們的核心目標是讓新使用者能透過一個簡單、安全的流程,順利註冊帳號並完成 E-Mail 驗證,以便使用平台功能。
整個註冊是一個單向流程,無法返回上一步。使用者首先需要填寫身分證字號、姓名等資料,並設定一組 8 到 20 碼、包含英文大小寫與數字的密碼。系統會檢查身分證字號,防止重複註冊。
送出資料後,系統會寄出一封內含 6 位數驗證碼的 E-Mail,有效時間為 5 分鐘。使用者必須手動輸入驗證碼來完成驗證。
如果使用者未完成 E-Mail 驗證,依然可以用剛設定的帳號密碼登入,但部分功能將受限。直到輸入正確的驗證碼後,帳號所有功能才會被啟用。註冊完成後,系統不會自動登入。
為了讓流程單純,我們不做社群帳號註冊、不提供密碼強度提示,也不支援點擊 E-Mail 連結直接驗證。
💡 注意:你隨時可以再次執行
/speckit.specify命令進行修正,此步驟支援差異更新!
釐清問題
/speckit.clarify
-
未驗證使用者的功能限制範圍

Ans: C

-
錯誤驗證碼輸入次數限制

Ans: A

-
Email 地址是否可重複註冊

Ans: A

-
Email 註冊流程中斷後的恢復機制

Ans: 原則上完成帳號資料填寫即可登入,會員帳號管理就有重啟驗證EMail的設計

-
Email 遞送失敗的處理策略

Ans: C


工程師問: 他輸入完就忘記密碼怎麼辦?他也收不到信,但身份證是對的!沒通過驗證,忘記密碼,身份證正確,E-mail收不到,怎麼辦?
PM回覆: 如果他連Email都收不到,又忘記密碼,那只能回歸到人工線下處理。這樣下個階段就有東西可以優化了!XD
澄清流程完成報告


備註: 事實上這些問題在需求訪談階段就該整體盤點,但很多時候遺憾的是,大家都到開發階段才看見問題!
制定開發計畫
/speckit.plan
We are going to generate this using ASP.NET Core 8.0 Web API, using SQL Server as the database. This project is mainly for backend REST API only. No frontend implementation is required. Use EF Core Code First workflow.
I don't want to use AutoMapper to map DTO. Use POCO instead.
I don't want to use Redis.
I don't want to use Minimal APIs.

規劃任務清單
/speckit.tasks


產生規格分析報告
/speckit.analyze Save your analyze report to `analyze-01.md`

開始實作
/speckit.implement

1



繼續實作 Phase 2: 建立實體類別和資料庫設定



繼續 Phase 3: 實作使用者故事 1(註冊與驗證功能)


繼續開發: Phase 4 - 登入功能(未驗證使用者登入)



補充單元測試和整合測試






繼續開發: 完成剩下的功能實作




第二次迭代
修正已經完成的規格有兩種方法:
- 小幅修正 (建議)
- 打掉重練
小幅修正 (建議)
/speckit.specify
請更新規格,我希望密碼複雜度的規格不接受特殊符號。
然後一併幫我更新 @specs\001-會員註冊流程\plan.md 與 @specs\001-會員註冊流程\tasks.md
請根據本次的規格變更,一併修改所有相關的程式碼
💡 核心觀念: 不要一次把程式碼寫完,永遠是先 Review 規格,再動手改程式!
打掉重練
修訂已完成的規格時,可以再次執行 /speckit.specify 命令進行編修,此步驟支援差異更新!
/speckit.specify 請更新規格,我希望密碼複雜度的規格不接受特殊符號。
釐清規格
/speckit.clarify
建議先手動刪除 specs\001-會員註冊流程 規格目錄內的 plan.md, tasks.md 規格,以及所有程式碼,並重新走一次流程!
💡 建議採用
git revert命令,還原特定版本,所以不斷的版控很重要!
重新生成開發計畫
/speckit.plan
重新生成任務清單
/speckit.tasks
產生規格分析報告
/speckit.analyze Save your analyze report to `analyze-02.md`
重新實作程式碼
/speckit.implement
💡 秘技:斷捨離!不要跟你的「程式碼」有任何情感糾葛!😅
開發下一份規格
單純將 Git 切換回 main 或 develop 分支即可。
git switch main