第四章 测试用例设计方法论:等价类划分、边界值分析、因果图法、场景法在VCU测试中的应用

说实话,很多刚入行的测试工程师问我:VCU测试用例到底怎么设计才靠谱?

我的回答很简单——别一上来就想着全覆盖,那不现实。你得先掌握几把趁手的「兵器」。今天我就把这四样东西掰开了讲:等价类划分、边界值分析、因果图法、场景法。它们不是理论玩具,是真正能帮你发现VCU深层bug的利器。

4.1 等价类划分——别做重复劳动

等价类划分,说白了就是把输入数据分成几个「类」。同一类里的数据,测一个就够了。

我举个例子。VCU有个功能:车速信号输入范围是0~250 km/h。你想想看,0、50、100、200、250,这些值测一遍有意义吗?其实没太大区别。真正要关心的是三类:有效区间内的值、低于下限的值、高于上限的值。

核心思路: 每个等价类中选一个代表值测试,其他值可以信任。

我在项目中遇到过一个问题:某款VCU的油门踏板开度信号,设计范围是0%~100%。测试团队写了30多个用例,从0%、5%、10%一直测到100%。结果呢?漏掉了负值输入和大于100%的输入。后来我让他们改成等价类划分——只测了5个值:-1%(无效)、0%(边界)、50%(有效)、100%(边界)、110%(无效)。bug反而抓出来两个。

我的习惯: 先列出所有输入条件,再划分等价类。有效类1个,无效类至少1个。别偷懒,无效类往往藏着大坑。

4.2 边界值分析——bug最喜欢待的地方

等价类划分的兄弟,就是边界值分析。为什么?因为程序员的判断逻辑,99%的bug都出在边界上。

你想想看,VCU里到处都是阈值判断:电池SOC低于20%报警、车速超过120 km/h限制动力、电机温度高于85°C降功率……这些边界值,就是bug的温床。

我记得有一次,某款VCU的再生制动功能,设定在车速低于5 km/h时退出。测试用例只测了4 km/h和6 km/h。结果呢?实车路试时,司机在5 km/h时踩刹车,再生制动突然退出,制动力瞬间变化,差点出事。后来一查,代码里写的是 if(speed < 5),应该用 <= 才对。

避坑指南: 边界值分析要测「边界本身」和「边界两侧」的值。比如范围是[0, 100],那就测-1、0、1、99、100、101。我曾经因为只测了0和100,漏掉了-1和101,结果被客户投诉了整整一周。
输入范围 等价类 边界值
车速 0~250 km/h 有效、低于下限、高于上限 -1, 0, 1, 249, 250, 251
电池SOC 0%~100% 有效、低于下限、高于上限 -1, 0, 1, 99, 100, 101
电机温度 -40~150°C 有效、低于下限、高于上限 -41, -40, -39, 149, 150, 151

4.3 因果图法——理清逻辑关系

因果图法,说白了就是画一张图,把「原因」和「结果」之间的关系理清楚。VCU里到处都是这种逻辑:如果A且B,则C;如果A或B,则D;如果非A,则E……

我刚开始做HIL测试时,最怕的就是这种组合逻辑。手动写用例,写100个都未必覆盖全。后来学了因果图法,才明白——先画图,再转判定表,最后生成用例。效率翻倍。

举个例子。VCU的「蠕行功能」逻辑:

  • 原因:档位在D或R(C1)、车速低于5 km/h(C2)、刹车未踩下(C3)、油门未踩下(C4)
  • 结果:输出蠕行扭矩(E1)
  • 逻辑关系:C1 且 C2 且 C3 且 C4 → E1

你看,四个原因,每个有「成立」和「不成立」两种状态,理论上2^4=16种组合。但用因果图法,你可以先排除互斥组合(比如档位同时在D和R),再合并等价组合,最后可能只需要6~8个用例。

我的经验: 因果图法最适合「多条件组合判断」的场景。比如VCU的故障诊断逻辑、模式切换逻辑、扭矩分配逻辑。别用在简单的一对一关系上,那是杀鸡用牛刀。

4.4 场景法——模拟真实驾驶

前面三种方法,都是「从输入出发」。场景法不一样,它是「从用户行为出发」。

你想想看,司机开车时不会想「我现在输入一个车速信号,再输入一个油门信号」。他只会做一件事:踩油门、踩刹车、打转向灯、挂挡……这些连续的操作,就是场景。

场景法的核心是:识别「基本流」和「备选流」。

  • 基本流: 正常驾驶流程。比如:上电→挂D挡→踩油门→加速→松油门→滑行→踩刹车→停车→挂P挡→下电。
  • 备选流: 异常或特殊流程。比如:上电后直接挂R挡、行驶中误挂P挡、高速时突然踩死刹车、电池SOC过低时强制加速……

我记得有一次,测试团队用场景法设计了一个「连续坡道起步」的用例:车辆停在30%坡道上,司机反复松刹车、踩油门、溜坡、再起步。结果发现VCU的坡道辅助功能在第三次起步时失效了,车辆后溜了半米。这个bug,用等价类划分和边界值分析根本发现不了。

场景法的最佳实践: 每个场景至少包含3~5个连续操作。别只测「点」,要测「线」。VCU的很多bug,都是在状态切换的瞬间暴露的。

4.5 四种方法如何搭配使用?

你可能会问:这四种方法,到底怎么选?

我的建议是:别单选,要组合。

  1. 先用场景法:梳理出VCU的核心功能场景,比如起步、加速、减速、停车、充电、故障处理。
  2. 再用因果图法:针对每个场景中的逻辑判断,画出因果关系,生成判定表。
  3. 然后用等价类划分:对每个输入条件,划分有效类和无效类,减少重复测试。
  4. 最后用边界值分析:对每个数值型输入,补充边界值测试用例。

举个例子。测试「能量回收功能」:

  • 场景法:模拟下坡、减速、跟车、红灯停车等场景
  • 因果图法:分析「车速>10 km/h 且 刹车踩下 且 SOC<95%」→ 启动回收
  • 等价类划分:车速分3类(<10、10~120、>120),SOC分3类(<95%、95%~100%、>100%)
  • 边界值分析:车速测9、10、11 km/h,SOC测94%、95%、96%
注意: 别为了用方法而用方法。如果某个功能逻辑很简单,直接用等价类+边界值就够了。因果图和场景法,用在复杂逻辑和连续操作上。我见过有人给「雨刮器控制」画因果图,画了3页纸,最后发现一个if-else就搞定了——纯属浪费时间。

4.6 实战案例:VCU扭矩仲裁测试

最后,我拿一个真实案例收尾。VCU的扭矩仲裁功能,是整车控制的核心。它要综合驾驶员需求、能量回收需求、限功率需求、故障保护需求,最终输出一个扭矩值。

用场景法,我设计了5个场景:

  • 场景1:正常加速(驾驶员扭矩最大)
  • 场景2:能量回收介入(回收扭矩优先)
  • 场景3:电池过热限功率(限功率扭矩覆盖)
  • 场景4:故障保护(输出0扭矩)
  • 场景5:多需求冲突(驾驶员踩油门同时触发回收)

用因果图法,我画出了仲裁逻辑的判定表,共12个条件组合。用等价类划分,我把每个扭矩输入分成3类。用边界值分析,我补充了0 Nm、最大扭矩、最小扭矩附近的测试点。

最终,我用了42个用例,覆盖了全部仲裁逻辑。实车测试时,只发现了1个微小的标定参数问题。嗯,这就是方法论的力量。

最后说一句: 测试用例设计不是写作文,是搭积木。四种方法就是四块积木,怎么搭、搭多少,取决于你的功能复杂度和测试目标。别贪多,也别偷懒。找到平衡点,才是高手。