4. HIL测试用例设计方法
在HIL(硬件在环)回归测试中,用例设计方法的选择直接决定了回归集的“性价比”:既要覆盖足够多的失效模式,又要把每次回归的执行时间控制在可接受范围内。等价类、边界值、状态迁移和场景法这四种经典方法,在纯软件测试中已有成熟用法,但搬到HIL环境后,它们的输入对象、可观测输出和复用方式都会发生变化。本节围绕“怎么适配、怎么复用”展开,而不是重复四种方法的定义。
一、HIL环境下四种方法的适配要点
等价类划分在HIL中的核心变化是:划分依据不再只是输入信号的取值范围,还要叠加“被控对象所处的物理工况”。例如一个车速信号,纯软件层面可以按0~250 km/h划分有效类、超范围类;但在HIL中,同样的车速值在“挡位为D、制动未踩”和“挡位为P、制动踩下”两种工况下,触发的控制器逻辑完全不同。因此HIL等价类应写成“信号区间 × 工况条件”的组合,每个等价类对应一条或一组回归用例,而不是一个孤立输入值。
边界值分析在HIL中要额外关注三类边界:信号量程边界(如0 V、5 V对应的物理量上下限)、控制器内部阈值边界(如故障判定门限、使能门限)、以及时间边界(如去抖时间、超时时间)。前两类是“值边界”,第三类是“时间边界”,在HIL中往往比值边界更容易暴露问题。例如某故障确认去抖时间为200 ms,回归用例就应包含199 ms(不确认)、200 ms(临界确认)、201 ms(确认)三个点,并配合故障注入通道精确控制持续时间。
状态迁移在HIL中天然适配,因为HIL可以真实驱动状态机的输入条件并观测状态输出。适配的关键是:把状态迁移图中的每条迁移边,映射为一条“前置状态建立→触发事件施加→目标状态确认”的回归用例,并明确每个状态的观测点(如状态变量、输出引脚电平、总线报文)。对于带历史状态或嵌套状态的控制器,还要补充“从不同历史路径进入同一状态”的用例,避免只测单一路径。
场景法在HIL中用于覆盖跨多个ECU、跨多个状态的连续操作序列,例如“上电→自检→挂挡→起步→加速→触发故障→降级→停车”。场景法的适配要点是把长场景拆成可独立回归的“场景片段”,每个片段有明确的起始状态、操作序列和结束判据,这样单个片段失败时不会导致整条长场景无法定位。
二、复用策略:让回归集“可维护、可裁剪、可定位”
HIL台架资源有限,回归集不能无限膨胀。四种方法产出的用例要按“复用单元”组织,而不是按方法各自成册。推荐的复用单元是参数化用例模板:把信号值、工况条件、故障注入参数、期望判据抽成参数,同一模板通过不同参数实例化出多条回归用例。例如“故障确认去抖”模板,参数为注入持续时间、期望确认状态、观测通道,实例化出199 ms/200 ms/201 ms三条用例,后续新增其他故障时只需换参数,不必重写用例逻辑。
状态迁移用例的复用重点是前置状态建立脚本。把“进入Run状态”封装成可调用的前置片段,等价类、边界值、场景法用例都可以复用它来建立初始条件,避免每条用例都从上电开始跑,显著压缩回归时间。场景法则按“片段库”复用:起步片段、加速片段、故障降级片段、停车片段各自独立,新场景通过片段拼接生成,片段内部判据不变。
三、一个可执行的回归用例示例
以“电机控制器过温降功率”为例,说明四种方法如何协同产出一组回归用例。假设温度信号量程为-40~150 ℃,降功率门限为120 ℃,故障确认去抖为500 ms,状态机包含Init、Run、Derate、Fault四个状态。
| 用例编号 | 设计方法 | 关键参数 | 期望判据 |
|---|---|---|---|
| TC-EQ-01 | 等价类 | 温度=80 ℃,Run状态 | 输出功率=额定值 |
| TC-EQ-02 | 等价类 | 温度=130 ℃,Run状态 | 输出功率=降额值 |
| TC-BV-01 | 边界值 | 温度=119.9 ℃ | 不进入Derate |
| TC-BV-02 | 边界值 | 温度=120.0 ℃ | 进入Derate |
| TC-BV-03 | 边界值 | 温度=120.1 ℃ | 进入Derate |
| TC-BV-04 | 边界值 | 过温持续499 ms | 不确认故障 |
| TC-BV-05 | 边界值 | 过温持续500 ms | 确认故障 |
| TC-ST-01 | 状态迁移 | Run→Derate,温度≥120 ℃ | 状态变量=Derate |
| TC-ST-02 | 状态迁移 | Derate→Run,温度≤115 ℃ | 状态变量=Run |
| TC-ST-03 | 状态迁移 | Derate→Fault,故障确认 | 状态变量=Fault |
| TC-SC-01 | 场景法 | 上电→自检→Run→升温→Derate→降温→Run | 各片段判据依次通过 |
这组用例中,TC-BV-04和TC-BV-05共用同一个“过温注入”模板,只改持续时间参数;TC-ST-01至TC-ST-03共用“进入Run状态”前置脚本;TC-SC-01由已有片段拼接而成,不新增底层激励逻辑。这样一组用例既能覆盖值边界、时间边界、状态迁移和跨状态场景,又不会让回归集规模失控。
四、回归集裁剪与优先级
当回归窗口不足以跑完全部用例时,按以下顺序裁剪:先保留所有边界值用例(尤其是时间边界),因为这类用例最接近真实失效;再保留状态迁移中“进入故障态”和“故障恢复”的迁移边;等价类用例每个等价类保留一条代表用例即可;场景法用例优先保留覆盖多ECU交互的片段。裁剪后仍要保证每个状态至少有一条进入和一条离开的用例,避免状态覆盖出现空洞。
最后需要强调:四种方法在HIL回归中不是并列关系,而是互补关系。等价类和边界值解决“输入空间怎么取”,状态迁移解决“控制器内部状态怎么走”,场景法解决“跨状态、跨ECU的操作序列怎么串”。实际设计时先用状态迁移搭出状态骨架,再用等价类和边界值填充每个状态下的输入取值,最后用场景法把关键状态串成端到端片段,这样产出的回归集既有结构又有细节,也便于后续复用和裁剪。