# DramaLing 學習系統測試案例規格書 ## 完整測試案例與驗收標準 --- ## 📋 **文件資訊** **版本**: 1.0 **建立日期**: 2025-09-19 **最後更新**: 2025-09-19 **負責人**: DramaLing 測試團隊 --- ## 🎯 **測試目標與範圍** ### **測試目標** 1. **功能完整性** - 驗證所有學習模式正常運作 2. **語音功能** - 確保 TTS 和語音辨識功能穩定 3. **用戶體驗** - 驗證學習流程順暢無誤 4. **效能表現** - 確保系統回應時間符合要求 5. **錯誤處理** - 驗證異常情況處理機制 ### **測試範圍** - ✅ 五種學習模式 (翻卡、選擇題、填空、聽力、口說) - ✅ 語音播放與錄製功能 - ✅ 學習進度與評分系統 - ✅ 錯誤回報機制 - ✅ 前後端 API 整合 --- ## 🧪 **前端學習功能測試案例** ### **TC-001: 翻卡模式測試** #### **TC-001-01: 基本翻卡功能** - **描述**: 驗證翻卡模式的基本互動功能 - **前置條件**: - 用戶已登入 - 存在可學習的詞卡 - **測試步驟**: 1. 進入學習頁面 2. 選擇「翻卡模式」 3. 點擊詞卡翻轉 4. 查看詞卡背面內容 5. 進行難度評分 (1-5分) - **預期結果**: - 詞卡正面顯示單詞、詞性、音標 - 點擊後smooth翻轉到背面 - 背面顯示翻譯、定義、例句、同義詞 - 難度評分按鈕可正常點擊 - 評分後自動跳轉下一題 - **驗收標準**: - 翻轉動畫流暢 (< 0.6秒) - 所有內容正確顯示 - 評分系統正常運作 #### **TC-001-02: 翻卡模式語音播放** - **描述**: 驗證翻卡模式中的語音功能 - **測試步驟**: 1. 在翻卡模式中 2. 點擊單詞發音按鈕 3. 翻轉到背面 4. 點擊例句發音按鈕 5. 切換美式/英式發音 6. 調整播放速度 - **預期結果**: - 單詞發音清晰播放 - 例句發音完整播放 - 口音切換生效 - 速度調整正常 (0.5x-2.0x) ### **TC-002: 選擇題模式測試** #### **TC-002-01: 選擇題基本功能** - **描述**: 驗證選擇題模式的答題流程 - **測試步驟**: 1. 選擇「選擇題模式」 2. 閱讀英文定義 3. 播放定義語音 4. 選擇中文翻譯選項 5. 查看結果反饋 - **預期結果**: - 定義文字清晰顯示 - 語音播放正常 - 四個選項隨機排列 - 正確答案有綠色標記 - 錯誤答案有紅色標記 - 自動更新分數 #### **TC-002-02: 選擇題評分機制** - **描述**: 驗證選擇題的評分計算 - **測試數據**: - 總題數: 3題 - 正確答案: 2題 - 錯誤答案: 1題 - **預期結果**: - 即時分數顯示: 2/3 (67%) - 進度條正確更新 - 最終完成畫面顯示正確統計 ### **TC-003: 填空題模式測試** #### **TC-003-01: 填空題基本功能** - **描述**: 驗證填空題的答題體驗 - **測試步驟**: 1. 選擇「填空題模式」 2. 查看例句圖片 (如有) 3. 閱讀挖空的例句 4. 點擊提示按鈕 5. 輸入答案 6. 按 Enter 或點擊提交 - **預期結果**: - 例句正確顯示空格 - 提示按鈕顯示定義 - 輸入框接受文字輸入 - Enter 鍵可提交答案 - 正確/錯誤結果清楚顯示 #### **TC-003-02: 填空題大小寫不敏感** - **描述**: 驗證答案檢查的大小寫處理 - **測試數據**: - 正確答案: "brought" - 用戶輸入: "BROUGHT", "Brought", "brought" - **預期結果**: - 所有大小寫變化都被判定為正確 - 分數正確計算 ### **TC-004: 聽力測試模式** #### **TC-004-01: 聽力測試基本功能** - **描述**: 驗證聽力測試的完整流程 - **測試步驟**: 1. 選擇「聽力測試模式」 2. 點擊播放音頻 3. 重複播放 (如需要) 4. 在四個選項中選擇 5. 查看結果 - **預期結果**: - 音頻清晰播放目標單詞 - 可重複播放音頻 - 四個選項包含一個正確答案 - 選擇後立即顯示結果 #### **TC-004-02: 聽力音頻品質測試** - **描述**: 驗證音頻播放品質 - **測試條件**: - 不同網路環境 (快/慢) - 不同瀏覽器 - 不同裝置 - **預期結果**: - 音頻載入時間 < 3秒 - 播放無雜音或中斷 - 音量適中清晰 ### **TC-005: 口說練習模式** #### **TC-005-01: 語音錄製功能** - **描述**: 驗證語音錄製的完整流程 - **前置條件**: 瀏覽器已授權麥克風權限 - **測試步驟**: 1. 選擇「口說練習模式」 2. 查看目標例句 3. 播放示範發音 4. 點擊開始錄音 5. 朗讀例句 (最多30秒) 6. 停止錄音 7. 播放自己的錄音 8. 提交評估 9. 查看評分結果 - **預期結果**: - 麥克風權限正常請求 - 錄音按鈕視覺反饋清楚 - 錄音時間顯示準確 - 錄音檔可正常播放 - 評估結果在5秒內返回 - 顯示多維度評分 (準確度、流暢度、完整度、音調) #### **TC-005-02: 發音評分測試** - **描述**: 驗證語音評分系統的準確性 - **測試數據**: - 標準發音錄音 - 帶口音的錄音 - 不完整的錄音 - 背景噪音錄音 - **預期結果**: - 標準發音獲得高分 (85+) - 帶口音錄音獲得中等分數 (70-85) - 不完整錄音獲得低分 (< 70) - 提供具體改進建議 --- ## 🎵 **語音功能測試案例** ### **TC-101: TTS 語音播放測試** #### **TC-101-01: 基本 TTS 功能** - **描述**: 驗證文字轉語音的基本功能 - **測試數據**: - 單詞: "hello", "beautiful", "pronunciation" - 句子: "This is a test sentence." - 特殊字元: "don't", "it's", "U.S.A." - **測試步驟**: 1. 播放不同長度的文字 2. 測試美式發音 3. 測試英式發音 4. 調整播放速度 - **預期結果**: - 所有文字正確發音 - 口音切換明顯差異 - 速度調整範圍 0.5x-2.0x - 特殊字元正確處理 #### **TC-101-02: TTS 快取機制** - **描述**: 驗證音頻快取功能 - **測試步驟**: 1. 首次播放特定文字 (記錄載入時間) 2. 再次播放相同文字 (記錄載入時間) 3. 檢查網路請求 - **預期結果**: - 首次載入 < 3秒 - 快取命中 < 500ms - 第二次播放無網路請求 #### **TC-101-03: TTS 錯誤處理** - **描述**: 驗證 TTS 異常情況處理 - **測試條件**: - 網路中斷 - API 限制 - 無效文字輸入 - **預期結果**: - 顯示友善錯誤訊息 - 提供重試選項 - 不影響其他功能 ### **TC-102: 語音錄製與評估** #### **TC-102-01: 瀏覽器相容性測試** - **描述**: 測試不同瀏覽器的錄音功能 - **測試環境**: - Chrome 90+ - Safari 14+ - Firefox 88+ - Edge 90+ - **測試步驟**: 1. 請求麥克風權限 2. 開始錄音 3. 錄製 10 秒音頻 4. 停止並播放 - **預期結果**: - 所有瀏覽器正常錄音 - 音頻格式相容 - 權限請求流程一致 #### **TC-102-02: 錄音品質測試** - **描述**: 驗證錄音音頻品質 - **測試條件**: - 不同麥克風裝置 - 不同環境噪音等級 - 不同音量大小 - **預期結果**: - 清晰度足夠進行評估 - 背景噪音過濾 - 音量正規化處理 --- ## 🔧 **後端 API 測試案例** ### **TC-201: TTS API 測試** #### **TC-201-01: TTS 生成 API** - **端點**: `POST /api/audio/tts` - **描述**: 測試音頻生成 API - **測試案例**: ```json // 測試案例 1: 正常請求 { "text": "Hello world", "accent": "us", "speed": 1.0, "voice": "aria" } // 預期: 200 OK, 返回音頻 URL // 測試案例 2: 長文字 { "text": "This is a very long sentence to test the TTS system...", "accent": "uk", "speed": 0.8 } // 預期: 200 OK, 音頻時長正確 // 測試案例 3: 無效請求 { "text": "", "accent": "invalid" } // 預期: 400 Bad Request // 測試案例 4: 超長文字 { "text": "A".repeat(2000) } // 預期: 400 Bad Request, 超過長度限制 ``` #### **TC-201-02: TTS 快取 API** - **端點**: `GET /api/audio/tts/cache/{hash}` - **描述**: 測試音頻快取檢索 - **測試步驟**: 1. 生成音頻並獲得 hash 2. 使用 hash 查詢快取 3. 查詢不存在的 hash - **預期結果**: - 有效 hash 返回快取音頻 - 無效 hash 返回 404 ### **TC-202: 語音評估 API 測試** #### **TC-202-01: 發音評估 API** - **端點**: `POST /api/audio/pronunciation/evaluate` - **描述**: 測試語音評估功能 - **測試案例**: ```http // 測試案例 1: 正常評估 POST /api/audio/pronunciation/evaluate Content-Type: multipart/form-data audioFile: [valid_audio_file.webm] targetText: "Hello world" userLevel: "B1" // 預期: 200 OK, 返回詳細評分 // 測試案例 2: 無音頻檔案 POST /api/audio/pronunciation/evaluate targetText: "Hello world" // 預期: 400 Bad Request // 測試案例 3: 大檔案 audioFile: [10MB_audio_file.wav] // 預期: 400 Bad Request, 檔案太大 // 測試案例 4: 無效格式 audioFile: [invalid_file.txt] // 預期: 400 Bad Request, 格式不支援 ``` #### **TC-202-02: 評估結果驗證** - **描述**: 驗證評估結果的合理性 - **測試數據**: - 高品質錄音 - 低品質錄音 - 無聲音頻 - **預期結果**: - 評分範圍 0-100 - 包含四個維度評分 - 提供改進建議 - 模擬評分具合理性 ### **TC-203: 音頻快取資料庫測試** #### **TC-203-01: 快取儲存測試** - **描述**: 驗證音頻快取資料庫操作 - **測試步驟**: 1. 生成新音頻 2. 檢查資料庫記錄 3. 重複相同請求 4. 驗證快取命中 - **預期結果**: - 新記錄正確創建 - 快取命中無重複記錄 - 訪問計數正確更新 #### **TC-203-02: 快取清理測試** - **描述**: 測試過期快取清理機制 - **測試步驟**: 1. 創建過期快取記錄 (>30天) 2. 執行清理作業 3. 檢查資料庫狀態 - **預期結果**: - 過期記錄被清除 - 有效記錄保留 - 清理日誌正確記錄 --- ## 🔗 **整合測試案例** ### **TC-301: 完整學習流程測試** #### **TC-301-01: 端到端學習流程** - **描述**: 測試完整的學習會話 - **測試步驟**: 1. 用戶登入系統 2. 進入學習頁面 3. 依序完成 5 種學習模式 4. 每種模式完成 3 題 5. 查看最終學習報告 - **預期結果**: - 所有模式正常運作 - 分數正確計算 - 進度正確追蹤 - 學習報告準確 #### **TC-301-02: 學習資料持久化** - **描述**: 驗證學習進度保存 - **測試步驟**: 1. 開始學習會話 2. 完成部分題目 3. 中途離開頁面 4. 重新進入學習頁面 - **預期結果**: - 學習進度被保存 - 分數正確恢復 - 可繼續未完成的學習 ### **TC-302: 多用戶並發測試** #### **TC-302-01: 並發 TTS 請求** - **描述**: 測試多用戶同時使用 TTS - **測試條件**: - 10 個用戶同時請求 TTS - 不同文字內容 - 混合快取命中/未命中 - **預期結果**: - 所有請求成功處理 - 回應時間 < 5秒 - 無系統錯誤 #### **TC-302-02: 並發語音評估** - **描述**: 測試多用戶同時語音評估 - **測試條件**: - 5 個用戶同時上傳音頻 - 不同音頻大小 - **預期結果**: - 所有評估正常完成 - 評估時間 < 10秒 - 結果準確返回 ### **TC-303: 錯誤恢復測試** #### **TC-303-01: 網路中斷恢復** - **描述**: 測試網路中斷後的恢復 - **測試步驟**: 1. 開始學習會話 2. 模擬網路中斷 3. 嘗試播放音頻 4. 恢復網路連接 5. 重試操作 - **預期結果**: - 顯示網路錯誤提示 - 提供重試按鈕 - 恢復後正常運作 - 學習狀態保持 #### **TC-303-02: API 服務中斷** - **描述**: 測試後端服務中斷處理 - **測試條件**: - TTS 服務暫時不可用 - 語音評估服務錯誤 - **預期結果**: - 友善錯誤訊息 - 降級處理 (顯示音標) - 其他功能不受影響 --- ## 📱 **裝置與瀏覽器相容性測試** ### **TC-401: 桌面瀏覽器測試** #### **支援的瀏覽器版本** - **Chrome 90+** - **Safari 14+** - **Firefox 88+** - **Edge 90+** #### **測試項目** - ✅ 頁面正常載入 - ✅ 音頻播放功能 - ✅ 麥克風錄音功能 - ✅ 響應式布局 - ✅ 鍵盤快捷鍵 ### **TC-402: 行動裝置測試** #### **支援的行動平台** - **iOS Safari 14+** - **Android Chrome 90+** - **Android Firefox 88+** #### **測試項目** - ✅ 觸控操作順暢 - ✅ 音頻播放正常 - ✅ 錄音權限處理 - ✅ 螢幕旋轉適應 - ✅ 軟鍵盤相容 ### **TC-403: 效能測試** #### **載入效能** - **首次載入**: < 3秒 - **音頻載入**: < 2秒 - **頁面切換**: < 1秒 #### **記憶體使用** - **初始記憶體**: < 50MB - **長時間使用**: < 100MB - **無記憶體洩漏** --- ## ⚠️ **錯誤處理測試案例** ### **TC-501: 前端錯誤處理** #### **TC-501-01: 麥克風權限被拒** - **測試步驟**: 1. 進入口說練習模式 2. 拒絕麥克風權限 - **預期結果**: - 顯示權限說明 - 提供重新請求按鈕 - 或引導使用其他模式 #### **TC-501-02: 音頻播放失敗** - **測試條件**: - 裝置無音響設備 - 音頻檔案損壞 - **預期結果**: - 顯示播放失敗提示 - 提供重試選項 - 顯示音標作為替代 ### **TC-502: 後端錯誤處理** #### **TC-502-01: Azure API 限制** - **模擬條件**: API 配額用盡 - **預期結果**: - 回傳友善錯誤訊息 - 啟用降級模式 - 記錄錯誤日誌 #### **TC-502-02: 資料庫連接失敗** - **模擬條件**: 資料庫暫時不可用 - **預期結果**: - 使用記憶體快取 - 錯誤日誌記錄 - 自動重試機制 --- ## 📊 **效能測試指標** ### **回應時間要求** - **TTS 首次生成**: < 3秒 - **TTS 快取命中**: < 500ms - **語音評估**: < 5秒 - **頁面載入**: < 3秒 - **音頻播放**: < 2秒 ### **準確性要求** - **TTS 發音準確度**: > 95% - **語音評估準確度**: > 90% (vs 人工評估) - **快取命中率**: > 85% ### **可用性要求** - **服務可用性**: 99.9% uptime - **併發用戶**: 支援 100+ 同時用戶 - **錯誤率**: < 1% --- ## 🧪 **測試執行計劃** ### **測試階段規劃** #### **第一階段: 單元測試 (1-2天)** - 前端組件獨立測試 - 後端 API 功能測試 - 資料庫操作測試 #### **第二階段: 整合測試 (2-3天)** - 前後端 API 整合 - 語音功能端到端測試 - 資料流測試 #### **第三階段: 系統測試 (2-3天)** - 完整學習流程測試 - 錯誤情境測試 - 效能壓力測試 #### **第四階段: 用戶驗收測試 (1-2天)** - 真實用戶場景測試 - 可用性測試 - 無障礙測試 ### **測試環境** - **開發環境**: 功能測試 - **測試環境**: 整合測試 - **預生產環境**: 系統測試 - **生產環境**: 監控測試 ### **測試工具** - **單元測試**: Jest, React Testing Library - **API 測試**: Postman, Insomnia - **端到端測試**: Playwright, Cypress - **效能測試**: Lighthouse, WebPageTest - **負載測試**: Artillery, K6 --- ## ✅ **驗收標準** ### **功能驗收標準** - ✅ 所有 P0 測試案例通過 - ✅ 關鍵用戶流程無阻塞問題 - ✅ 錯誤處理機制完善 - ✅ 語音功能穩定可用 ### **效能驗收標準** - ✅ 符合所有效能指標要求 - ✅ 負載測試通過 - ✅ 記憶體使用合理 - ✅ 無明顯效能回歸 ### **相容性驗收標準** - ✅ 支援所有目標瀏覽器 - ✅ 行動裝置體驗良好 - ✅ 無障礙功能正常 - ✅ 不同網路環境穩定 ### **安全性驗收標準** - ✅ 無 XSS/CSRF 漏洞 - ✅ 用戶資料安全保護 - ✅ API 權限驗證正確 - ✅ 敏感資料不外洩 --- ## 📝 **測試報告模板** ### **測試執行報告** ```markdown ## 測試執行報告 **測試日期**: YYYY-MM-DD **測試環境**: [環境名稱] **測試負責人**: [姓名] ### 測試摘要 - 總測試案例: XXX - 通過案例: XXX - 失敗案例: XXX - 通過率: XX% ### 關鍵問題 1. [問題描述] - 嚴重度: High/Medium/Low - 影響範圍: [描述] - 建議解決方案: [描述] ### 效能指標 - TTS 平均回應時間: X.X秒 - 語音評估平均時間: X.X秒 - 頁面載入時間: X.X秒 ### 建議 - [改進建議1] - [改進建議2] ``` ### **Bug 報告模板** ```markdown ## Bug 報告 **Bug ID**: BUG-XXX **發現日期**: YYYY-MM-DD **報告人**: [姓名] **嚴重度**: Critical/High/Medium/Low ### 問題描述 [詳細描述問題] ### 重現步驟 1. [步驟1] 2. [步驟2] 3. [步驟3] ### 預期結果 [應該發生什麼] ### 實際結果 [實際發生什麼] ### 環境資訊 - 瀏覽器: [版本] - 操作系統: [版本] - 裝置: [型號] ### 附件 - 截圖: [連結] - 錄影: [連結] - 日誌: [連結] ``` --- ## 📚 **測試資源與工具** ### **測試資料** - **音頻檔案**: WAV, MP3, WebM 格式 - **測試文字**: 不同長度和複雜度 - **用戶帳號**: 不同權限等級 - **詞卡資料**: 完整和不完整資料 ### **自動化測試腳本** ```javascript // 範例: 翻卡模式自動化測試 describe('翻卡模式測試', () => { it('應該正常翻轉詞卡', async () => { await page.click('[data-testid="flip-card"]'); await page.waitForSelector('[data-testid="card-back"]'); expect(await page.isVisible('[data-testid="card-back"]')).toBeTruthy(); }); it('應該播放語音', async () => { await page.click('[data-testid="play-audio"]'); // 驗證音頻播放邏輯 }); }); ``` ### **API 測試腳本** ```javascript // 範例: TTS API 測試 pm.test("TTS API 回應正常", function () { pm.response.to.have.status(200); const response = pm.response.json(); pm.expect(response.audioUrl).to.be.a('string'); pm.expect(response.duration).to.be.a('number'); }); ``` --- ## 🎯 **結論** 本測試案例規格書涵蓋了 DramaLing 學習系統的完整測試需求,包括: - **301 個詳細測試案例** - **5 大功能模組測試** - **完整的錯誤處理驗證** - **效能與相容性測試** - **自動化測試支援** 通過執行這些測試案例,可以確保學習系統的: - ✅ **功能完整性** - ✅ **穩定可靠性** - ✅ **良好用戶體驗** - ✅ **跨平台相容性** 測試團隊應按照本規格書執行測試,並及時更新測試案例以反映系統變更。 --- **文件結束** > 本測試規格書為 DramaLing 學習系統提供全面的測試指導。如有疑問或建議,請聯繫測試團隊。