Files
wvp-platform/docs/intrusion_test_checklist.md

402 lines
9.2 KiB
Markdown
Raw Normal View History

# 周界入侵自动解除功能测试检查清单
**功能**: 周界入侵检测自动告警处理
**版本**: v2.0
**日期**: 2026-02-14
---
## Edge端验证清单
### 1. IntrusionAlgorithm状态机
- [x] **状态定义完整**
- [x] STATE_IDLE (空闲)
- [x] STATE_CONFIRMING_INTRUSION (入侵确认中)
- [x] STATE_ALARMED (已告警)
- [x] STATE_CONFIRMING_CLEAR (消失确认中)
- [x] **状态变量初始化**
- [x] self.state
- [x] self.state_start_time
- [x] self._last_alarm_id
- [x] self._intrusion_start_time
- [x] self.alert_cooldowns
### 2. 入侵确认逻辑
- [x] **IDLE → CONFIRMING_INTRUSION**
- [x] 检测到人时触发
- [x] 记录state_start_time
- [x] 日志记录
- [x] **CONFIRMING_INTRUSION → ALARMED**
- [x] 持续检测到人 ≥ confirm_seconds (默认5秒)
- [x] 生成intrusion告警事件
- [x] 记录_intrusion_start_time
- [x] 包含first_frame_time字段
- [x] 冷却期检查
- [x] 更新alert_cooldowns
- [x] 日志记录
- [x] **CONFIRMING_INTRUSION → IDLE**
- [x] 确认中途人消失
- [x] 冷却期内不触发
- [x] 日志记录
### 3. 入侵消失逻辑
- [x] **ALARMED → CONFIRMING_CLEAR**
- [x] 检测到无人时触发
- [x] 记录state_start_time
- [x] 日志记录
- [x] **CONFIRMING_CLEAR → IDLE**
- [x] 持续无人 ≥ confirm_seconds (默认5秒)
- [x] 生成alarm_resolve事件
- [x] 包含resolve_alarm_id
- [x] 包含duration_ms
- [x] 包含last_frame_time
- [x] resolve_type="intrusion_cleared"
- [x] 重置_last_alarm_id
- [x] 重置_intrusion_start_time
- [x] 重置state到IDLE
- [x] 日志记录
- [x] **CONFIRMING_CLEAR → ALARMED**
- [x] 消失确认中途人又出现
- [x] 不发送resolve事件
- [x] 日志记录
### 4. 告警ID回填机制
- [x] **set_last_alarm_id()方法**
- [x] 方法存在
- [x] 正确设置_last_alarm_id
- [x] **main.py集成**
- [x] intrusion告警生成后回填
- [x] hasattr安全检查
- [x] 回填逻辑正确
### 5. 冷却期管理
- [x] **冷却期配置**
- [x] cooldown_seconds参数 (默认300秒)
- [x] 基于camera_id + roi_id的复合键
- [x] **冷却期逻辑**
- [x] 检查alert_cooldowns字典
- [x] 冷却期内阻止重复告警
- [x] 冷却期外允许告警
- [x] 更新冷却时间
### 6. 日志记录
- [x] **状态转换日志**
- [x] IDLE → CONFIRMING_INTRUSION (debug)
- [x] CONFIRMING_INTRUSION → IDLE (debug)
- [x] CONFIRMING_INTRUSION → ALARMED (warning)
- [x] ALARMED → CONFIRMING_CLEAR (debug)
- [x] CONFIRMING_CLEAR → ALARMED (debug)
- [x] CONFIRMING_CLEAR → IDLE (debug)
- [x] **告警事件日志**
- [x] 告警触发 (warning)
- [x] 告警解决 (info)
### 7. 辅助方法
- [x] **get_state()方法**
- [x] 返回当前状态
- [x] 返回state_start_time
- [x] ALARMED状态返回total_intrusion_sec
- [x] ALARMED状态返回alarm_id
- [x] **reset()方法**
- [x] 重置state到IDLE
- [x] 清空state_start_time
- [x] 清空_last_alarm_id
- [x] 清空_intrusion_start_time
- [x] 清空alert_cooldowns
---
## Backend端验证清单
### 8. 算法描述
- [x] **基本信息**
- [x] algo_code: "intrusion"
- [x] algo_name: "周界入侵检测"
- [x] target_class: "person"
- [x] **描述文本**
- [x] 包含功能说明
- [x] 包含抽帧频率说明 (1帧/秒)
- [x] 包含自动解除说明
- [x] 说明confirm_seconds的作用
### 9. 参数Schema
- [x] **cooldown_seconds参数**
- [x] type: int
- [x] default: 300
- [x] min: 0
- [x] **confirm_seconds参数**
- [x] type: int
- [x] default: 5
- [x] min: 1
- [x] **Schema格式**
- [x] JSON格式有效
- [x] 可正确解析
---
## Frontend端验证清单
### 10. 参数标签
- [x] **cooldown_seconds**
- [x] 标签: "告警冷却期(秒)"
- [x] 清晰易懂
- [x] **confirm_seconds**
- [x] 标签: "确认时间(秒)"
- [x] 清晰易懂
### 11. 参数说明
- [x] **cooldown_seconds说明**
- [x] 说明文字: "触发告警后,多少秒内不再重复告警(用于周界入侵等算法)"
- [x] 准确描述用途
- [x] 适用范围说明
- [x] **confirm_seconds说明**
- [x] 说明文字: "持续检测到人达到该时间后触发告警,持续无人达到该时间后自动结束告警"
- [x] 涵盖入侵确认用途
- [x] 涵盖消失确认用途
- [x] 易于理解
### 12. UI组件
- [x] **InputNumber组件**
- [x] 正确绑定参数值
- [x] 支持min限制
- [x] 显示默认值提示
- [x] **参数说明显示**
- [x] 说明显示在输入框下方
- [x] 样式清晰 (灰色小字)
- [x] 行高适中 (1.5)
---
## 功能测试清单
### 13. 正常流程测试
- [ ] **入侵确认测试**
- [ ] 测试对象进入ROI
- [ ] 保持5秒
- [ ] 验证生成intrusion告警
- [ ] 验证告警包含first_frame_time
- [ ] 验证_last_alarm_id被回填
- [ ] 验证日志记录
- [ ] **消失确认测试**
- [ ] 测试对象离开ROI
- [ ] 保持5秒
- [ ] 验证生成alarm_resolve事件
- [ ] 验证resolve_alarm_id正确
- [ ] 验证duration_ms计算正确
- [ ] 验证状态重置到IDLE
- [ ] 验证日志记录
### 14. 边界条件测试
- [ ] **入侵确认中途消失**
- [ ] 入侵2秒后离开
- [ ] 验证状态回到IDLE
- [ ] 验证不触发告警
- [ ] **消失确认中途返回**
- [ ] 消失2秒后返回
- [ ] 验证状态回到ALARMED
- [ ] 验证不发送resolve事件
- [ ] **快速进出**
- [ ] 1秒进1秒出
- [ ] 验证不触发告警
- [ ] 验证状态正确
### 15. 冷却期测试
- [ ] **冷却期内重复入侵**
- [ ] 触发第一次告警
- [ ] 300秒内再次入侵
- [ ] 验证不生成新告警
- [ ] 验证日志记录"冷却期内"
- [ ] **冷却期外重复入侵**
- [ ] 触发第一次告警
- [ ] 等待300秒以上
- [ ] 再次入侵并保持5秒
- [ ] 验证生成新告警
### 16. 参数配置测试
- [ ] **confirm_seconds = 3**
- [ ] 持续3秒触发告警
- [ ] 持续3秒无人发送resolve
- [ ] **confirm_seconds = 10**
- [ ] 持续10秒触发告警
- [ ] 持续10秒无人发送resolve
- [ ] **cooldown_seconds = 60**
- [ ] 60秒冷却期生效
### 17. 多ROI测试
- [ ] **不同ROI独立告警**
- [ ] ROI_A入侵触发告警
- [ ] ROI_B入侵触发独立告警
- [ ] 验证告警独立追踪
- [ ] **不同ROI冷却期独立**
- [ ] ROI_A进入冷却期
- [ ] ROI_B仍可触发告警
---
## 集成测试清单
### 18. Backend集成测试
- [ ] **告警记录查询**
- [ ] 告警列表显示intrusion告警
- [ ] 告警详情正确
- [ ] 告警状态正确 (PENDING → RESOLVED)
- [ ] **告警解除记录**
- [ ] 查看resolve事件
- [ ] duration字段正确
- [ ] last_frame_time正确
### 19. Frontend集成测试
- [ ] **参数配置界面**
- [ ] 打开算法参数编辑器
- [ ] 查看intrusion参数
- [ ] 验证标签显示
- [ ] 验证说明显示
- [ ] **参数保存**
- [ ] 修改confirm_seconds
- [ ] 修改cooldown_seconds
- [ ] 保存配置
- [ ] 验证保存成功
- [ ] **配置推送**
- [ ] 推送配置到Edge
- [ ] 验证Edge接收配置
- [ ] 验证算法参数生效
---
## 性能测试清单
### 20. 性能验证
- [ ] **状态机开销**
- [ ] 每帧处理时间 < 5ms
- [ ] CPU占用正常
- [ ] 内存占用正常
- [ ] **冷却期字典大小**
- [ ] 多ROI情况下内存可控
- [ ] 字典查找性能良好
---
## 文档检查清单
### 21. 代码文档
- [x] **IntrusionAlgorithm类文档**
- [x] 状态机说明
- [x] 业务流程说明
- [x] 参数说明
- [x] **方法文档**
- [x] process()方法说明
- [x] set_last_alarm_id()方法说明
- [x] get_state()方法说明
- [x] reset()方法说明
### 22. 用户文档
- [ ] **算法使用说明**
- [ ] 功能介绍
- [ ] 参数配置说明
- [ ] 使用示例
- [ ] **告警处理说明**
- [ ] 告警流程说明
- [ ] 自动解除说明
- [ ] 注意事项
---
## 测试记录
### 测试执行记录
| 测试项 | 执行日期 | 执行人 | 结果 | 备注 |
|--------|----------|--------|------|------|
| Edge端代码审查 | 2026-02-14 | Claude | ✅ 通过 | 所有功能完整 |
| Backend端代码审查 | 2026-02-14 | Claude | ✅ 通过 | 描述和参数正确 |
| Frontend端代码审查 | 2026-02-14 | Claude | ✅ 通过 | UI显示正确 |
| 功能测试 | 待执行 | - | - | 需要实际环境 |
| 集成测试 | 待执行 | - | - | 需要实际环境 |
| 性能测试 | 待执行 | - | - | 需要实际环境 |
---
## 发现的问题
### 问题1: test_edge_run.py参数不匹配
- **严重程度**: 低
- **描述**: 测试文件使用了旧的参数名
- **影响**: 测试配置不符合实际算法参数
- **建议**: 更新测试配置使用cooldown_seconds和confirm_seconds
---
## 总结
### 代码审查结论
- ✅ Edge端实现完整状态机逻辑正确
- ✅ Backend端配置准确描述清晰
- ✅ Frontend端显示友好说明详细
- ✅ 代码质量良好,防御性编程充分
- ✅ 日志记录完整,便于调试
### 待完成项
- [ ] 实际环境功能测试
- [ ] 实际环境集成测试
- [ ] 性能测试
- [ ] 更新test_edge_run.py
- [ ] 完善用户文档
### 推荐状态
**代码审查**: ✅ 通过
**建议**: 可以进行实际环境测试