# 测试计划 ## 目录 1. [测试策略](#1-测试策略) 2. [测试环境](#2-测试环境) 3. [单元测试规范](#3-单元测试规范) 4. [性能基准](#4-性能基准) 5. [回归测试](#5-回归测试) 6. [测试数据管理](#6-测试数据管理) --- ## 1. 测试策略 ### 测试金字塔 ``` ┌───────┐ │ 端到端 │ 完整建模工作流测试 ├───────┤ │ 集成 │ 模块间交互测试 ├───────┤ │ 单元 │ 每个函数/类的独立测试(主力) └───────┘ ``` | 层次 | 范围 | 工具 | 覆盖目标 | |------|------|------|---------| | 单元测试 | 单个函数/类 | Google Test | ≥ 90% | | 集成测试 | 模块间交互 | Google Test | 关键路径 | | 端到端测试 | 完整工作流 | 自定义脚本 | 典型场景 | | 性能测试 | 单个算法 | Google Benchmark | 回归监控 | --- ## 2. 测试环境 | 环境 | 编译器 | 平台 | |------|--------|------| | CI linux-gcc | GCC 11 | Ubuntu 22.04 | | CI linux-clang | Clang 15 | Ubuntu 22.04 | | CI windows-msvc | MSVC 2022 | Windows Server 2022 | | CI macos-clang | Apple Clang 14 | macOS 13 | ### CI 流程 ``` Push / PR ├──► 编译(Debug + Release) ├──► 单元测试 ├──► 代码覆盖率(lcov → Codecov) ├──► 静态分析(clang-tidy) └──► 性能基准(Release 构建,与基线对比) ``` --- ## 3. 单元测试规范 ### 命名规则 ``` TEST(<模块名>Test, <函数名>_<场景描述>) ``` 示例:`TEST(MeshTest, Simplify_ReducesFaceCount)` ### AAA 结构 ```cpp TEST(PointTest, Distance_SamePoint_ReturnsZero) { // Arrange(准备) Point3D a(1, 2, 3), b(1, 2, 3); // Act(执行) double d = (a - b).norm(); // Assert(断言) EXPECT_DOUBLE_EQ(d, 0.0); } ``` ### 必测场景 1. **正常输入**(Happy Path) 2. **边界条件**(空集、单元素、极值) 3. **退化情况**(共线、共面、零面积) 4. **错误输入**(非法参数、无效状态) 5. **精度边界**(极小/极大坐标值) --- ## 4. 性能基准 | 算法 | 输入规模 | 性能目标 | |------|---------|---------| | Delaunay 2D | 10⁶ 点 | ≤ 10 秒 | | BVH 构建 | 10⁶ 三角面 | ≤ 5 秒 | | BVH 射线查询 | 10⁶ 三角面 | ≤ 0.1 毫秒/次 | | GJK 碰撞检测 | 凸体 | ≤ 30 次迭代 | | 布尔运算 2D | 10³ 顶点 | ≤ 0.1 秒 | | NURBS 求值 | — | ≤ 1 微秒/次 | --- ## 5. 回归测试 - **Golden File 测试**:将标准测试用例输出与参考文件比对 - **性能回归**:基准测试结果与历史对比,性能退化 > 10% 报警 --- ## 6. 测试数据管理 ``` data/ ├── meshes/ │ ├── primitives/ # 基本体(球、盒、柱) │ ├── stanford/ # Stanford 标准模型 │ │ ├── bunny.obj │ │ ├── dragon.obj │ │ └── armadillo.obj │ └── degenerate/ # 退化情况 │ ├── non_manifold.obj │ └── zero_area.obj └── curves/ ├── bezier_basic.json └── nurbs_circle.json ```