Skip to content

测试策略 ​

分层总览 ​

层保证什么判据
单元测试组件行为正确断言
解析解对照仿真器没写错(机制正确性)仿真均值落入闭式解 CI
确定性快照同版本同平台可复现逐位一致
统计回归跨版本 / 重构不改分布均值 ± CI 相容
并行确定性线程数不影响结果逐位一致
性能 smoke算力预算不漂移时长阈值

解析解对照是最有力的一层:单元测试证明"每块零件符合规格",解析解证明"整机算出来的答案客观上是对的"。

单元测试 ​

覆盖:RNG 派生(键相同 → 值相同;键任一分量不同 → 值不同)、Clock / 事件队列(有序性)、公式求值(对照手算)、战斗结算、经济聚合、成长曲线、指标聚合器(对照朴素实现)。

解析解对照 ​

确认模拟器没有写错的最有力手段:构造存在闭式解的场景,比较仿真结果与数学期望。

例 1——期望伤害:命中概率 p、命中伤害恒为 a − d,则 N 场战斗总伤害的期望是 N·p·(a−d),方差闭式可算。仿真均值必须落入闭式值 ± 3σ。

例 2——期望收益:玩家每日固定打 k 场副本、掉落期望 g,则 30 天金币总收入的期望是 30·k·g。同理对照。

例 3——流失模型:恒定流失概率 p_c 下,D7 留存的期望是 (1−p_c)⁷(与仿真口径对齐后对照)。

要求:至少一条解析解测试进入 Phase 1 验收(路线图);新增系统时,凡存在闭式解的机制必须配对照测试。

确定性测试:快照 vs 统计回归 ​

两层不要混用

快照测试:同版本 + 同平台 + 同 seed → 结果逐位一致。实现为结果摘要(规范化 JSON)的哈希快照,CI 中比对;字节级偏差即回归。

统计回归:跨版本或重构后,浮点结果允许不同(优化器、依赖升级都可能改变浮点细节),改为比较指标均值 ± CI 是否相容。

场景用哪层
日常 CI(同平台)快照(逐位)
升级 Rust 版本 / 依赖 / 重构后快照更新 + 统计回归确认分布未漂移
native ↔ wasm 比对(同配置同 seed)统计回归(基础算术逐位一致,超越函数允许 ULP 级差异,见确定性随机数)
跨平台比对统计回归(浮点不承诺跨平台逐位)

并行确定性测试 ​

同一实验在 rayon 线程数 = 1 / 4 / 满核下运行,结果摘要必须逐位一致。这是并行确定性规则(有序容器、固定归约)的守卫测试。

Monte Carlo 统计测试 ​

涉及随机性的端到端性质用统计断言:多 seed 复跑后检验均值、方差、置信区间、分位数是否落在理论或历史基线范围内。不要求这类测试的浮点逐位一致。

性能守卫 ​

criterion 基准覆盖热点(公式求值、事件循环、指标聚合);10,000 玩家 × 30 天全流程时长纳入 CI 冒烟,超过预算(分钟级)即警告——防止架构级性能退化悄悄累积。

CI 集成 ​

GitHub Actions:每个 push 跑单元 + 快照 + 并行确定性 + 解析解对照,外加 cargo check --target wasm32-unknown-unknown 平台门禁(core 引入平台依赖立即失败,见仿真内核);统计回归与性能基准在依赖升级与发布前手动触发。

以 Apache-2.0 许可证发布