dramaling-vocab-learning/智能複習系統開發計劃.md

11 KiB
Raw Blame History

智能複習系統開發計劃

版本: 1.0 日期: 2025-09-28 基於: 產品需求規格書 v2.0 (/note/智能複習/智能複習系統-產品需求規格書.md)

一、專案概述

1.1 系統目標

建構一個基於CEFR標準的智能複習系統透過間隔重複算法和智能題型適配提供個人化的語言學習體驗。

1.2 當前系統狀態分析

已完成功能V2.0

  • 7種複習題型實現
  • 間隔重複算法SM2
  • CEFR智能適配系統
  • 前後端API完全串接
  • 測驗狀態持久化

待開發功能來自PRD US-008 & US-009

  • 🔄 智能測驗導航系統
  • 🔄 跳過題目管理系統
  • 🔄 狀態驅動的導航邏輯

二、元件架構設計

2.1 現有元件結構

frontend/
├── app/review/page.tsx              # 主頁面入口
├── components/review/
│   ├── ReviewRunner.tsx             # 測驗執行器
│   ├── ProgressTracker.tsx          # 進度追蹤器
│   ├── TaskListModal.tsx            # 任務清單彈窗
│   ├── LoadingStates.tsx            # 載入狀態組件
│   └── review-tests/                # 7種測驗組件
│       ├── FlipMemoryTest.tsx
│       ├── VocabChoiceTest.tsx
│       ├── SentenceFillTest.tsx
│       ├── SentenceReorderTest.tsx
│       ├── VocabListeningTest.tsx
│       ├── SentenceListeningTest.tsx
│       └── SentenceSpeakingTest.tsx
├── store/                           # 狀態管理
│   ├── useReviewSessionStore.ts     # 會話狀態
│   ├── useTestQueueStore.ts         # 測試隊列
│   ├── useTestResultStore.ts        # 測試結果
│   ├── useReviewDataStore.ts        # 複習數據
│   └── useUIStore.ts                # UI狀態
└── lib/services/
    └── review/reviewService.ts       # API服務層

2.2 需新增/修改的元件

根據PRD新需求US-008 & US-009需要新增或修改以下元件

2.2.1 核心元件重構

// 1. NavigationController 智能導航控制器
components/review/NavigationController.tsx
- 狀態驅動的按鈕顯示邏輯
- 跳過/繼續按鈕的條件渲染
- TestQueueStore深度整合

// 2. TestQueueManager 測試隊列管理器
components/review/TestQueueManager.tsx
- 優先級排序邏輯
- 跳過題目的隊列管理
- 智能回歸機制實現

// 3. TestStatusIndicator 測試狀態指示器
components/review/TestStatusIndicator.tsx
- 視覺化顯示不同狀態
- ✅已答對 ❌已答錯 ⏭️已跳過 ⚪未完成

2.2.2 共用元件抽離

// 基礎測驗元件介面
components/review/shared/BaseTestComponent.tsx
- 統一的答題狀態管理
- 標準化的導航整合點
- 共用的錯誤處理邏輯

// 答題動作元件
components/review/shared/AnswerActions.tsx
- 選擇題的選項點擊
- 填空題的輸入提交
- 錄音的完成確認

// 測驗容器元件
components/review/shared/TestContainer.tsx
- 統一的布局結構
- 進度顯示整合
- 導航控制器嵌入點

2.3 資料流程設計

graph TD
    A[使用者進入學習頁面] --> B[載入到期詞卡]
    B --> C[查詢已完成測驗]
    C --> D[生成測試隊列]

    D --> E{測驗狀態判斷}
    E -->|未答題| F[顯示跳過按鈕]
    E -->|已答題| G[顯示繼續按鈕]

    F -->|點擊跳過| H[標記為跳過狀態]
    H --> I[移到隊列最後]

    G -->|點擊繼續| J[進入下一題]

    K[答題動作] --> L{判斷結果}
    L -->|答對| M[從清單移除]
    L -->|答錯| N[移到隊列最後]

    I --> O[優先級重排]
    N --> O
    O --> P[載入下個測驗]

三、狀態管理設計

3.1 TestQueueStore 擴充

interface TestQueueStore {
  // 現有狀態
  testItems: TestItem[]
  currentTestIndex: number

  // 新增狀態
  skippedTests: Set<string>      // 跳過的測驗ID集合
  priorityQueue: TestItem[]       // 優先級排序後的隊列

  // 新增方法
  skipTest: (testId: string) => void
  reorderByPriority: () => void
  getNextTest: () => TestItem | null
  isAllTestsCompleted: () => boolean
}

3.2 NavigationStore新增

interface NavigationStore {
  // 導航狀態
  currentTestStatus: 'unanswered' | 'answered' | 'skipped'
  canSkip: boolean
  canContinue: boolean

  // 導航方法
  updateNavigationState: (status: string) => void
  handleSkip: () => void
  handleContinue: () => void
}

四、開發階段規劃

第一階段基礎架構調整2-3天

目標: 重構現有元件結構,建立共用元件基礎

任務清單:

  1. 抽離共用測驗元件邏輯
  2. 建立BaseTestComponent基礎類別
  3. 統一7種測驗的介面規範
  4. 整合答題動作處理邏輯

交付物:

  • 重構後的測驗元件
  • 共用元件文檔

第二階段智能導航系統3-4天

目標: 實現狀態驅動的導航邏輯

任務清單:

  1. 開發NavigationController元件
  2. 實現狀態判斷邏輯
  3. 整合答題與導航分離
  4. 建立NavigationStore

交付物:

  • NavigationController元件
  • 狀態驅動導航文檔

第三階段跳過隊列管理3-4天

目標: 實現智能隊列管理系統

任務清單:

  1. 擴充TestQueueStore功能
  2. 實現優先級排序演算法
  3. 開發TestQueueManager元件
  4. 實現跳過題目回歸邏輯

交付物:

  • 智能隊列管理系統
  • 優先級演算法文檔

第四階段狀態視覺化2天

目標: 提供清晰的測驗狀態回饋

任務清單:

  1. 開發TestStatusIndicator元件
  2. 更新TaskListModal視覺呈現
  3. 整合進度條顯示邏輯
  4. 實現狀態圖示系統

交付物:

  • 狀態指示器元件
  • 視覺化設計規範

第五階段整合測試與優化2-3天

目標: 確保系統穩定性與效能

任務清單:

  1. 端對端測試案例撰寫
  2. 效能優化(減少重新渲染)
  3. 錯誤處理機制完善
  4. 使用者體驗優化

交付物:

  • 測試報告
  • 效能優化報告

五、技術實施細節

5.1 元件通訊模式

// 使用事件驅動模式處理答題動作
interface AnswerEvent {
  type: 'select' | 'input' | 'record'
  payload: {
    answer: string
    confidence?: number
    timestamp: number
  }
}

// 統一的答題處理器
class AnswerHandler {
  process(event: AnswerEvent): void {
    // 1. 提交答案到後端
    // 2. 更新測驗狀態
    // 3. 觸發導航狀態更新
  }
}

5.2 優先級演算法

interface PriorityAlgorithm {
  // 計算測驗優先級分數
  calculatePriority(test: TestItem): number {
    if (test.status === 'unattempted') return 100
    if (test.status === 'incorrect') return 20
    if (test.status === 'skipped') return 10
    return 0
  }

  // 重新排序隊列
  reorderQueue(tests: TestItem[]): TestItem[] {
    return tests.sort((a, b) =>
      this.calculatePriority(b) - this.calculatePriority(a)
    )
  }
}

5.3 狀態持久化策略

// 使用IndexedDB儲存學習進度
interface PersistenceLayer {
  // 儲存跳過狀態
  saveSkippedTests(testIds: string[]): Promise<void>

  // 恢復學習進度
  restoreProgress(userId: string): Promise<LearningProgress>

  // 清理過期數據
  cleanupOldData(): Promise<void>
}

六、風險評估與緩解策略

6.1 技術風險

風險項目 可能影響 緩解策略
狀態管理複雜度 開發延期 採用明確的狀態機模式
優先級演算法效能 使用者體驗 實施漸進式載入
跨元件通訊 維護困難 建立統一事件總線

6.2 使用者體驗風險

風險項目 可能影響 緩解策略
導航邏輯不直觀 使用者困惑 A/B測試驗證
跳過機制濫用 學習效果降低 設置跳過次數限制
狀態切換延遲 操作不流暢 優化渲染效能

七、測試策略

7.1 單元測試

// 測試優先級演算法
describe('PriorityAlgorithm', () => {
  test('未嘗試題目應有最高優先級', () => {
    // 測試邏輯
  })

  test('跳過題目應排在最後', () => {
    // 測試邏輯
  })
})

7.2 整合測試

  • 測試完整學習流程
  • 驗證狀態持久化
  • 確認API整合正確性

7.3 E2E測試場景

  1. 正常學習流程
  2. 大量跳過後的處理
  3. 頁面刷新後的狀態恢復
  4. 網路中斷的容錯處理

八、效能優化策略

8.1 渲染優化

  • 使用React.memo減少不必要的重新渲染
  • 實施虛擬滾動處理大量測驗項目
  • 懶載入非關鍵元件

8.2 狀態管理優化

  • 使用選擇器避免全域狀態更新
  • 實施狀態分片減少更新範圍
  • 採用不可變數據結構

8.3 網路請求優化

  • 實施請求快取機制
  • 批次處理測驗結果提交
  • 預載下一個測驗資料

九、監控與維護

9.1 關鍵指標監控

  • 平均答題時間
  • 跳過率統計
  • 完成率追蹤
  • 錯誤率分析

9.2 日誌記錄

interface LearningAnalytics {
  // 記錄使用者行為
  trackUserAction(action: UserAction): void

  // 記錄系統事件
  logSystemEvent(event: SystemEvent): void

  // 錯誤追蹤
  captureError(error: Error, context: any): void
}

十、里程碑與交付時程

里程碑 預計完成日期 交付物
M1: 基礎架構完成 2025-10-01 重構元件、共用邏輯
M2: 導航系統上線 2025-10-05 智能導航控制器
M3: 隊列管理完成 2025-10-09 跳過題目管理系統
M4: 視覺化完成 2025-10-11 狀態指示器
M5: 系統上線 2025-10-14 完整功能、測試報告

十一、成功指標

11.1 技術指標

  • 程式碼覆蓋率 > 80%
  • 頁面載入時間 < 2秒
  • API回應時間 < 500ms
  • 零重大錯誤

11.2 業務指標

  • 完成率提升 15%
  • 跳過率 < 20%
  • 使用者滿意度 > 85%
  • 學習效率提升 20%

十二、參考文件

  1. 產品需求規格書
  2. 前端Review功能架構評估報告
  3. 智能填空題系統設計規格

批准: 待確認 預計開始日期: 2025-09-29 預計完成日期: 2025-10-14 負責人: 開發團隊