4. 测试用例设计方法与虚拟调试适配
传统软件测试中的等价类划分、边界值分析、状态迁移测试和场景法,在虚拟调试环境中依然有效,但它们的输入对象、观察窗口和判定依据发生了根本变化。传统测试面对的是函数、接口或界面,输入是离散参数,输出是返回值或页面状态;虚拟调试面对的是PLC程序、机器人控制器、驱动器和仿真模型构成的闭环系统,输入是信号时序,输出是设备动作、状态字和过程数据。因此,方法本身要保留,但用例的构造方式必须围绕信号和状态重新组织。
等价类与边界值:从参数区间转向信号时序区间
等价类划分在虚拟调试中不再只针对一个数值参数,而是针对一组相关信号的取值组合。例如某输送线工位,入口光电传感器 B1、到位传感器 B2、启动按钮 Start 和急停 EStop 共同决定工位是否允许进料。有效等价类可以定义为:EStop=1(未拍下)、B1 在 0→1 后 B2 在 200ms 内变为 1、Start=1。无效等价类则包括急停拍下、B2 超时未到、Start 在 B1 之前已为 1 等。这里的关键是:等价类不再是一个数值范围,而是一组带时间约束的信号组合。
边界值分析同样要迁移到时间维度和信号跳变沿。以 B2 到位检测为例,若程序设定 200ms 内必须检测到上升沿,则边界用例应覆盖 199ms、200ms、201ms 三个时刻,并额外覆盖“刚好在 200ms 时抖动一次”的情况。虚拟调试中,时间边界往往比数值边界更容易触发故障,因为仿真时钟和控制器扫描周期之间存在离散化误差。建议在用例中明确写出信号名、目标值、相对触发时刻和允许误差,例如:
用例 BV-04-01
信号: B2_Arrive
触发: B1 上升沿后 200ms
期望: 输送线保持运行, 状态字 M10.3=1
容差: ±1 个 PLC 扫描周期 (假设 10ms)
异常判定: 若 201ms 仍未置位, 程序应进入等待超时分支
状态迁移:以状态机为骨架组织用例
虚拟调试中的设备大多具有明确的状态机,例如“空闲—进料—定位—加工—出料—故障”。状态迁移测试的核心是覆盖所有合法迁移和关键非法迁移。合法迁移用例验证正常工况:从空闲态收到启动信号后进入进料态,到位后进入定位态,定位完成进入加工态。非法迁移用例则验证异常工况:在加工态直接触发急停,系统应进入故障态并切断输出;在故障态未复位时再次按启动,系统应保持故障态而不是重新运行。
构造状态迁移用例时,建议为每个迁移定义四元组:当前状态、触发事件、目标状态、可观察输出。例如:
| 当前状态 | 触发事件 | 目标状态 | 可观察输出 |
|---|---|---|---|
| 空闲 | Start 上升沿 | 进料 | 输送电机 Q0.0=1 |
| 进料 | B2 上升沿 | 定位 | 定位气缸 Q0.1=1 |
| 定位 | 定位到位 300ms | 加工 | 主轴 Q0.2=1, 状态字=3 |
| 加工 | EStop 下降沿 | 故障 | 所有输出=0, 故障字=0x01 |
| 故障 | Reset 上升沿且 EStop=1 | 空闲 | 故障字=0, 允许重新启动 |
这张表本身就是一组可执行的用例骨架。在虚拟调试中,每个迁移都可以通过仿真信号注入来触发,并通过 PLC 变量表或 HMI 状态字观察结果。需要注意的是,状态迁移用例必须考虑“同一事件在不同状态下产生不同结果”的情况,例如 Start 在空闲态是合法启动,在加工态则应被忽略或触发报警。
场景法:把正常与异常工况串成完整任务链
场景法适合覆盖跨工位、跨设备的连续过程。一个典型正常场景是:上料机器人抓取工件→输送线送入→视觉定位→加工完成→下料机器人取走。异常场景则包括:抓取失败、输送卡料、视觉超时、加工中急停、下料位满等。虚拟调试的优势在于,这些场景可以在不损坏真实设备的前提下反复运行,并且可以精确控制每个信号的时序。
设计场景用例时,建议按“主场景+扩展场景”组织。主场景只包含最顺利的路径,扩展场景则从主场景的某个步骤分叉,注入异常。例如主场景在第 3 步“视觉定位”处,扩展场景 A 注入“视觉结果超时 500ms”,期望系统进入等待重试;扩展场景 B 注入“视觉结果错误”,期望系统进入废料剔除分支。这样既能保证正常工况覆盖,又能系统性地覆盖异常工况。
虚拟调试适配的三个关键调整
第一,时间成为一等输入。传统用例只关心“输入什么值”,虚拟调试用例必须关心“在什么时刻输入、持续多久、与其它信号相差多少”。例如急停信号在加工开始后 50ms 注入和在加工完成后 50ms 注入,系统响应完全不同。建议在用例中统一使用相对时间轴,以某个基准信号(如 Start 上升沿)为 t=0,其余信号标注相对时刻。
第二,观察对象从返回值变为过程变量。虚拟调试中,用例的判定依据通常是 PLC 变量表中的状态字、HMI 上的报警文本、仿真模型中的位置和速度曲线。设计用例时,应提前指定“观察点”,例如 M10.3 表示输送运行、DB1.DBW2 表示当前状态机编号、Q0.2 表示主轴输出。没有明确观察点的用例,在虚拟调试中很难自动判定通过或失败。
第三,异常工况要主动注入而非等待发生。真实设备上异常往往难以复现,虚拟调试则可以通过信号强制、时序偏移、数值篡改等方式主动制造异常。例如将 B2 到位信号延迟到 250ms 再置位,或将视觉结果强制写为错误码,观察程序是否进入预期的异常处理分支。这种“主动注入”能力,是虚拟调试用例设计相比传统测试最大的优势。
用例设计检查要点
- 每个等价类是否对应一组明确的信号组合,而不是单个数值?
- 边界值是否覆盖了时间边界和信号抖动边界?
- 状态迁移表是否覆盖了所有合法迁移和至少一条非法迁移?
- 场景用例是否包含主场景和至少三个异常扩展场景?
- 每个用例是否指定了观察点和判定阈值?
- 异常注入方式是否明确,是否可重复执行?