# 智能複習系統 - 測試規格書 (TSP) **目標讀者**: QA工程師、測試人員 **版本**: 1.0 **日期**: 2025-09-25 --- ## 🎯 **測試範圍** ### **測試目標** - 驗證間隔計算算法正確性 - 確保逾期處理邏輯合理 - 驗證API輸入輸出正確性 - 確保系統性能符合要求 ### **不測試範圍** - 前端UI/UX測試 - 第三方服務整合測試 --- ## ✅ **功能測試案例** ### **TC-001: 基本間隔計算** | 測試案例 | 輸入 | 預期輸出 | 優先級 | |---------|------|---------|--------| | 新詞答對 | interval=1, isCorrect=true | newInterval=2 | P0 | | 新詞答錯 | interval=1, isCorrect=false | newInterval=1 | P0 | | 短期答對 | interval=5, isCorrect=true | newInterval≈9 | P0 | | 長期答對 | interval=100, isCorrect=true | newInterval≈110 | P1 | ### **TC-002: 信心等級測試** | 信心等級 | 預期係數 | 測試數據 | 狀態 | |---------|---------|---------|------| | 1 (很不確定) | 0.5 | interval=10 → newInterval≈9 | ✅ | | 3 (一般) | 0.9 | interval=10 → newInterval≈16 | ✅ | | 5 (很確定) | 1.4 | interval=10 → newInterval≈25 | ✅ | ### **TC-003: 逾期復習測試** ```gherkin Scenario: 輕度逾期復習 (時間基準驗證) Given 詞卡預定 2025-09-20 復習,原間隔7天 When 用戶在 2025-09-23 復習 (逾期3天) And 用戶答對,信心等級4 Then 逾期天數 = 3天,應該應用懲罰係數 0.9 And 新間隔 = 7 × 1.8 × 1.1 × 0.9 = 12天 And 下次復習日期 = 2025-09-23 + 12天 = 2025-10-05 (以復習當日為基準) Scenario: 極度逾期復習 Given 詞卡預定 2025-08-20 復習 When 用戶在 2025-09-25 復習 (逾期36天) And 用戶答對 Then 應該應用重度懲罰係數 0.3 And 熟悉程度應該大幅衰減 ``` ### **TC-004: 時間基準專項測試** ```gherkin Scenario: 驗證時間基準計算正確性 Given 詞卡預定 2025-09-20 復習,原間隔14天 When 用戶在 2025-09-25 復習 (逾期5天) And 用戶答對,信心等級4 Then 逾期天數計算 = 5天 And 新間隔 = 14 × 1.4 × 1.1 × 0.75 = 16天 And 下次復習日期 = 2025-09-25 + 16天 = 2025-10-11 And 而非錯誤的 = 2025-09-20 + 16天 = 2025-10-06 Scenario: 準時復習基準測試 Given 詞卡預定 2025-09-20 復習,原間隔14天 When 用戶在 2025-09-20 準時復習 And 用戶答對,信心等級4 Then 逾期天數 = 0天,無懲罰係數 And 新間隔 = 14 × 1.4 × 1.1 = 21天 And 下次復習日期 = 2025-09-20 + 21天 = 2025-10-11 ``` --- ## ❌ **負向測試案例** ### **輸入驗證測試** | 測試案例 | 輸入值 | 預期結果 | 錯誤代碼 | |---------|-------|---------|----------| | 信心等級過高 | confidenceLevel=6 | 400錯誤 | VALUE_OUT_OF_RANGE | | 信心等級過低 | confidenceLevel=0 | 400錯誤 | VALUE_OUT_OF_RANGE | | 缺少必填欄位 | {} | 400錯誤 | MISSING_REQUIRED_FIELD | | 錯誤資料類型 | isCorrect="yes" | 400錯誤 | INVALID_INPUT | | 不存在詞卡ID | id=99999 | 404錯誤 | FLASHCARD_NOT_FOUND | ### **邊界條件測試** ``` # 極值測試 - 間隔 = 0: 應設為最小值 1天 - 間隔 = 999: 應限制為最大值 365天 - timesCorrect > totalReviews: 應拋出異常 - totalReviews = 0: 熟悉程度應為 0% ``` ### **併發測試** ``` # 同一詞卡多客戶端同時更新 - 10個並發請求更新同一詞卡 - 驗證資料一致性,無競態條件 - 確保間隔計算結果正確 ``` --- ## ⚡ **性能測試** ### **響應時間測試** | 測試場景 | 目標 | 測試方法 | |---------|------|---------| | 單次復習記錄 | < 100ms | 100次請求平均值 | | 複習列表查詢 | < 500ms | 查詢50個到期詞卡 | | 批量數據更新 | < 5s | 1000個詞卡批量更新 | ### **併發測試** ``` 負載測試場景: - 100 併發用戶,持續5分鐘 - 1000 併發用戶,持續1分鐘 - 驗證: 響應時間不超過目標2倍,無錯誤 ``` ### **資源消耗測試** - **記憶體**: 監控記憶體洩漏,增長 < 10MB - **CPU**: 算法計算不應導致CPU過載 - **資料庫連線**: 連線池使用合理,無死鎖 --- ## 🔧 **測試環境設定** ### **測試資料準備** ```sql -- 創建測試用詞卡數據 INSERT INTO Flashcards (Word, NextReviewDate, IntervalDays, TimesCorrect, TotalReviews) VALUES ('test1', '2025-09-25', 1, 0, 0), -- 新詞卡 ('test2', '2025-09-20', 7, 3, 4), -- 逾期詞卡 ('test3', '2025-09-25', 30, 8, 10), -- 正常詞卡 ('test4', '2025-08-25', 90, 15, 15); -- 極度逾期 ``` ### **測試工具** - **單元測試**: xUnit/NUnit - **API測試**: Postman/Newman - **負載測試**: JMeter/k6 - **資料庫測試**: 直接SQL驗證 --- ## 📋 **測試檢查清單** ### **功能測試 (必須100%通過)** - [ ] 所有間隔計算測試案例 - [ ] 信心等級映射正確 - [ ] 逾期處理邏輯正確 - [ ] 熟悉程度計算準確 - [ ] API輸入驗證完整 ### **非功能測試** - [ ] 響應時間符合要求 - [ ] 併發測試無錯誤 - [ ] 記憶體使用穩定 - [ ] 負向測試全部通過 ### **整合測試** - [ ] 與現有系統相容 - [ ] 資料庫操作正確 - [ ] 錯誤處理機制有效 --- ## 🐛 **缺陷分類** ### **嚴重等級定義** - **P0 (Blocker)**: 算法計算錯誤、系統崩潰 - **P1 (Critical)**: 逾期處理錯誤、性能不達標 - **P2 (Major)**: 輸入驗證缺失、錯誤訊息不準確 - **P3 (Minor)**: 日誌格式、響應字段缺失 ### **測試報告模板** ``` 缺陷標題: [模組] 簡短描述 重現步驟: 1. 準備測試數據 2. 發送API請求 3. 檢查響應結果 預期結果: XX 實際結果: XX 影響範圍: XX用戶功能 ``` --- ## 📊 **測試完成標準** ### **通過標準** - 功能測試用例通過率 = 100% - 性能測試通過率 ≥ 95% - 負向測試覆蓋率 ≥ 90% - P0/P1缺陷數量 = 0 ### **測試報告** - 測試執行總結 - 缺陷統計和分析 - 性能測試結果 - 風險評估和建議 --- **測試負責人**: [待指派] **測試週期**: 1個工作日 **發布建議**: 所有P0/P1缺陷修復後可發布