專案

一般

配置概況

動作

Task #34

進行中

PID測試腳本-PID模組

是由 Eric Pan約 2 個月 前加入.

狀態:
需求確認
優先權:
Low
被分派者:
開始日期:
2025-09-08
完成日期:
完成百分比:

0%

預估工時:
OS版本:
Windows, Linux
網路環境:
內網
現場IP位置:

localhost

硬體設備規格:

DELLPrecision 5820 Tower intel(R)Xeon(R)w-2233 CPU,3.6GHz, RAM:128G Windows 11專業版工作站。x64位元


概述

PID 控制優化系統測試 TODO 清單

測試環境準備

  • 建立測試資料庫和 Redis 連線
  • 準備測試用戶(具 PID 優化權限)
  • 設定測試環境變數(LLM API Keys, 資料庫配置)
  • 初始化 pytest fixtures 和測試客戶端
  • 準備標準 CSV 測試資料集

一、基礎 API 端點測試 (POST /api/v1/pid/optimize)

✅ 認證與授權測試

  • PID-001: 使用有效 Token 成功訪問 PID 優化端點
  • PID-002: 無 Token 時訪問失敗(401)
  • PID-003: 無效 Token 時訪問失敗(401)
  • PID-004: 一般用戶權限訪問測試
  • PID-005: 工程師權限訪問測試
  • PID-006: 管理員權限訪問測試

二、請求資料驗證測試

📝 PID 參數驗證(PIDParamsRequest)

  • PID-007: 有效的基本 PID 參數請求成功
    {
    "sp": 50.0,
    "kp": 1.0,
    "ti": 100.0,
    "td": 0.0,
    "u_min": 0.0,
    "u_max": 100.0,
    "dt": 1.0,
    "pid_form": "time_constant"
    }
  • PID-008: sp (設定點) 驗證
    • sp > 0 成功
    • sp = 0 失敗(422)
    • sp < 0 失敗(422)
  • PID-009: kp (比例增益) 驗證
    • kp > 0 成功
    • kp = 0 失敗(422)
    • kp < 0 失敗(422)
  • PID-010: ti (積分時間) 驗證
    • ti > 0 成功
    • ti = 0 失敗(422)
    • ti < 0 失敗(422)
  • PID-011: td (微分時間) 驗證
    • td >= 0 成功
    • td < 0 失敗(422)
  • PID-012: 控制範圍驗證
    • u_max > u_min 成功
    • u_max = u_min 失敗(422)
    • u_max < u_min 失敗(422)
  • PID-013: 採樣時間驗證
    • dt > 0 成功
    • dt = 0 失敗(422)
    • dt < 0 失敗(422)

📝 物理限制參數驗證

  • PID-014: 有效物理限制設定
    {
    "u_phys_min": 10.0,
    "u_phys_max": 90.0
    }
  • PID-015: u_phys_max > u_phys_min 驗證
  • PID-016: 物理限制自動調整測試
    • u_min < u_phys_min 時自動調整
    • u_max > u_phys_max 時自動調整
    • 日誌記錄調整過程
  • PID-017: 物理限制範圍太窄的處理
    • u_phys_max - u_phys_min < 1.0 的情況

📝 PID 參數形式轉換測試

  • PID-018: time_constant 形式參數測試
  • PID-019: gain 形式參數測試
    {
    "kp": 1.0,
    "ti": 0.1, // 實際為 Ki
    "td": 0.0, // 實際為 Kd
    "pid_form": "gain"
    }
  • PID-020: gain 轉 time_constant 轉換驗證
  • PID-021: 轉換後參數邊界檢查

📊 歷史資料驗證(HistoryDataPoint)

  • PID-022: 最少資料量驗證(10 筆)
    • 9 筆資料失敗(422)
    • 10 筆資料成功
    • 50 筆資料成功
    • 200+ 筆資料成功
  • PID-023: 資料點格式驗證
    {
    "process_variable": 23.5,
    "control_variable": 67.8
    }
  • PID-024: control_variable 範圍驗證
    • CV 在 [0, 100] 範圍內成功
    • CV < 0 失敗(422)
    • CV > 100 失敗(422)
  • PID-025: 空值和異常值檢測
    • null 值處理
    • NaN 值處理
    • Infinity 值處理

三、步階控制策略測試

🔧 策略驗證

  • PID-026: "none" 策略測試
    • 無步長限制
    • 返回理論最佳解
    • 單層優化結果格式
  • PID-027: "conservative" 策略測試
    • 2% 步長限制
    • 漸進式調整
    • 雙層優化結果格式
  • PID-028: "balanced" 策略測試
    • 3% 步長限制
    • 平衡調整策略
  • PID-029: "aggressive" 策略測試
    • 5% 步長限制
    • 快速調整策略
  • PID-030: 無效策略名稱失敗
    • "invalid_strategy" → 422 錯誤

🔧 步長計算驗證

  • PID-031: PID 參數步長計算
    • kp_step = |kp| * step_ratio
    • ti_step = |ti| * step_ratio
    • td_step = |td| * step_ratio
  • PID-032: 零值參數步長處理
    • kp = 0 時使用最小步長 0.001
    • td = 0 時使用最小步長 0.001
  • PID-033: 步階約束應用
    • 目標值在步長範圍內直接使用
    • 超出範圍時按步長調整

四、優化模式測試

🤖 自動模式(auto)

  • PID-034: 自動選擇手動調諧
    • CV 變化 < 2% → 手動調諧
    • 靜態數據 → 手動調諧
  • PID-035: 自動選擇 FOPDT
    • 有明顯階躍響應 → FOPDT
    • 線性系統特徵 → FOPDT
  • PID-036: 自動選擇差分演化
    • CV 變化 > 5% → 差分演化
    • 複雜動態系統 → 差分演化

🔬 強制模式測試

  • PID-037: "manual" 模式強制手動調諧
  • PID-038: "fopdt" 模式強制 FOPDT 分析
  • PID-039: "differential_evolution" 模式強制 AI 優化
  • PID-040: 無效優化模式失敗(422)

五、響應格式驗證測試

📄 ManualTuningResponse 格式(無物理限制)

  • PID-041: 基本響應結構驗證
    {
    "success": true,
    "message": "智能參數調諧分析完成",
    "static_analysis": {...},
    "recommended_params": {...},
    "analysis_summary": "...",
    "analysis_warnings": [...],
    "analysis_predictions": "..."
    }
  • PID-042: StaticAnalysisData 完整性
    • steady_state_error
    • process_variable_stability
    • control_variable_utilization
    • data_quality
    • noise_level
    • trend_direction
    • improvement_potential
  • PID-043: recommended_params 不包含物理限制

📄 PIDOptimizationResponse 格式(有物理限制)

  • PID-044: 雙層優化結構驗證
    {
    "success": true,
    "message": "...",
    "raw_input_params": {...},
    "suggested_params": {...},
    "best_params": {...},
    "step_limited": true,
    "step_strategy": "conservative",
    "step_progress_ratio": 0.5,
    "prediction_data": {...}
    }
  • PID-045: raw_input_params 與用戶輸入一致
  • PID-046: best_params 不包含物理限制
  • PID-047: suggested_params 包含物理限制
  • PID-048: step_progress_ratio 在 [0, 1] 範圍

📊 預測數據驗證

  • PID-049: prediction_data 結構完整性
    {
    "historical": [...],
    "suggested_prediction": [...],
    "best_prediction": [...]
    }
  • PID-050: 預測曲線數據點數量一致
  • PID-051: 時間序列連續性驗證

六、AI 分析內容測試

🧠 分析摘要測試

  • PID-052: analysis_summary 非空且有意義
  • PID-053: 關鍵字替換驗證
    • "手動調諧" → "智能參數調諧"
    • "差分演化" → "AI演化式全域最佳化"
    • "FOPDT" → "模型參考式參數優化"

🧠 警告與建議測試

  • PID-054: analysis_warnings 根據數據品質生成
    • 低品質數據 → 警告訊息
    • 異常趨勢 → 警告訊息
    • 不穩定系統 → 警告訊息
  • PID-055: analysis_predictions 包含效果預測
    • 穩態誤差改善預測
    • 響應時間變化預測
    • 系統穩定性評估

七、數據品質分析測試

📊 品質等級驗證

  • PID-056: HIGH 品質數據處理
    • CV 變化 > 5%
    • 數據完整無異常
    • 明顯動態特徵
  • PID-057: MEDIUM 品質數據處理
    • CV 變化 2-5%
    • 輕微雜訊
    • 部分動態特徵
  • PID-058: LOW 品質數據處理
    • CV 變化 < 2%
    • 靜態或高雜訊數據
    • 觸發手動調諧模式

📊 異常檢測測試

  • PID-059: 數據噪音水平檢測
  • PID-060: 趨勢方向分析
    • "increasing" / "decreasing" / "stable"
  • PID-061: 改善潛力評估
    • 基於穩態誤差和變異性

八、錯誤處理測試

⚠️ 請求格式錯誤

  • PID-062: 缺少必填欄位
    • 缺少 pid_params → 422
    • 缺少 history_data → 422
  • PID-063: Content-Type 錯誤
    • non-JSON 請求 → 422
  • PID-064: 超大請求體處理
    10MB 歷史資料

⚠️ 業務邏輯錯誤

  • PID-065: PID 參數計算失敗
    • 數學運算錯誤處理
    • 收斂失敗處理
  • PID-066: AI 服務不可用
    • LLM API 錯誤處理
    • 降級到基本分析
  • PID-067: 內存不足處理
    • 大量數據處理限制

⚠️ 系統錯誤

  • PID-068: 數據庫連線失敗
    • 返回 500 錯誤
    • 不洩漏系統資訊
  • PID-069: Redis 快取錯誤
    • 優雅降級處理

九、效能與並發測試

⚡ 響應時間測試

  • PID-070: 手動調諧模式 < 2秒
  • PID-071: FOPDT 模式 < 5秒
  • PID-072: 差分演化模式 < 10秒

⚡ 並發測試

  • PID-073: 5 個用戶同時優化
  • PID-074: 相同用戶多次請求處理
  • PID-075: 內存使用監控

📊 大數據測試

  • PID-076: 1000 筆歷史數據處理
  • PID-077: 複雜參數組合優化
  • PID-078: 多種步階策略並行

十、整合流程測試

🔄 完整優化流程

  • PID-079: 登入 → 上傳數據 → 選擇策略 → 獲取結果
  • PID-080: 不同策略結果比較
  • PID-081: 多輪優化迭代測試

🔄 邊界情況組合

  • PID-082: 物理限制 + 步階策略組合
  • PID-083: 最小數據 + 最大物理限制
  • PID-084: 所有參數邊界值組合

測試數據準備

標準測試數據集

TEST_DATASETS = {
"static_data": [
{"process_variable": 50.0 + random.uniform(-0.5, 0.5),
"control_variable": 60.0 + random.uniform(-1.0, 1.0)}
for i in range(50)
],
"dynamic_data": [
{"process_variable": 50.0 + 10sin(i0.1),
"control_variable": 60.0 + 5cos(i0.1)}
for i in range(100)
],
"step_response": [
# 階躍響應數據
],
"noisy_data": [
# 高雜訊數據
]
}

PID 參數組合

TEST_PID_PARAMS = {
"typical": {"sp": 50, "kp": 1.0, "ti": 100, "td": 0, "u_min": 0, "u_max": 100},
"aggressive": {"sp": 45, "kp": 2.0, "ti": 50, "td": 10, "u_min": 0, "u_max": 100},
"conservative": {"sp": 55, "kp": 0.5, "ti": 200, "td": 0, "u_min": 10, "u_max": 90},
"with_physical": {"sp": 50, "kp": 1.0, "ti": 100, "td": 0, "u_min": 0, "u_max": 100, "u_phys_min": 5, "u_phys_max": 85}
}

測試執行計畫

執行順序

  1. 環境與認證(PID-001 ~ PID-006)
  2. 參數驗證(PID-007 ~ PID-025)
  3. 策略與模式(PID-026 ~ PID-040)
  4. 響應格式(PID-041 ~ PID-051)
  5. AI 分析(PID-052 ~ PID-055)
  6. 品質分析(PID-056 ~ PID-061)
  7. 錯誤處理(PID-062 ~ PID-069)
  8. 效能測試(PID-070 ~ PID-078)
  9. 整合測試(PID-079 ~ PID-084)

測試指標

  • 功能覆蓋率:100%
  • API 端點覆蓋率:100%
  • 代碼覆蓋率:> 85%
  • 所有錯誤場景測試通過
  • 效能基準全部達標

沒有任何資料可供顯示

動作

匯出至 Atom PDF