eis/eqpalg/eqpalg_refactoring_status.md

7.5 KiB
Raw Blame History

eqpalg 重构过程状态 — 2026-05-15

当前状态Phase 1-4 代码完成,编译通过,运行调测中


已完成Phases 1-4

Phase 1: ExpressionEngine 统一表达式引擎

  • 删除 ExpModule250 行)
  • 删除 is_exp_alg_ 补丁标志
  • 消除双 FunVars
  • 创建 ExpressionEngine347 行,eqpalg/utility/expression_engine.*
  • 统一变量刷新、表达式注册/求值、FunVars 管理、hold 变量

Phase 2: FbStateMachine 反馈状态机

  • 创建 FbStateMachine348 行,eqpalg/utility/fb_state_machine.*
  • 7 状态显式建模Idle → Started → InProgress → Done/NotHold/Timeout
  • 变量快照/累积/清零内置于状态机
  • 删除 act_start_done/not_hold/done/timeout 4 方法
  • 删除 act_started_/triggered_/fb_triggered_/fb_done_ 4 标志

Phase 3: ExpBase 解耦 + 算法子类化

  • BoundChecker 提取(eqpalg/utility/bound_checker.*90 行)
  • StatCollector 提取(eqpalg/utility/stat_collector.*206 行)
  • 4 个算法子类:
    • LogicAlgAlg 136 行)
    • BoundAlgAlg 285 行)
    • BoundHoldAlgAlg 576 行)
    • FeedbackAlgAlg 3/4132 行)
  • build_algorithm.cpp 工厂切换到子类
  • ExpBase 从 1956 行瘦身到 1105 行(-43%

Phase 4: 单元测试

  • 77 个测试用例3 个测试文件)
  • ExpressionEngine 测试14 用例)
  • FbStateMachine 测试11 用例)
  • 算法组件测试52 用例,含 BoundChecker/Roller3/FaultCode 工具函数)

当前问题:运行时段错误

已修复的编译问题12 个 commit

  • CMake 测试 target include 路径缺失
  • "" vs <> include 风格不符项目规范
  • enum class DetectModeostream<<
  • mix_cc::time_range_t 未声明
  • 5 个子类未实现纯虚 doMonProc()
  • bound_alg.cpp 访问私有 exps_
  • ExpBase 子类残留旧方法调用
  • roller2/roller3 残留 init_hold_exp_str/exp_messy_code_check

当前运行问题

  1. 段错误std::map::operator[] 中 string 键为 null 指针

    • 根因VarsCache::tag_num 未初始化垃圾值ensureVarCache 惰性检查不可靠
    • 修复:改用 tag_keys.size() 判断(最新 commit fe98fed
    • 状态:待验证
  2. 表达式变量缺失Unknown variable tag2 错误日志

    • 已通过 ExpressionEngine 构造函数预初始化 mm_vars 修复commit b53c061
    • 状态:待验证

待完成

短期(运行调测)

  • 验证段错误修复rebuild + GDB 测试)
  • 验证 Unknown variable 错误修复
  • 全量回归测试eqpalg-mon 正常运行,报警正常触发)

中期(代码质量)

  • 清理 remaining 蓝色 warningGlobDefine.h format、dsm/public.h return-type
  • exp_base.cpp:804 行 && 优先级加括号
  • glitch_detection.cpp:137 load_exp() 无 return 值

长期(可选)

  • VarManager 独立提取Phase 3a 子步骤)
  • 为 IHDB 依赖算法TrendSlope/Roller/GlitchDetection编写集成测试
  • TrendSlope2/3 的 hardcoded 60s 时间偏移评估

关键文件清单

新增文件

文件 行数 说明
eqpalg/utility/expression_engine.h 130 统一表达式引擎头文件
eqpalg/utility/expression_engine.cpp 240 统一表达式引擎实现
eqpalg/utility/fb_state_machine.h 122 反馈状态机头文件
eqpalg/utility/fb_state_machine.cpp 226 反馈状态机实现
eqpalg/utility/bound_checker.h 56 上下限检测器
eqpalg/utility/bound_checker.cpp 34 上下限检测器实现
eqpalg/utility/stat_collector.h 94 统计学习收集器
eqpalg/utility/stat_collector.cpp 112 统计学习收集器实现
eqpalg/algs/logic_alg.h/.cpp 36 Alg 1
eqpalg/algs/bound_alg.h/.cpp 85 Alg 2
eqpalg/algs/bound_hold_alg.h/.cpp 76 Alg 5
eqpalg/algs/feedback_alg.h/.cpp 132 Alg 3/4
eqpalg/test/test_harness.h 84 测试框架
eqpalg/test/test_main.cc 7 测试入口
eqpalg/test/test_expression_engine.cc 140 14 测试
eqpalg/test/test_fb_state_machine.cc 197 11 测试
eqpalg/test/test_algorithms.cc 915 52 测试
eqpalg/test/README.md 295 测试文档

删除文件

文件 说明
eqpalg/utility/ExpModule.h 被 ExpressionEngine 替代
eqpalg/utility/ExpModule.cc 被 ExpressionEngine 替代

设计文档

文件 说明
eqpalg/algs/ALGORITHMS_FUNCTIONAL_DESCRIPTION.md 14 个算法功能阐述
eqpalg/algs/EXPBASE_REFACTOR_PLAN.md ExpBase 解耦方案
eqpalg/algs/FBSTATE_DEEP_ANALYSIS.md FbStateMachine 7 状态分析
eqpalg/algs/UNIFIED_EXPRESSION_ENGINE.md 双 FunVars 消除方案
eqpalg/eqpalg_changes_2026-05-15.md 完整变更文档
docs/superpowers/plans/2026-05-15-expression-engine.md Phase 1 执行计划

全部 Commit35 个)

fe98fed fix: ensureVarCache 改用 tag_keys.size() 判断
f3b1543 fix: ensureVarCache 移到 expression_engine.h 内联
b53c061 fix: ExpressionEngine 构造函数预初始化 mm_vars
9758459 fix: 修正 bound_checker_setDetectMode_override 测试预期
d79d17a docs: 更新 eqpalg 重构变更文档
06ebc21 fix: roller2/roller3 init_hold_exp_str/exp_messy_code_check 改用 ExpressionEngine
367802f fix: roller3.cpp DetectMode enum class LOG 输出和 stoi 赋值 cast
ba0bf8c fix: 清理 ExpBase 子类残留旧方法调用
43c545e fix: 添加 hasExpression(),修复 bound_alg/exp_bound 编译错误
18a5675 fix: 子类实现 doMonProc() + 测试 CMake 添加缺失链接文件
62a2e55 fix: expression_engine.h 添加 <mix_cc/ihyper_db.h>
dc26b6a fix: enum class CHECK_EQ 改为 CHECK(==)
5a026ac build: 添加 -Wno-unused-parameter/variable/sign-compare/reorder
2754b7a docs: 添加 eqpalg 测试说明文档
4032ff9 fix: 测试文件 "" include 改为 <> 风格
3f10d4d fix: 为 eqpalg_test 添加缺失 include 路径
153ce64 docs: 添加 2026-05-15 eqpalg 重构变更文档
ca2147e test: 核心算法单元测试
032f0d0 refactor: 切换 build_algorithm 工厂到算法子类
ae7834a refactor: 算法子类化 — 消除 exp_type_ 分支
4f8eecd refactor: 提取 StatCollector 统计学习组件
b9cf5f4 refactor: 提取 BoundChecker 上下限检测组件
c4bcb66 refactor: 删除旧反馈状态方法和标志
0106e55 refactor: 集成 FbStateMachine 到 ExpBase::mon_proc()
fad4ee8 test: FbStateMachine 状态转换单元测试
9f66fc1 feat: FbStateMachine 状态转换 + 变量操作实现
f2f6d6f feat: 添加 FbStateMachine 头文件
e9b2c17 refactor: 删除 ExpModule 类
3f8d281 fix: 清理 ExpBase 子类残留引用
38d0942 refactor: 非 ExpBase 算法适配 ExpressionEngine API
7c2fe7f refactor: ExpBase 表达式管理迁移到 ExpressionEngine
96ca4d0 refactor: AlgBase 从 ExpModule 迁移到 ExpressionEngine
f10da49 test: ExpressionEngine 单元测试用例
693d3b5 feat: ExpressionEngine firstFill + printVars 实现
e575efd feat: ExpressionEngine FunVars 控制 + hold 变量管理
5017368 feat: ExpressionEngine 变量刷新实现
da9eb2e feat: ExpressionEngine 核心实现
2f7ca1e feat: 添加 ExpressionEngine 头文件声明
ec8e44c test: 为 eqpalg 添加测试基础设施

下次继续步骤

  1. git pull 拉取最新代码
  2. cd eqpalg/build && cmake .. && make -j4 编译
  3. bpm debug eqpalg -mon 运行并检查是否还崩溃
  4. 如崩溃,bt 查看 GDB 堆栈
  5. 验证 eqpalg-mon 正常运行,报警功能正常
  6. 清理蓝色 warning