Skip to content

测试驱动开发 (TDD) 策略与架构规范

核心理念

针对航天动力学与FCC(飞行控制计算机)仿真中“连续/离散”交织的特点,本项目的TDD不盲目追求代码覆盖率,而是聚焦于物理计算的准确性系统状态机的确定性

核心原则:真理源于公式与Legacy标定,解耦验证,分级集成。

测试目录与层级架构设计

本项目测试分为4个层级(L1~L4)以及1个参考数据区:

1. Test/Reference/ (基准与参考工作区)

  • 定位:由于计算公式存在大量默会知识,C++工程代码中的测试基准不应凭空产生。
  • Scripts/:存放用于模拟“手算”的辅助脚本(如 Python、Matlab)。这些脚本基于原始数学公式或 src/legacy/ 中的旧代码编写。
  • GoldenData/:由 Scripts 跑出的标准答案(如 CSV/JSON),作为后续 C++ GTest 的输入和断言标准。

2. Test/L1_Operators/ (算子与纯公式验证 - 单拍)

  • 定位:无状态副作用的“纯数学/物理”公式验证。
  • 判定标准:C++函数单次计算输出 EXPECT_NEAR 对齐 Reference 中的公式手算结果。
  • 范畴:坐标系转换(如 ECF <-> LLA <-> Body)、气动角(攻角、侧滑角)解算、真空推力插值、PID单拍输出。

3. Test/L2_OpenLoop/ (开环序列与状态累积 - 多拍解耦)

  • 定位:Dyn 与 FCC 处于解耦状态,给定固定输入时间序列,测试内部 State 的正确流转和累积。
  • 判定标准:运行一段时间后,程序的累积输出与理论期望一致。
  • 范畴:导航双子样动态补偿(输入写死的角速度序列,验证输出)、卡尔曼滤波时间/量测更新收敛性、纯积分器(RK4)给定导数的位移输出。

4. Test/L3_Integration/ (突变边界与状态机 - 耦合跳变)

  • 定位:运行模拟仿真,关注特定时间点或阈值到达时,系统的跳变和变步长逻辑
  • 判定标准:状态机标志位在正确的时间(第一拍/最后一拍)准确翻转,变步长机制正确回退。
  • 范畴:推力曲线启动段至额定段的制导开启逻辑屏蔽、特征量关机事件触发、级间分离触发。

5. Test/L4_Stages/ (飞行段闭环)

  • 定位:真实飞行段全系统闭环宏观验证。
  • 判定标准:加载真实 YAML 配置,跑完全段,落点与终端状态符合总体设计公差。

默会知识沉淀:ECF 与 发射惯性系 (LIC)

在本项目中,ECF (Earth-Centered Fixed) 的定义与标准 WGS84 ECEF 存在差异。旧版 legacy 代码中的 ECF 实际上是 "地心发射坐标系" (Earth-Centered, Launch-Aligned)

  • 原点:地心
  • Y轴:指向发射点当地铅垂线方向 (UP)
  • X/Z轴:位于发射点水平面内

这与标准的 ECEF(Y轴指向北极,X轴指向本初子午线)完全不同。在重构和测试转换矩阵(如 calculate_point_in_ecf)时,必须严格遵守旧版的默会定义,否则将会导致在不同坐标系下的向量被错误相加,从而算出完全错误的高度 (Altitude) 和航程角 (Range Angle)。