测试要求

2. 测试规范(Testing Requirements)

2.1 测试的核心理念

在本项目中,测试被视为工程核心资产,而不是开发完成后的附加步骤。

测试设计遵循以下原则:

  • 不追求“数字好看”的覆盖率
  • 真实用户使用路径为中心
  • 对不同模块设定不同强度的测试要求
  • 明确哪些错误是可以被容忍的,哪些是不可以的

2.2 核心训练链路的定义

以下内容被定义为核心训练链路(Core Training Pipeline)

  • 底层内存分配与管理
  • 数值计算过程
  • 计算任务的分发与调度
  • 自动微分(Autograd)
  • 优化器逻辑
  • 模型(Model)执行相关代码

这些部分共同构成了一条完整的训练流程,一旦出现不能正确处理的错误,整个训练过程即失去意义

因此,这些模块必须接受最严格的测试要求。


2.3 Tensor 维度覆盖策略(0D–3D)

基于对用户使用场景的分析,项目做出如下判断:

  • 用户极少在高维(>3D)Tensor 上进行复杂操作
  • 实际使用中最常见的是:
    • 0D(标量)
    • 1D(向量)
    • 2D(矩阵)
    • 3D(常见批量张量)

测试要求

  • 对于每一种可支持的操作类型
    • 即使某个逻辑分支已经被覆盖
    • 仍必须通过 0D–3D 的额外测试
  • 测试目标:
    • 消除内部实现不确定性
    • 确保在用户最常用维度范围内行为一致、正确

2.4 数据类型覆盖要求

core/include/definitions 中,项目明确列出了:

  • 所有支持的可操作数据类型

测试中要求:

  • 对每一种支持的数据类型
  • 在所有有效维度(0D–3D)下
  • 对应操作必须被明确测试并验证正确性

2.5 测试框架

项目统一使用以下测试工具:

  • Google Test(gtest)

主要用于:

  • 单元测试
  • 参数化测试
  • 维度 × 数据类型 组合测试
  • 回归测试

2.6 非核心模块的测试要求

对于非核心模块,例如:

  • 日志系统
  • 工具类
  • 辅助组件

不要求复杂的维度与数学验证,但仍需保证整体质量。

当前阶段要求:

  • 行覆盖率 ≥ 80%
  • 分支覆盖率 ≥ 35%
  • 在此基础上,覆盖率应尽可能继续提高

2.7 分阶段取舍策略

  • 一些可能在未来才显现的复杂问题:
    • 当前阶段暂不强制覆盖
  • 避免过度设计导致:
    • 开发成本失控
    • 测试负担过重

2.8 面向未来功能的测试规范

对于后续新增功能或插件:

  • 项目会为每一个功能单独制定测试要求
  • 开发者需:
    • 按要求编写足量测试