测试驱动开发 (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)。