# DramaLing 複習功能分階段開發與驗證計劃 ## 📋 計劃概覽 複習功能因其複雜性(7種測驗模式 + 5個Zustand Store + 智能排隊系統)導致難以驗證功能運作。本計劃採用**分層驗證**和**漸進式開發**策略,確保每個階段都有可驗證的成果。 --- ## 🎯 階段1: 現狀診斷與基礎驗證 (1週) ### 1.1 快速診斷目前運行狀況 - [ ] **檢查 frontend 編譯狀態** - 檢查 TypeScript 錯誤 - 驗證所有 import 路徑正確 - 確認 npm run dev 無錯誤啟動 - [ ] **測試 /review 頁面基本載入** - 訪問 http://localhost:3000/review - 檢查頁面是否正常顯示 - 驗證 Navigation 組件載入 - [ ] **檢查各個 Store 的狀態初始化** - useReviewSessionStore: 會話初始化 - useTestQueueStore: 佇列狀態管理 - useTestResultStore: 分數統計 - useReviewDataStore: 數據載入 - useReviewUIStore: UI 狀態管理 - [ ] **驗證 API 連接和數據流** - getDueFlashcards API 是否正常回應 - recordTestCompletion 結果記錄 - 檢查 console 是否有 API 錯誤 ### 1.2 建立驗證工具和測試環境 - [ ] **添加詳細的追蹤日誌** ```typescript // 在關鍵位置添加 console.log console.log('🔍 [ReviewData] 載入到期詞卡:', dueCards.length) console.log('🎯 [TestQueue] 當前測驗索引:', currentTestIndex) console.log('✅ [TestResult] 答題結果:', { isCorrect, score }) ``` - [ ] **設置 React DevTools 監控** - 安裝 React Developer Tools 擴展 - 監控 Zustand store 狀態變化 - 追蹤組件 re-render 頻率 - [ ] **創建 Mock 數據和測試用例** ```typescript // 創建 /lib/mock/reviewMockData.ts export const mockDueCards = [ { id: 'test-1', word: 'hello', definition: 'a greeting', example: 'Hello, how are you?', cefr: 'A1' } ] ``` - [ ] **建立簡化的測試模式** - 創建環境變數 REVIEW_TEST_MODE - 在測試模式下使用固定 Mock 數據 - 跳過複雜的 API 呼叫 ### 1.3 簡化現有邏輯為可驗證版本 - [ ] **暫時關閉複雜功能** - 智能優先級排隊算法 → 簡單順序排列 - CEFR 自適應分配 → 固定測驗類型 - 答錯重複練習 → 直接跳過 - [ ] **只保留核心測驗模式** - 保留: `flip-memory` 和 `vocab-choice` - 註解: 其他 5 種測驗模式 - 確保這 2 種模式完全可用 - [ ] **建立最小可用版本 (MVP)** - 用戶進入 /review 頁面 - 載入 1-3 張測試詞卡 - 完成翻卡記憶和詞彙選擇測試 - 顯示基本分數和完成狀態 **階段1 成功標準**: /review 頁面能穩定載入並完成 2 種基本測驗模式 --- ## 🔧 階段2: 核心功能逐個驗證 (2週) ### 2.1 Store 層逐個驗證 - [ ] **useReviewDataStore 驗證** ```typescript // 測試項目: - loadDueCards() 正確載入數據 - showNoDueCards 狀態切換正確 - isLoadingCards 載入狀態管理 - resetData() 重置功能正常 ``` - [ ] **useTestQueueStore 驗證** ```typescript // 測試項目: - initializeTestQueue() 正確生成測驗項目 - goToNextTest() 正確跳轉下一題 - markTestCompleted() 標記完成狀態 - skipCurrentTest() 跳過功能正常 ``` - [ ] **useReviewSessionStore 驗證** ```typescript // 測試項目: - setCurrentCard() 當前詞卡設置 - mounted 組件掛載狀態 - error 錯誤處理機制 - resetSession() 重置會話 ``` - [ ] **useTestResultStore 驗證** ```typescript // 測試項目: - updateScore() 分數更新邏輯 - recordTestResult() 結果記錄 - resetScore() 分數重置 - 統計數據計算正確性 ``` - [ ] **useReviewUIStore 驗證** ```typescript // 測試項目: - Modal 狀態管理 (TaskList, Report, Image) - UI 交互狀態切換 - 錯誤回報流程 ``` ### 2.2 組件層驗證 - [ ] **FlipMemoryTest 完整測試** - 3D 翻卡動畫是否流暢 - 信心度選擇邏輯 - onConfidenceSubmit 回調正確 - 響應式高度調整 - [ ] **VocabChoiceTest 完整測試** - 4選1 選項生成邏輯 - 答案驗證正確性 - 選項打亂算法 - onAnswer 回調處理 - [ ] **NavigationController 測試** - 跳過按鈕顯示邏輯 - 繼續按鈕啟用條件 - disabled 狀態處理 - 按鈕點擊回調 - [ ] **ProgressTracker 測試** - 進度百分比計算 - 進度條動畫效果 - 點擊顯示任務清單 - 數據更新響應 ### 2.3 ReviewRunner 集成測試 - [ ] **測驗流程端到端測試** ```typescript // 測試流程: 1. 進入頁面 → 載入詞卡 → 顯示第一個測驗 2. 完成測驗 → 提交答案 → 顯示繼續按鈕 3. 點擊繼續 → 跳轉下一題 → 重複流程 4. 完成所有測驗 → 顯示完成頁面 ``` - [ ] **錯誤處理和恢復機制** - API 載入失敗處理 - 網路中斷恢復 - 組件錯誤邊界 - 狀態不一致修復 - [ ] **狀態同步驗證** - Store 間數據同步 - UI 狀態與邏輯狀態一致 - 路由跳轉狀態保持 **階段2 成功標準**: 2種測驗模式完全穩定,無明顯 bug,用戶體驗流暢 --- ## 🚀 階段3: 功能擴展與優化 (3週) ### 3.1 測驗模式逐個擴展 - [ ] **SentenceFillTest 實現與驗證** - 填空邏輯實現 - 答案變形驗證 (複數、時態等) - UI 交互優化 - [ ] **SentenceReorderTest 實現與驗證** - 拖拉排序功能 - 答案驗證算法 - 響應式排版 - [ ] **VocabListeningTest 實現與驗證** - TTS 音頻播放 - 聽力選擇邏輯 - BluePlayButton 集成 - [ ] **SentenceListeningTest 實現與驗證** - 句子音頻播放 - 聽力理解測試 - 圖片輔助顯示 - [ ] **SentenceSpeakingTest 實現與驗證** - 語音錄製功能 - 發音評估邏輯 - 用戶回饋機制 **測驗模式驗證策略**: ```typescript // 每種模式獨立驗證後再集成 1. 單獨測試組件功能 2. 模擬答題流程 3. 驗證答案判定邏輯 4. 測試錯誤處理 5. 集成到 ReviewRunner ``` ### 3.2 智能化功能實現 - [ ] **CEFR 智能分配算法** ```typescript // 實現功能: - getReviewTypesByCEFR() 根據等級分配測驗 - 用戶等級 vs 詞彙等級的難度計算 - 個性化測驗類型推薦 ``` - [ ] **答錯重複練習機制** ```typescript // 實現功能: - 答錯題目標記和重新排隊 - 優先級計算 (答錯=20分, 跳過=10分) - reorderByPriority() 智能重排算法 ``` - [ ] **學習成效追蹤** ```typescript // 實現功能: - 個人學習模式分析 - 弱項模式識別和加強 - 學習路徑動態調整 ``` ### 3.3 性能和體驗優化 - [ ] **React 性能優化** ```typescript // 優化項目: - 使用 React.memo 避免不必要重渲染 - useMemo 緩存複雜計算 - useCallback 穩定化函數引用 - 組件拆分減少渲染範圍 ``` - [ ] **Zustand Store 優化** ```typescript // 優化項目: - subscribeWithSelector 精確訂閱 - 批量狀態更新減少 re-render - Store 拆分避免過大狀態樹 ``` - [ ] **用戶體驗細節完善** - 載入動畫和骨架屏 - 測驗切換過渡動畫 - 錯誤提示和回饋優化 - 響應式設計完善 **階段3 成功標準**: 7種測驗模式全部實現,智能化功能運作正常,用戶體驗流暢 --- ## 📊 驗證工具和技術手段 ### 開發工具配置 ```bash # React DevTools npm install -g react-devtools # Zustand DevTools # 在 store 中啟用 devtools middleware # 性能監控 # 使用 React.Profiler 監控組件性能 ``` ### 測試策略 ```typescript // 1. 單元測試 (Jest + React Testing Library) - Store 邏輯測試 - 組件交互測試 - 工具函數測試 // 2. 集成測試 - 完整流程測試 - API 模擬測試 - 錯誤場景測試 // 3. 手動測試 - 真實用戶場景模擬 - 不同設備響應式測試 - 邊界條件測試 ``` ### 版本控制策略 ```bash # 分支管理 main # 穩定版本 feature/review-stage1 # 階段1開發 feature/review-stage2 # 階段2開發 feature/review-stage3 # 階段3開發 # 每個階段完成後合併到 main # 保持每個版本都是可運行的狀態 ``` --- ## 🎯 成功標準和里程碑 ### 階段1 完成標準 - [ ] /review 頁面無編譯錯誤 - [ ] 基本測驗流程可運行 - [ ] 詳細日誌追蹤建立 - [ ] Mock 測試環境設置完成 ### 階段2 完成標準 - [ ] 5個 Store 功能全部驗證通過 - [ ] 2種核心測驗模式穩定運行 - [ ] 錯誤處理機制完善 - [ ] 狀態同步無問題 ### 階段3 完成標準 - [ ] 7種測驗模式全部實現 - [ ] 智能化功能運作正常 - [ ] 性能優化達到預期指標 - [ ] 用戶體驗測試通過 ### 最終交付標準 - [ ] 功能完整性: 所有規格文檔功能實現 - [ ] 穩定性: 無重大 bug,錯誤處理完善 - [ ] 性能: 載入<2秒,切換<500ms - [ ] 可維護性: 代碼結構清晰,文檔完整 --- ## 📝 風險控制和應對策略 ### 主要風險點 1. **狀態同步複雜度**: 5個 Store 間狀態同步 2. **測驗邏輯正確性**: 7種不同測驗模式的答案驗證 3. **性能問題**: 複雜狀態管理導致渲染性能下降 4. **用戶體驗**: 複雜流程導致用戶困惑 ### 應對策略 1. **分層驗證**: 每層單獨驗證後再集成 2. **漸進式開發**: 從簡單到複雜,每步可驗證 3. **充足測試**: 單元測試 + 集成測試 + 手動測試 4. **性能監控**: 持續監控性能指標,及時優化 --- *計劃制定日期: 2025-10-02* *預計完成時間: 6-8週* *負責開發: DramaLing 開發團隊*