4. 测试用例设计原则:等价类划分、边界值分析、因果图法、正交实验法在 HAL 测试中的应用
在 Camera HAL 测试中,面对多厂商、多平台、多分辨率的组合爆炸问题,仅靠穷举测试是不现实的。本章将系统讲解四种核心测试用例设计方法,并结合 HAL 接口特性(如 configure_streams、process_capture_request、flush)给出具体应用案例。
4.1 等价类划分:从输入空间到有效/无效分区
等价类划分的核心思想是将输入数据划分为若干互不相交的等价类,每个等价类中的任意一个代表值对测试结果的影响是等价的。在 HAL 测试中,最常见的应用是对 Stream 配置参数进行分区。
关键原则:每个等价类至少选取一个代表值;有效等价类验证功能正确性,无效等价类验证异常处理能力。
4.1.1 HAL 参数等价类示例:Stream 分辨率
| 参数 | 有效等价类 | 无效等价类 |
|---|---|---|
| width | 合法分辨率(如 640、1280、1920、3840) | 0、负数、超过 sensor 最大输出(如 8192) |
| format | HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED、YUV420、RAW10 | 未定义格式、0xFF、HAL_PIXEL_FORMAT_RAW_OPAQUE(若 sensor 不支持) |
| usage | GRALLOC_USAGE_HW_CAMERA_WRITE、GRALLOC_USAGE_HW_TEXTURE | GRALLOC_USAGE_HW_VIDEO_ENCODER(若未声明) |
// 等价类划分测试用例示例(伪代码)
TEST(HAL_ConfigureStreams, ValidResolution_640x480) {
Stream stream = {.width = 640, .height = 480, .format = YUV420};
EXPECT_EQ(OK, hal->configure_streams({stream}));
}
TEST(HAL_ConfigureStreams, InvalidResolution_Zero) {
Stream stream = {.width = 0, .height = 480, .format = YUV420};
EXPECT_EQ(BAD_VALUE, hal->configure_streams({stream}));
}
4.2 边界值分析:聚焦临界点与溢出点
边界值分析是等价类划分的补充,专门针对等价类边界上的值进行测试。HAL 接口中大量参数存在严格的上下界,例如 sensor 帧率范围、AE 补偿步长、3A 收敛时间等。
HAL 测试经验: 80% 的配置失败发生在边界附近,尤其是
max_buffers 和 stream_count 的边界。
4.2.1 边界值选取规则(7 点法)
- 最小值:如
fps_range.min = 1 - 略大于最小值:如
fps_range.min + 1 = 2 - 正常值:如
fps_range = [15, 30]中的 15 - 略小于最大值:如
fps_range.max - 1 = 29 - 最大值:如
fps_range.max = 30 - 超出最小值:如
fps_range.min - 1 = 0(无效) - 超出最大值:如
fps_range.max + 1 = 31(无效)
4.3 因果图法:多条件组合与 HAL 状态机
因果图法适用于 输入条件之间存在逻辑依赖 的场景。Camera HAL 中典型的因果逻辑包括:AE 锁定 与 AE 模式 的互斥关系、Stream 配置 与 Session 参数 的依赖关系。
4.3.1 HAL 因果图示例:AE 锁定与 AE 模式
| 原因(输入) | 结果(输出) |
|---|---|
| C1: AE 锁定 = true | E1: AE 模式必须为 CONTROL_AE_MODE_ON |
| C2: AE 模式 = CONTROL_AE_MODE_OFF | E2: AE 锁定必须为 false |
| C3: AE 锁定 = true 且 AE 模式 = OFF | E3: 返回 BAD_VALUE(无效组合) |
// 因果图对应的测试用例
TEST(HAL_3A, AELock_With_AEModeOFF_ReturnsError) {
CameraMetadata settings;
settings.set(CONTROL_AE_LOCK, true);
settings.set(CONTROL_AE_MODE, CONTROL_AE_MODE_OFF);
auto result = hal->process_capture_request(settings);
EXPECT_EQ(BAD_VALUE, result);
}
4.4 正交实验法:多 Camera 兼容性测试的降维利器
当测试涉及多个因子(如 Camera ID、Stream 数量、Format 类型、FPS 范围)时,全组合测试的用例数会呈指数级增长。正交实验法通过正交表选取具有代表性的组合,用最少的用例覆盖最大的组合空间。
注意:正交实验法适用于因子之间无强交互作用的场景。若因子间存在因果依赖,应优先使用因果图法。
4.4.1 正交表设计示例:L9(3^4)
假设有 4 个因子,每个因子有 3 个水平:
| 因子 | 水平 1 | 水平 2 | 水平 3 |
|---|---|---|---|
| A: Camera ID | Rear (0) | Front (1) | Depth (2) |
| B: Stream 数量 | 1 | 2 | 3 |
| C: 主 Format | YUV420 | RAW10 | IMPLEMENTATION_DEFINED |
| D: FPS 目标 | 15 | 30 | 60 |
使用 L9(3^4) 正交表,只需 9 个测试用例即可覆盖所有两两组合:
| 用例 | A | B | C | D |
|---|---|---|---|---|
| 1 | Rear | 1 | YUV420 | 15 |
| 2 | Rear | 2 | RAW10 | 30 |
| 3 | Rear | 3 | IMP_DEF | 60 |
| 4 | Front | 1 | RAW10 | 60 |
| 5 | Front | 2 | IMP_DEF | 15 |
| 6 | Front | 3 | YUV420 | 30 |
| 7 | Depth | 1 | IMP_DEF | 30 |
| 8 | Depth | 2 | YUV420 | 60 |
| 9 | Depth | 3 | RAW10 | 15 |
4.5 四种方法在 HAL 测试中的综合应用策略
| 方法 | 适用场景 | HAL 典型应用 | 用例数量 |
|---|---|---|---|
| 等价类划分 | 单参数取值范围大 | 分辨率、Format、Usage 标志位 | O(n) |
| 边界值分析 | 参数有明确上下界 | FPS 范围、Buffer 数量、AE 补偿 | O(2n) |
| 因果图法 | 多条件逻辑依赖 | 3A 模式互斥、Stream 配置约束 | O(2^k) |
| 正交实验法 | 多因子组合爆炸 | 多 Camera 兼容性、多 Stream 配置 | O(n^2) |
推荐策略:先使用等价类划分和边界值分析覆盖单参数边界,再用因果图法处理逻辑依赖,最后用正交实验法处理多 Camera 组合场景。三种方法互补,可显著提升 HAL 测试的缺陷检出率。