19 KiB
19 KiB
DramaLing 學習系統測試案例規格書
完整測試案例與驗收標準
📋 文件資訊
版本: 1.0 建立日期: 2025-09-19 最後更新: 2025-09-19 負責人: DramaLing 測試團隊
🎯 測試目標與範圍
測試目標
- 功能完整性 - 驗證所有學習模式正常運作
- 語音功能 - 確保 TTS 和語音辨識功能穩定
- 用戶體驗 - 驗證學習流程順暢無誤
- 效能表現 - 確保系統回應時間符合要求
- 錯誤處理 - 驗證異常情況處理機制
測試範圍
- ✅ 五種學習模式 (翻卡、選擇題、填空、聽力、口說)
- ✅ 語音播放與錄製功能
- ✅ 學習進度與評分系統
- ✅ 錯誤回報機制
- ✅ 前後端 API 整合
🧪 前端學習功能測試案例
TC-001: 翻卡模式測試
TC-001-01: 基本翻卡功能
- 描述: 驗證翻卡模式的基本互動功能
- 前置條件:
- 用戶已登入
- 存在可學習的詞卡
- 測試步驟:
- 進入學習頁面
- 選擇「翻卡模式」
- 點擊詞卡翻轉
- 查看詞卡背面內容
- 進行難度評分 (1-5分)
- 預期結果:
- 詞卡正面顯示單詞、詞性、音標
- 點擊後smooth翻轉到背面
- 背面顯示翻譯、定義、例句、同義詞
- 難度評分按鈕可正常點擊
- 評分後自動跳轉下一題
- 驗收標準:
- 翻轉動畫流暢 (< 0.6秒)
- 所有內容正確顯示
- 評分系統正常運作
TC-001-02: 翻卡模式語音播放
- 描述: 驗證翻卡模式中的語音功能
- 測試步驟:
- 在翻卡模式中
- 點擊單詞發音按鈕
- 翻轉到背面
- 點擊例句發音按鈕
- 切換美式/英式發音
- 調整播放速度
- 預期結果:
- 單詞發音清晰播放
- 例句發音完整播放
- 口音切換生效
- 速度調整正常 (0.5x-2.0x)
TC-002: 選擇題模式測試
TC-002-01: 選擇題基本功能
- 描述: 驗證選擇題模式的答題流程
- 測試步驟:
- 選擇「選擇題模式」
- 閱讀英文定義
- 播放定義語音
- 選擇中文翻譯選項
- 查看結果反饋
- 預期結果:
- 定義文字清晰顯示
- 語音播放正常
- 四個選項隨機排列
- 正確答案有綠色標記
- 錯誤答案有紅色標記
- 自動更新分數
TC-002-02: 選擇題評分機制
- 描述: 驗證選擇題的評分計算
- 測試數據:
- 總題數: 3題
- 正確答案: 2題
- 錯誤答案: 1題
- 預期結果:
- 即時分數顯示: 2/3 (67%)
- 進度條正確更新
- 最終完成畫面顯示正確統計
TC-003: 填空題模式測試
TC-003-01: 填空題基本功能
- 描述: 驗證填空題的答題體驗
- 測試步驟:
- 選擇「填空題模式」
- 查看例句圖片 (如有)
- 閱讀挖空的例句
- 點擊提示按鈕
- 輸入答案
- 按 Enter 或點擊提交
- 預期結果:
- 例句正確顯示空格
- 提示按鈕顯示定義
- 輸入框接受文字輸入
- Enter 鍵可提交答案
- 正確/錯誤結果清楚顯示
TC-003-02: 填空題大小寫不敏感
- 描述: 驗證答案檢查的大小寫處理
- 測試數據:
- 正確答案: "brought"
- 用戶輸入: "BROUGHT", "Brought", "brought"
- 預期結果:
- 所有大小寫變化都被判定為正確
- 分數正確計算
TC-004: 聽力測試模式
TC-004-01: 聽力測試基本功能
- 描述: 驗證聽力測試的完整流程
- 測試步驟:
- 選擇「聽力測試模式」
- 點擊播放音頻
- 重複播放 (如需要)
- 在四個選項中選擇
- 查看結果
- 預期結果:
- 音頻清晰播放目標單詞
- 可重複播放音頻
- 四個選項包含一個正確答案
- 選擇後立即顯示結果
TC-004-02: 聽力音頻品質測試
- 描述: 驗證音頻播放品質
- 測試條件:
- 不同網路環境 (快/慢)
- 不同瀏覽器
- 不同裝置
- 預期結果:
- 音頻載入時間 < 3秒
- 播放無雜音或中斷
- 音量適中清晰
TC-005: 口說練習模式
TC-005-01: 語音錄製功能
- 描述: 驗證語音錄製的完整流程
- 前置條件: 瀏覽器已授權麥克風權限
- 測試步驟:
- 選擇「口說練習模式」
- 查看目標例句
- 播放示範發音
- 點擊開始錄音
- 朗讀例句 (最多30秒)
- 停止錄音
- 播放自己的錄音
- 提交評估
- 查看評分結果
- 預期結果:
- 麥克風權限正常請求
- 錄音按鈕視覺反饋清楚
- 錄音時間顯示準確
- 錄音檔可正常播放
- 評估結果在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."
- 測試步驟:
- 播放不同長度的文字
- 測試美式發音
- 測試英式發音
- 調整播放速度
- 預期結果:
- 所有文字正確發音
- 口音切換明顯差異
- 速度調整範圍 0.5x-2.0x
- 特殊字元正確處理
TC-101-02: TTS 快取機制
- 描述: 驗證音頻快取功能
- 測試步驟:
- 首次播放特定文字 (記錄載入時間)
- 再次播放相同文字 (記錄載入時間)
- 檢查網路請求
- 預期結果:
- 首次載入 < 3秒
- 快取命中 < 500ms
- 第二次播放無網路請求
TC-101-03: TTS 錯誤處理
- 描述: 驗證 TTS 異常情況處理
- 測試條件:
- 網路中斷
- API 限制
- 無效文字輸入
- 預期結果:
- 顯示友善錯誤訊息
- 提供重試選項
- 不影響其他功能
TC-102: 語音錄製與評估
TC-102-01: 瀏覽器相容性測試
- 描述: 測試不同瀏覽器的錄音功能
- 測試環境:
- Chrome 90+
- Safari 14+
- Firefox 88+
- Edge 90+
- 測試步驟:
- 請求麥克風權限
- 開始錄音
- 錄製 10 秒音頻
- 停止並播放
- 預期結果:
- 所有瀏覽器正常錄音
- 音頻格式相容
- 權限請求流程一致
TC-102-02: 錄音品質測試
- 描述: 驗證錄音音頻品質
- 測試條件:
- 不同麥克風裝置
- 不同環境噪音等級
- 不同音量大小
- 預期結果:
- 清晰度足夠進行評估
- 背景噪音過濾
- 音量正規化處理
🔧 後端 API 測試案例
TC-201: TTS API 測試
TC-201-01: TTS 生成 API
- 端點:
POST /api/audio/tts - 描述: 測試音頻生成 API
- 測試案例:
// 測試案例 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} - 描述: 測試音頻快取檢索
- 測試步驟:
- 生成音頻並獲得 hash
- 使用 hash 查詢快取
- 查詢不存在的 hash
- 預期結果:
- 有效 hash 返回快取音頻
- 無效 hash 返回 404
TC-202: 語音評估 API 測試
TC-202-01: 發音評估 API
- 端點:
POST /api/audio/pronunciation/evaluate - 描述: 測試語音評估功能
- 測試案例:
// 測試案例 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: 快取儲存測試
- 描述: 驗證音頻快取資料庫操作
- 測試步驟:
- 生成新音頻
- 檢查資料庫記錄
- 重複相同請求
- 驗證快取命中
- 預期結果:
- 新記錄正確創建
- 快取命中無重複記錄
- 訪問計數正確更新
TC-203-02: 快取清理測試
- 描述: 測試過期快取清理機制
- 測試步驟:
- 創建過期快取記錄 (>30天)
- 執行清理作業
- 檢查資料庫狀態
- 預期結果:
- 過期記錄被清除
- 有效記錄保留
- 清理日誌正確記錄
🔗 整合測試案例
TC-301: 完整學習流程測試
TC-301-01: 端到端學習流程
- 描述: 測試完整的學習會話
- 測試步驟:
- 用戶登入系統
- 進入學習頁面
- 依序完成 5 種學習模式
- 每種模式完成 3 題
- 查看最終學習報告
- 預期結果:
- 所有模式正常運作
- 分數正確計算
- 進度正確追蹤
- 學習報告準確
TC-301-02: 學習資料持久化
- 描述: 驗證學習進度保存
- 測試步驟:
- 開始學習會話
- 完成部分題目
- 中途離開頁面
- 重新進入學習頁面
- 預期結果:
- 學習進度被保存
- 分數正確恢復
- 可繼續未完成的學習
TC-302: 多用戶並發測試
TC-302-01: 並發 TTS 請求
- 描述: 測試多用戶同時使用 TTS
- 測試條件:
- 10 個用戶同時請求 TTS
- 不同文字內容
- 混合快取命中/未命中
- 預期結果:
- 所有請求成功處理
- 回應時間 < 5秒
- 無系統錯誤
TC-302-02: 並發語音評估
- 描述: 測試多用戶同時語音評估
- 測試條件:
- 5 個用戶同時上傳音頻
- 不同音頻大小
- 預期結果:
- 所有評估正常完成
- 評估時間 < 10秒
- 結果準確返回
TC-303: 錯誤恢復測試
TC-303-01: 網路中斷恢復
- 描述: 測試網路中斷後的恢復
- 測試步驟:
- 開始學習會話
- 模擬網路中斷
- 嘗試播放音頻
- 恢復網路連接
- 重試操作
- 預期結果:
- 顯示網路錯誤提示
- 提供重試按鈕
- 恢復後正常運作
- 學習狀態保持
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: 麥克風權限被拒
- 測試步驟:
- 進入口說練習模式
- 拒絕麥克風權限
- 預期結果:
- 顯示權限說明
- 提供重新請求按鈕
- 或引導使用其他模式
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 權限驗證正確
- ✅ 敏感資料不外洩
📝 測試報告模板
測試執行報告
## 測試執行報告
**測試日期**: YYYY-MM-DD
**測試環境**: [環境名稱]
**測試負責人**: [姓名]
### 測試摘要
- 總測試案例: XXX
- 通過案例: XXX
- 失敗案例: XXX
- 通過率: XX%
### 關鍵問題
1. [問題描述]
- 嚴重度: High/Medium/Low
- 影響範圍: [描述]
- 建議解決方案: [描述]
### 效能指標
- TTS 平均回應時間: X.X秒
- 語音評估平均時間: X.X秒
- 頁面載入時間: X.X秒
### 建議
- [改進建議1]
- [改進建議2]
Bug 報告模板
## Bug 報告
**Bug ID**: BUG-XXX
**發現日期**: YYYY-MM-DD
**報告人**: [姓名]
**嚴重度**: Critical/High/Medium/Low
### 問題描述
[詳細描述問題]
### 重現步驟
1. [步驟1]
2. [步驟2]
3. [步驟3]
### 預期結果
[應該發生什麼]
### 實際結果
[實際發生什麼]
### 環境資訊
- 瀏覽器: [版本]
- 操作系統: [版本]
- 裝置: [型號]
### 附件
- 截圖: [連結]
- 錄影: [連結]
- 日誌: [連結]
📚 測試資源與工具
測試資料
- 音頻檔案: WAV, MP3, WebM 格式
- 測試文字: 不同長度和複雜度
- 用戶帳號: 不同權限等級
- 詞卡資料: 完整和不完整資料
自動化測試腳本
// 範例: 翻卡模式自動化測試
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 測試腳本
// 範例: 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 學習系統提供全面的測試指導。如有疑問或建議,請聯繫測試團隊。