dramaling-vocab-learning/note/智能複習/智能複習系統-測試規格書.md

217 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 智能複習系統 - 測試規格書 (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缺陷修復後可發布