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(无效)
边界值分析:FPS 范围 [1, 30] 0 1(min) 2 15(正常) 29 30(max) 31 红色标记为边界测试点(min、max、min-1、max+1)

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(无效组合)
因果图:AE 锁定与 AE 模式约束 C1: AE 锁定 = true C2: AE 模式 = OFF C3: C1 ∧ C2 E1: AE 模式 = ON E2: AE 锁定 = false 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
1Rear1YUV42015
2Rear2RAW1030
3Rear3IMP_DEF60
4Front1RAW1060
5Front2IMP_DEF15
6Front3YUV42030
7Depth1IMP_DEF30
8Depth2YUV42060
9Depth3RAW1015
正交实验法:L9(3^4) 组合覆盖示意 Camera ID Stream 数 Format FPS Rear 1 YUV420 15 Rear 2 RAW10 30 Rear 3 IMP_DEF 60 … 9 个用例即可覆盖所有两两组合,全组合需 3^4 = 81 个用例

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 测试的缺陷检出率。