4、边界条件设计原则:等价类划分、边界值分析、因果图法、正交实验法

做HIL测试这么多年,我越来越觉得——边界条件设计,才是测试用例设计的灵魂

你想想看,系统在正常工况下跑得好好的,一到了极限状态就崩了。这种事儿我见过太多次了。说白了,边界条件就是系统的「软肋」。今天我就把这四种最经典的方法掰开揉碎了讲给你听。

4.1 等价类划分:别做无用功

等价类划分,核心思想就一句话:把输入域分成若干「等价」的区间,每个区间只测一个值就够了

为什么?因为同一个区间里的值,系统处理逻辑是一样的。你测了10个、20个,结果都一样,纯属浪费时间。

核心原则:

  • 有效等价类:符合需求、系统能正常处理的输入
  • 无效等价类:不符合需求、系统应拒绝或报错的输入

举个例子。一个车速信号,范围是0~200 km/h。

输入范围 等价类 测试值示例
0 ~ 200 有效等价类 100
< 0 无效等价类 -10
> 200 无效等价类 250

我在项目中遇到过有人把0到200之间每个整数值都测了一遍,测了整整两天。我问他为什么,他说「怕漏掉」。其实没必要,等价类划分就是帮你省这个力的。

我的习惯:每个等价类至少选一个代表值。无效等价类尤其不能漏,很多bug就藏在「不该出现」的输入里。

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

等价类划分解决了「测哪个区间」的问题,但还不够。经验告诉我,bug最喜欢待在边界上

边界值分析,就是专门抓这些边界上的bug的。它的逻辑很简单:取每个等价类的边界值,以及边界两侧紧邻的值

还是那个车速信号,0~200 km/h。边界值分析要测哪些?

  • 最小值:0
  • 略小于最小值:-1(无效)
  • 略大于最小值:1
  • 最大值:200
  • 略小于最大值:199
  • 略大于最大值:201(无效)

你看,一共才6个值,比全量测试少太多了,但覆盖率极高。

注意:边界值分析不能替代等价类划分。两者是互补关系。先划分等价类,再在边界上做文章,这才是标准做法。

我曾经在一个项目中,发现ECU在车速刚好199 km/h时,会误触发一个限速报警。开发查了半天,发现是边界判断条件写成了「>= 200」而不是「> 200」。这种bug,你不测边界根本发现不了。

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

前面两种方法,处理的是单个输入。但实际系统中,多个输入之间往往有复杂的逻辑关系。这时候就需要因果图法了。

因果图法的核心是:找出「因」(输入条件)和「果」(输出结果)之间的逻辑关系,然后生成测试用例

常见的逻辑关系有:

  • 与(AND):所有条件都满足,结果才成立
  • 或(OR):任一条件满足,结果就成立
  • 非(NOT):条件不满足时,结果才成立
  • 异或(XOR):只有一个条件满足时,结果成立

举个例子。一个电池管理系统,当「电池温度过高」「持续超过5秒」时,触发过温保护。这就是一个典型的AND关系。

用因果图法,你会得到这样的测试组合:

温度过高 持续超过5秒 预期结果
触发保护
不触发
不触发
不触发

你看,4个组合就把所有逻辑路径覆盖了。如果不用因果图法,你可能会凭直觉乱测一通,漏掉关键组合。

我的建议:因果图法特别适合有复杂逻辑判断的系统,比如安全策略、故障诊断、模式切换。画一张因果图,比写100行测试用例更管用。

4.4 正交实验法:用最少的组合覆盖最多的场景

当输入条件很多时,全组合测试的用例数量会爆炸。比如有5个输入,每个有3种取值,全组合就是3^5=243种。太多了,测不完。

正交实验法就是来解决这个问题的。它用一套数学方法,选出「最有代表性」的组合,用最少的用例覆盖最多的场景

正交实验法的核心工具是正交表。比如L9(3^4)表示:最多4个因素,每个因素3个水平,只需要9个测试用例。

举个例子。一个空调控制系统,有4个因素:

  • 温度设定:16°C、22°C、30°C
  • 风速:低、中、高
  • 模式:制冷、制热、送风
  • 扫风:开、关

全组合是3×3×3×2=54种。用正交表,可能只需要9~18种。

正交实验法的步骤:

  1. 确定因素(输入条件)和水平(每个条件的取值)
  2. 选择合适的正交表
  3. 将因素和水平映射到正交表上
  4. 生成测试用例

我记得有一次做VCU的HIL测试,输入条件有7个,每个有2~4种取值。全组合算下来上千种,根本不可能。后来我用正交实验法,只用了32个用例就覆盖了所有关键组合。老板看了直呼内行。

注意:正交实验法不能保证覆盖所有组合,但能保证覆盖所有「两两组合」。对于大多数系统来说,两两组合已经足够发现绝大部分bug了。

4.5 四种方法的对比与选择

说了这么多,你可能会问:到底什么时候用哪种?

我个人的经验是这样的:

方法 适用场景 优点 缺点
等价类划分 单个输入,取值范围明确 简单、高效 无法处理多输入逻辑
边界值分析 有明确边界的输入 发现边界bug能力强 需要配合等价类使用
因果图法 多输入有逻辑关系 逻辑覆盖全面 画图费时,条件多时复杂
正交实验法 多输入、多水平,组合爆炸 用例少、覆盖广 无法保证全组合覆盖

实际项目中,我通常是混合使用的。先等价类划分和边界值分析搞定单个输入,再用因果图法梳理逻辑关系,最后用正交实验法压缩用例数量。一套组合拳下来,测试质量杠杠的。

避坑指南:我曾经在一个项目中只用了等价类划分,没做边界值分析,结果漏了一个边界bug,导致ECU在低温环境下频繁误报警。从那以后,我再也不敢偷懒了。边界值分析,必须做。

4.6 知识体系总览

下面这张图,是我自己整理的边界条件设计方法的知识体系。你可以把它当作一个快速参考。

边界条件设计方法知识体系 边界条件设计 等价类划分 边界值分析 因果图法 正交实验法 有效等价类 / 无效等价类 每个区间只测一个代表值 最小值 / 最大值 / 邻值 边界两侧各取一个值 AND / OR / NOT / XOR 逻辑关系 → 测试组合 正交表 L9(3^4) 最少用例覆盖最多场景 核心原则:先划分、再边界、后逻辑、最后压缩 混合使用四种方法,实现高效、全面的边界条件覆盖

好了,边界条件设计的四种方法就讲到这里。记住,测试不是为了证明系统没问题,而是为了找到问题。边界条件,就是问题最喜欢藏身的地方。用心设计,别偷懒。


公众号:蓝海资料掘金营,微信deep3321