最近 github 推的 spec-kit 很熱門,感覺只要是軟體工程師一定要用看看,所以我也小試了一下。

Spec-kit 是什麼

spec-kit 把 SDD (Spec-Driven Development) 跟 AI Agent 結合,開發者可以請 AI Agent 幫忙從寫 spec 文件開始逐步做到實作程式碼。

SDD 的核心概念是先寫好 spec,再跟據 spec 實作程式碼。

spec-kit 把 SDD 定成四個階段: specify → plan → tasks → implement

  • specify: 提供需求描述,讓 AI 寫 spec 文件。
  • plan: 讓 AI 跟據 spec 文件,規畫技術選型、程式架構、設計 API、設計資料結構等。
  • tasks: 讓 AI 跟據 plan 結果,拆分執行任務。
  • implement: 讓 AI 開始實作程式。

當我們有提供足夠的 context,AI 可以順利的從寫文件到完成程式碼。但如果沒有跟 AI 交代清楚,AI 就會自由發揮,需要再下 prompt 請 AI 修改。

Spec-kit 試用感想

spec-kit 新手的我,在試用的過程有點挫折:

  • 因為不可能一次就把需求的 context 寫得很完美,通常都需要反覆補充 context 並修改 spec,這反而讓我花更多時間跟 token 叫 AI 反覆的修改文件。
  • spec-kit 產生了大量的文件,大幅增加 review 文件的成本。
  • 生成的文件只有 spec 有一點保留的價值,剩下的文件都是為了給 AI 看而產生的中間產物,這些資料最後都會被寫到程式碼、doc string、README 等地方。
  • spec-kit 使用過程中間生成的文件跟程式碼,就是兩份重複描述程式要怎麼運作的文件,如果要保留下來就需要同步更新,會有漏改的問題。

這些挫折讓我在思考使用 spec-kit 有什麼幫助,我使用 TDD 跟 AI Agent 一起開發程式並不會碰到這些問題。

TDD(Test-Driven Development) 是什麼

TDD 的核心概念是先了解程式是如何被使用,寫成可以執行的 Spec aka 測試程式,再寫出可以滿足測試的程式碼。

  • 程式是「如何被使用」就是「使用案例」,可以是很單純的輸入(input)跟輸出(output),或是比較有結構的描述 ex.什麼情況下,當做什麼事,會得到什麼結果(given, when, then)

TDD 的開發過程是通常被濃縮三個步驟反覆循環:

紅燈(Red) → 綠燈(Green) → 重構(Refactor) → 紅燈(Red)…

  • 紅燈(Red): 將程式會如何被使用的期望,寫一個會失敗的測試程式。
  • 綠燈(Green): 寫出足以通過測試的程式。
  • 重構(Refactor): 重構程式以確保其可維護性。

TDD 搭配上 AI Agent

我以 TDD 搭配 AI Agent 的開發過程會是這樣:

  • 紅燈(Red): 抓一個使用案例,讓 AI 寫一個會失敗的測試程式並執行測試。
  • 綠燈(Green): 讓 AI 寫出足以通過測試的程式並執行測試。
  • 重構(Refactor): 讓 AI 跟據我提出的要求,重構程式。

為什麼 TDD + AI Agent 不會有 Spec-kit 的挫折?

按照 TDD 來開發程式

  • 更能夠保證 AI 每次只實作一個小功能,不會生成大量程式碼,這樣我們對程式碼的變動有更高的掌握度,review 程式也更加輕鬆。
  • 不會增加多餘的文件,所有的程式跟文件都是必要的。
  • 保證會有一份「測試程式」可以驗證程式是否正確,可以放心的 refactor。

小結

目前我無法在 spec-kit 身上找到可以幫助我的部份。倒也不是說 spec-kit 不好,也有很多人用得很開心,至少以我小試一下的做法跟實驗環境不適合使用它,只會讓我變成一直在修 spec 的工程師。

如果你在考慮 spec-kit,可以評估看看 spec-kit 對你是否有幫助,或者只會徒增一堆文件?

使用 TDD 一直是我的主要開發手段,搭配 AI Agent 一樣是首選,這次的實驗也讓我更確信這一點。

Reference