iT邦幫忙

2025 iThome 鐵人賽

DAY 7
2
佛心分享-SideProject30

AI-Driven Development 實戰篇:30 天 Side Project 開發全紀錄系列 第 7

Day 7 - AI-DLC Sprint 實戰:讓 AI 精準定義 MenuBar Todo 的驗收標準

  • 分享至 

  • xImage
  •  

經過昨天的設計階段,MenuBar Todo 的外觀已經成型。今天要進入 AI-DLC Sprint 的第四個關鍵環節 - AI QA Engineer。這次我們聚焦在最核心的品質把關工作:從 User Story 生成精準的驗收標準(Acceptance Criteria)。

從模糊測試到精準驗收

先看看我手上這份「快速新增任務」的 User Story。這是 MenuBar Todo 的核心功能,如果這個功能的驗收標準寫不好,整個產品的品質就無法保證。

傳統開發中,驗收標準常常寫得很隨意:

  • 能新增任務
  • 新增後顯示在列表
  • 輸入框要清空

這種 AC 看起來有道理,但實際測試時問題一堆:Enter 鍵要按幾次?空白輸入怎麼處理?焦點要不要保持?任務顯示在哪裡?

AI 如何強化驗收標準

讓我展示 AI 如何把我的 User Story US-3.3 轉化為精準的驗收標準。

第一步:理解核心意圖

AI 分析 User Story 後的理解:

核心價值:「快速」是關鍵
- 不需要切換視窗
- 最少的操作步驟
- 立即看到結果

使用情境:工作中斷時的快速記錄
- 正在寫程式,突然想到一件事
- 開會時記錄 action items
- code review 發現的問題

成功指標:
- 從想法到記錄完成 < 3 秒
- 操作步驟 ≤ 3 步
- 零學習成本

第二步:強化原有的驗收標準

我原本的 AC 已經用了 Given-When-Then 格式,但 AI 幫我找出了許多遺漏的細節:

原始 AC 條件 2:任務創建

Given 輸入欄位已聚焦
When 我輸入任務內容並按 Enter
Then 應發生以下動作:
  - 創建新任務,到期日設為今天
  - 任務立即顯示在當前檢視中
  - 輸入欄位清空
  - 焦點保持在輸入欄位

AI 強化版本

Given 輸入欄位已聚焦
  And 當前檢視為「今日」
  And 已有 2 個未完成任務
When 我輸入「修復登入 bug」(10個字元)
  And 在 500ms 內按下 Enter 鍵
Then 應依序發生:
  1. 輸入欄位立即清空(< 50ms)
  2. 新任務出現在列表頂部(< 100ms)
  3. 新任務有淡入動畫(200ms)
  4. 任務計數從 2 更新為 3
  5. 焦點保持在輸入欄位(可立即輸入下一個)
  6. 新任務的到期日為今天 23:59:59
  7. 自動儲存到本地(< 500ms)

看到差別了嗎?AI 版本不只說「要做什麼」,還定義了「怎樣才算做對」。

第三步:補充遺漏的場景

原始 Story 只有 4 個條件,AI 幫我補充了更多關鍵場景:

AI 新增的驗收條件 5:連續輸入

Given 輸入欄位已聚焦
When 我快速連續輸入並提交 3 個任務:
  1. 輸入「任務一」+ Enter(耗時 2 秒)
  2. 輸入「任務二」+ Enter(耗時 1.5 秒)
  3. 輸入「任務三」+ Enter(耗時 1 秒)
Then 應該:
  - 3 個任務都成功創建
  - 順序正確(任務三在最上)
  - 每次 Enter 後焦點都保持
  - 沒有重複提交
  - 總耗時 < 5 秒

AI 新增的驗收條件 6:特殊字元處理

Given 輸入欄位已聚焦
When 我輸入包含特殊字元的任務:
  - 「修復 `npm install` 錯誤」(包含反引號)
  - 「準備 Q4 < 預算規劃 >」(包含角括號)
  - 「完成 50% 的進度」(包含百分號)
  - 「處理 [user@email.com](mailto:user@email.com) 的問題」(包含 @)
Then 應該:
  - 所有特殊字元正確顯示
  - 不觸發意外的格式化
  - 儲存和載入後字元不變
  - 不產生 XSS 風險

AI 新增的驗收條件 7:輸入中斷處理

Given 我正在輸入「準備明天的會議資料」
  And 已輸入「準備明天」
When 發生以下任一情況:
  - 點擊視窗外部
  - 按下 ESC 鍵
  - 切換到其他應用程式
Then 應該:
  - 保留輸入的文字(不清空)
  - 下次開啟時文字還在
  - 游標位置在文字末端
  - 可以繼續編輯

Edge Case 的系統化識別

AI 不只強化既有 AC,還主動識別了各種邊界情況:

效能相關的 AC

條件:大量文字輸入
Given 輸入欄位為空
When 我貼上 200 個字元的文字
Then 應該:
  - 在 50ms 內顯示完整文字
  - 字數計數器即時更新
  - 不會卡頓或延遲
  - 自動捲動到游標位置

條件:快速操作
Given 輸入欄位已聚焦
When 我在 100ms 內按下 5 次 Enter
Then 應該:
  - 只觸發一次提交(防抖)
  - 不創建空白任務
  - 不產生錯誤

無障礙相關的 AC

條件:鍵盤導航
Given 使用者使用鍵盤操作
When 按 Tab 鍵導航
Then 應該:
  - 輸入欄位可被 Tab 選中
  - 有明顯的焦點指示器
  - Shift+Tab 可反向導航
  - Enter 提交,ESC 取消

條件:螢幕閱讀器
Given 使用者開啟螢幕閱讀器
When 焦點在輸入欄位
Then 應該:
  - 朗讀「快速新增任務,編輯文字」
  - 輸入時朗讀字元
  - 提交後朗讀「任務已新增」

資料完整性的 AC

條件:並發創建
Given 兩個 MenuBar 實例同時開啟
When 兩邊同時新增任務
Then 應該:
  - 兩個任務都成功儲存
  - ID 不會衝突
  - 重新載入後都能看到

條件:儲存失敗處理
Given 磁碟空間不足
When 新增任務
Then 應該:
  - 顯示錯誤提示
  - 任務暫存在記憶體
  - 提供重試選項
  - 不遺失使用者輸入

從 AC 到測試案例的自動轉換

AI 最棒的地方是,這些 AC 可以直接轉換成可執行的測試:

單元測試生成

基於 AC「輸入驗證」生成:
- test('空白輸入不創建任務')
- test('純空格輸入視為空白')
- test('200字元上限驗證')
- test('特殊字元正確處理')

整合測試生成

基於 AC「任務創建」生成:
- test('完整創建流程')
- test('檢視更新同步')
- test('資料持久化驗證')
- test('焦點管理正確')

E2E 測試生成

基於 AC「連續輸入」生成:
- test('使用者快速輸入多個任務')
- test('中斷後繼續輸入')
- test('不同檢視切換')

實戰:

以下是完整 User Story 的設計以及 AC:

# US-3.3: 快速新增任務

## 基本資訊
- **Story ID**: US-3.3
- **Epic**: Epic 3 - 任務管理
- **Phase**: Phase 1 (MVP)
- **優先級**: P0 (關鍵功能)
- **Story Points**: 2
- **相依性**: US-1.2

## 使用者故事

**身為** 使用者  
**我想要** 在彈窗快速新增任務  
**以便** 不用開啟主視窗就能記錄待辦事項

## 驗收標準

### 條件 1:輸入介面
- **Given** 彈出視窗已開啟
- **When** 我查看底部區域
- **Then** 我應看到「快速新增任務...」輸入欄位

### 條件 2:任務創建
- **Given** 輸入欄位已聚焦
- **When** 我輸入任務內容並按 Enter
- **Then** 應發生以下動作:
  - 創建新任務,到期日設為今天
  - 任務立即顯示在當前檢視中
  - 輸入欄位清空
  - 焦點保持在輸入欄位

### 條件 3:輸入驗證
- **Given** 輸入欄位為空
- **When** 我按下 Enter
- **Then** 不應創建任務,Enter 鍵無作用

### 條件 4:自然語言處理(延展目標)
- **Given** 我在輸入欄位中輸入包含日期的文字
- **When** 按下 Enter
- **Then** 系統應嘗試解析自然語言日期

## 測試案例

### 單元測試
1. 測試 QuickAddInput 元件
2. 測試輸入驗證邏輯
3. 測試日期解析功能
4. 測試表單提交處理

### 整合測試
1. 測試完整的任務創建流程
2. 測試與檢視系統的整合
3. 測試資料持久化
4. 測試錯誤處理

### E2E 測試
1. 測試使用者完整的快速新增體驗
2. 測試不同檢視中的任務顯示
3. 測試連續任務創建

## 設計參考
- 檔案:`/design-spec/wireframes/menubar-popover-wireframe.html` (底部區域)
- 輸入元件規格:
  - 高度:36px
  - 內距:8px 12px
  - 邊框:1px solid, 邊框色
  - 圓角:6px
  - 字體:14px, -apple-system
  - 佔位文字:次要文字色
  - Focus 狀態:主色邊框, 0 0 0 3px 主色 20% 光暈
  - 底部固定位置,內距 12px

## 完成定義
- [ ] 快速輸入介面正確顯示
- [ ] 任務創建功能正常
- [ ] 輸入驗證正確運作
- [ ] 焦點管理符合預期
- [ ] 任務立即顯示在檢視中
- [ ] 自然語言日期解析(如實作)
- [ ] 單元測試覆蓋率 > 80%
- [ ] 通過設計審查
- [ ] 程式碼審查完成

## 注意事項
- 確保輸入欄位有適當的占位文字
- 實作鍵盤導航支援
- 考慮自動完成或建議功能
- 處理長任務標題的顯示
- 確保與現有任務系統的一致性

實戰心得:AI 強化 AC 的三個層次

第一層:格式規範化

AI 幫你把模糊的需求轉成標準的 Given-When-Then 格式。這是基礎,但很有用。

第二層:細節具體化

AI 會補充時間要求、數量限制、順序關係等具體指標,讓 AC 真正可測試。

第三層:場景完整化

AI 會思考各種使用情境、異常狀況、邊界條件,確保沒有遺漏重要場景。

總結

好的 AC 是產品品質的第一道防線

以前我總覺得 AC 是形式主義,寫了也沒人看。但透過 AI-DLC Sprint,我發現精準的 AC 其實是在定義「什麼叫做完成」。

當你的 AC 寫得夠具體,開發就不會做錯,測試就不會漏測,產品就不會出包。AI 幫助我們把這個「定義完成」的過程變得更系統、更全面、更精準。


上一篇
Day 6 - AI-DLC Sprint 實戰:讓 AI 成為 MenuBar Todo 的 UI/UX 設計師
系列文
AI-Driven Development 實戰篇:30 天 Side Project 開發全紀錄7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言