AWS re:Invent 回顧

使用 Kiro 進行規格驅動開發 (DEV314)

回顧系列

場次筆記

Kiro 與 Spect 驅動開發簡介

概觀

  • Kiro 是近期發布的新型代理式 IDE,強調 Spect 驅動開發。
  • 其目標是透過結構化工作流程改善程式碼品質與審查流程。
  • IDE 因編譯器和偵錯等整合工具而普及。
  • AI 編輯器隨之出現,從程式碼補全開始,逐步演進為代理式體驗。
  • 開發人員現在會引導 AI 代理程式撰寫與審查程式碼,同時維持掌控。
  • 氛圍程式設計與 Spect 驅動開發:
  • 氛圍程式設計涉及快速建立原型,但缺乏傳統 SDLC 生命週期。
  • Spect 驅動開發導入從需求到輸出的結構化工作流程,著重於前期規劃,以改善模型專注度與輸出品質。
  • Spect 驅動開發工作流程:
  • 從需求開始,接著是設計、工作清單與實作。
  • 可反覆精修,直到達成所需輸出。
  • 包含用於驗證變更的掛鉤,例如拼字檢查與強制執行程式設計原則。

AI 編輯器與軟體開發的演進

AI 編輯器

  • 演進為更具代理性的體驗,開發人員輸入自然語言,由 AI 編輯多個檔案。
  • 根本性轉變:開發人員引導 AI 代理程式撰寫與審查程式碼,同時維持對工作流程的掌控。
  • 氛圍程式設計:
  • 常見工作流程是開發人員撰寫提示、AI 產生程式碼,然後重複此循環。
  • 適合快速建立原型,但缺乏傳統 SDLC 生命週期,因而在脈絡與決策方面產生挑戰。
  • 規格驅動開發:
  • 為解決氛圍程式設計的挑戰而推出,強調前期規劃。
  • 從需求到輸出的結構化工作流程,著重於提升模型專注度與輸出品質。
  • 工作流程包括需求、設計、工作清單與實作,並可反覆精修。
  • 透過加入用於驗證變更的掛鉤來解決「AI」問題,確保程式碼品質。

Spect 驅動開發

用於驗證變更的掛鉤

  • Kiro 納入掛鉤,以在開發流程中驗證變更。
  • 範例包括文件拼字檢查、語調與風格檢查,以及強制執行程式設計原則,例如 UI 元件的單一職責原則。
  • 求職者應用程式概念:
  • 核心構想:處理求職中面試準備以外的更廣泛層面,包括風格、語調與實際面試表現。
  • 電梯簡報:使用者登入、設定個人資料,並透過問答流程進行面試準備,最後同時取得質性回饋與量化分數。

Kiro 介面與功能概觀

Kiro 介面

  • 已安裝 Tailwind CSS 的全新應用程式概觀。
  • Kiro 選單:
  • 代理程式掛鉤:由儲存或刪除檔案等事件觸發的背景程序,適合用來更新文件或本地化內容。
  • 代理程式引導:用於程式設計與設計標準的規則檔案,會根據應用程式目前的狀態自動產生。
  • 規格:從需求到輸出的結構化工作流程,確保從構想到實作都有清楚的路徑。
  • MCP:My Code Partner 伺服器,可與各種 AWS 服務和產品整合,近期也強化了更便利的安裝方式。
  • 代理程式掛鉤:
  • 提供常見情境適用的預先建置掛鉤,並可彈性指定特定檔案類型。
  • 代理程式引導:
  • 根據應用程式目前的狀態自動產生引導檔案。
  • 範例:為使用 TypeScript 與 Vite 的 Vite Web 應用程式建立產品與技術檔案。
  • MCP Server:
  • 適用於不同服務和產品的 MCP Server 清單持續擴充。
  • 最近新增:可透過 kiro.dev 一鍵安裝 MCP Server。

Kiro 中的 Spect 驅動開發

概觀

  • Spect 驅動開發是本場演講的核心重點,強調從需求到輸出的結構化工作流程。
  • Kiro 支援各種 AI 模型(Sonnet 4.5、4.4、Opus、Haiku),並提供自動選擇功能來挑選最佳模型。
  • 建立求職者應用程式:
  • 使用圖表作為設計輸入,提示 Kiro 建立求職者應用程式。
  • 此流程從根據所提供的設計產生需求文件開始。
  • 需求文件:
  • Kiro 將初始提示展開為一組需求,並以含驗收條件的使用者故事定義。
  • 使用者故事以人類可讀格式呈現功能定義,而驗收條件則詳述實作所需的具體內容。
  • 使用者故事與驗收條件:
  • 使用者故事範例包括登入、個人資料管理與面試準備工作階段。
  • 此流程包括審查使用者故事,確保其符合所需功能,再深入檢視驗收條件以進行詳細實作。

精修需求並進入設計階段

審查與精修需求

  • Kiro 可反覆精修需求。在範例中,某些需求(1、2、狀態持久性)已移除,其他需求(3、4、5、6、7、8)則保留在 MVP 範圍內。
  • 強調在流程中反覆來回的重要性,以確保需求符合所需結果。
  • 工作流程彈性:
  • Kiro 支援不同工作流程,包括用於快速建立原型的氛圍程式設計,以及用於結構化規劃的 Spect 驅動開發。
  • 開發人員可能偏好先以氛圍程式設計考量初步介面與功能,再轉換為更具結構的方法。
  • 設計階段:
  • 需求定案後,Kiro 會根據現有程式碼庫產生設計文件。
  • 設計階段包括建立架構圖與屬性測試,以確保系統符合指定需求。
  • 反覆流程:
  • 此流程可反覆進行,讓開發人員能精修需求與設計文件,直到對結果感到滿意。
  • 產生的文件可作為未來開發與維護的重要參考。

審查並強化設計文件

設計文件概觀

  • Kiro 根據精修後的需求產生設計文件,其中包括高階架構與元件概觀。
  • 設計文件使用 mermaid 圖表與 markdown,以清楚呈現視覺化內容和文件。
  • 高階架構:
  • 此架構包括開始畫面、問題畫面、結果畫面、用於資料持久性的本機儲存,以及用來錄製音訊回應的 Web Audio API。
  • 元件細分:
  • 識別出的主要元件:開始畫面檢視、問題畫面檢視、工作階段狀態擷取(問題與回應)、題庫(MVP)以及儲存工作階段。
  • 識別缺口:
  • 識別出的缺漏功能:轉錄使用者回應的音訊,以及詳細分析結果。
  • 設計文件未具體說明如何轉錄音訊,以及如何產生與呈現結果。
  • 強化設計:
  • 新增額外需求:在使用者說話時轉錄為文字,以及對結果進行額外分析。
  • 強調使用自然語言提示新增需求的便利性,突顯 AI 輔助文件的方便之處。

強化設計並移至工作清單

更新設計文件

  • 設計文件已新增其他功能,包括使用 Cloud SDK 轉錄音訊,以及詳細分析結果。
  • 導入檢查點與還原功能,無須依賴版本控制系統即可輕鬆還原至先前狀態。
  • 系統圖表更新:
  • 系統圖表已更新,納入轉錄服務(使用 Cloud SDK 將語音轉為文字)。
  • 產生工作清單:
  • 工作流程接著會根據更新後的設計文件產生工作清單。
  • 工作包括建立資料模型、實作音訊錄製服務、回應驗證儲存與 AI 整合。
  • 彈性與精修:
  • 工作流程可將手動編輯與精修整合至設計文件中。
  • 可以重新排序工作或調整其優先順序,以專注於快速達成 MVP 範圍。
  • 選擇性工作:
  • 以屬性為基礎的測試工作預設為選擇性,讓開發人員先專注於核心功能,再處理其他測試。
  • 可精修工作清單,優先處理特定工作,以更快速地開發 MVP。

工作清單優先順序與實作

工作清單彈性

  • 可精修並重新排序工作清單,以專注於快速達成 MVP 範圍。
  • 可以將工作分組以減少工作數量,讓工作流程更容易管理。
  • 測試優先開發:
  • 如果開發人員偏好測試驅動開發方法,可以選擇先撰寫測試。
  • 工作流程支援不同的開發風格,可依團隊偏好自訂。
  • 核心 MVP 工作:
  • 已找出包含五項工作的核心 MVP:設定相依性、建立核心資料類型、實作應用程式狀態管理、實作音訊錄製,以及語音測試。
  • 其他工作包括實作回應驗證儲存,以及建立開始畫面元件。
  • 納入 UI:
  • 初始階段可能不包含 UI 元件,但可調整為納入 UI,以便進行視覺測試與互動。
  • 工作實作:
  • 可以透過點選 UI 或聊天命令開始工作。
  • Kiro 依序執行工作,並執行終端機命令以安裝相依性和建立必要檔案。
  • 此流程可反覆進行,並可根據持續演進的需求與設計快速調整和精修。

以屬性為基礎的測試概觀

結構化需求

  • 需求以使用者故事驗收條件格式定義。
  • 可對需求進行邏輯等價與形式推理。
  • 屬性與形式推理:
  • 屬性是系統在所有執行過程中都應成立的特徵或行為。
  • Kiro 從 Gherkin 格式的需求中擷取屬性,並使用名為 Fast Check 的框架進行以屬性為基礎的測試。
  • Gherkin
  • 是一種用於行為驅動開發 (BDD) 的純文字語言,能以結構化且人類可讀的格式撰寫軟體行為情境,主要使用 Given-When-Then 結構。
  • Feature:說明正在測試的功能。
  • Scenario:功能實際運作的特定範例。
  • Given:設定動作發生前的初始脈絡或狀態。
  • When:說明使用者或系統執行的動作。
  • Then:定義動作的預期輸出或結果。
  • And/But:用於在不重複相同關鍵字(Given、When 或 Then)的情況下,為該關鍵字新增更多步驟。
  • Fast Check 框架:
  • Fast Check 會產生一系列值來對照屬性進行測試,以實現模糊測試。
  • 不同於輸入有限的單元測試,以屬性為基礎的測試可提供更多證據,證明產生的輸出符合需求。
  • 以屬性為基礎的測試範例:
  • 使用 Kiro 建立了一個西洋棋應用程式,並使用以屬性為基礎的測試來確保應用程式如預期運作。
  • 測試包括檢查 AI 產生的任何移動,確認其對照移動登錄是否有效。
  • Fast Check 會使用隨機變更多次執行測試,以確保穩健性並減少錯誤。
  • 以屬性為基礎的測試可提升程式碼品質,並降低發生錯誤的可能性。

診斷工具

  • Kiro 的診斷工具可協助在工作執行期間識別並解決問題。
  • 它會從編輯器讀取 lint 問題,並提供回饋以改善開發流程。
  • 此工具已減少工作完成期間遇到的問題數量。
  • 工作執行:
  • 此應用程式包含用於面試準備的行為、技術與領導力問題。
  • 此應用程式連接至 Sonnet 3.7 模型以產生回應。
  • 最佳化示範:
  • 最終應用程式以問題與回應示範面試準備練習。
  • 此應用程式讓使用者練習回答技術問題並取得回饋。
  • 此示範突顯應用程式的功能,包括錄製與轉錄回應的能力。