129 lines
3.2 KiB
Markdown
129 lines
3.2 KiB
Markdown
|
|
# 测试计划
|
|||
|
|
|
|||
|
|
## 目录
|
|||
|
|
|
|||
|
|
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
|
|||
|
|
```
|