3、测试用例设计方法论:等价类划分、边界值分析、正交实验法、场景法

做基带芯片系统级测试这么多年,我最大的体会是:测试用例不是拍脑袋想出来的。你想想看,一个基带芯片要处理多少种信号组合?多少种协议状态?多少种异常场景?如果靠直觉去点,漏掉一个边界条件,流片回来可能就是几百万的损失。

所以,这一章我跟你聊聊测试用例设计的四个核心方法。说白了,就是教你用最少的用例,覆盖最多的风险点。

3.1 等价类划分:把无穷变成有限

等价类划分,核心思想就一句话:把输入域分成若干区间,每个区间里选一个代表就够了

举个例子。基带芯片的AGC(自动增益控制)模块,输入信号强度范围是 -120dBm 到 0dBm。你不可能每个0.1dB都测一遍,对吧?

我一般这么分:

  • 有效等价类:-120dBm ~ 0dBm(正常工作的范围)
  • 无效等价类:< -120dBm(信号太弱,芯片应该上报失锁)
  • 无效等价类:> 0dBm(信号过强,芯片应该启动限幅保护)

每个等价类里,我选一个典型值去测。比如 -80dBm、-130dBm、+5dBm。这样3个用例,就覆盖了所有可能的情况。

我的习惯: 做等价类划分时,一定要把「有效」和「无效」都列全。很多工程师只关注正常情况,结果异常输入一来,芯片就崩了。我在项目中遇到过,UE发了一个超范围的TA(时间提前量),基带直接死锁——就是因为没测无效等价类。

3.2 边界值分析:Bug最喜欢藏在边界上

等价类划分的兄弟方法,就是边界值分析。为什么?因为程序里的判断逻辑,比如 if (x >= -120 && x <= 0),最容易在边界上出错。

我个人习惯,每个边界测三个点:

  • 边界值本身:比如 -120dBm、0dBm
  • 边界值-1:比如 -121dBm、-1dBm
  • 边界值+1:比如 -119dBm、1dBm

你看,一个边界就衍生出3个用例。但别嫌多,我跟你讲个真实案例。

我曾经踩过的坑: 某款基带芯片的PSS(主同步信号)检测模块,设计文档里写的是「支持SNR >= -5dB」。测试时我只测了 -5dB、-4dB、-6dB,都过了。结果量产之后,有客户反馈在 -5.1dB 时搜网失败。后来一查代码,发现判断条件是 if (snr > -5),漏掉了等于的情况。这就是典型的边界值没覆盖全。

所以,边界值分析一定要把「等于」「小于」「大于」都测到。尤其是 >=<= 这种带等号的逻辑,最容易出问题。

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

基带芯片的测试,经常遇到多因素组合的场景。比如:

  • 频段:Band 1, Band 3, Band 8
  • 带宽:5MHz, 10MHz, 20MHz
  • 调制方式:QPSK, 16QAM, 64QAM
  • MIMO层数:1层, 2层, 4层

如果全组合测试,3×3×3×3 = 81个用例。太多了,测不完。这时候正交实验法就派上用场了。

正交实验法的核心是:用正交表来安排实验,保证任意两个因素的组合都出现一次。这样用例数会大幅减少,但覆盖度依然很高。

比如上面这个例子,用 L9(3^4) 正交表,只需要9个用例:

用例编号 频段 带宽 调制方式 MIMO层数
1 Band 1 5MHz QPSK 1层
2 Band 1 10MHz 16QAM 2层
3 Band 1 20MHz 64QAM 4层
4 Band 3 5MHz 16QAM 4层
5 Band 3 10MHz 64QAM 1层
6 Band 3 20MHz QPSK 2层
7 Band 8 5MHz 64QAM 2层
8 Band 8 10MHz QPSK 4层
9 Band 8 20MHz 16QAM 1层

你看,9个用例就覆盖了所有两两组合。虽然没测全组合,但实际经验告诉我,90%以上的Bug都是两两交互触发的。三因素以上的交互,概率极低。

我的建议: 正交实验法特别适合「参数多、但每个参数取值少」的场景。比如协议参数组合、RF配置组合、MCS组合等。如果参数取值很多,可以先用等价类划分压缩一下,再用正交表。

3.4 场景法:从用户视角出发

前面三种方法,都是从「输入」角度设计的。但基带芯片最终是要跑场景的。你想想看,用户不会关心你测了多少个边界值,他只关心「打电话会不会断」「上网快不快」。所以,场景法必不可少。

场景法的核心是:模拟真实的使用流程。我一般分两类:

  • 基本流:正常流程,比如开机搜网 -> 驻留 -> 发起呼叫 -> 通话 -> 挂断
  • 备选流:异常流程,比如通话中突然进入隧道(信号丢失)、切换失败、RRC重建等

举个例子,VoLTE通话测试的场景:

场景1(基本流):
  1. UE开机,搜到LTE小区
  2. 发起IMS注册
  3. 发起VoLTE呼叫
  4. 通话建立,双向语音正常
  5. 挂断,释放资源

场景2(备选流-切换):
  1. 通话中,UE从小区A移动到小区B
  2. 触发S1切换
  3. 切换完成后,语音是否中断?
  4. 检查切换时延 < 50ms

场景3(备选流-异常):
  1. 通话中,突然进入无信号区域
  2. UE启动T310定时器
  3. 定时器超时,触发RRC重建
  4. 重建成功后,语音是否恢复?

我个人习惯,每个功能模块至少设计3~5个场景:1个基本流,2~3个备选流,1个异常流。这样既能验证功能,又能覆盖边界。

避坑指南: 场景法最容易犯的错误是「场景太理想化」。比如你设计的切换场景,信号是线性衰减的。但实际环境中,信号可能是突然跳变的。所以,我建议场景法要和「随机性测试」结合,比如用信道模拟器加衰落、多径、多普勒频移。

3.5 四种方法的组合使用

你可能会问:这四种方法,到底用哪个?

我的经验是:不要孤立使用,要组合

  • 先用场景法:画出用户的使用流程,确定要测哪些功能点
  • 再用等价类划分:对每个功能点的输入参数,划分有效/无效等价类
  • 接着用边界值分析:对每个等价类的边界,补充边界用例
  • 最后用正交实验法:对多参数组合的场景,用正交表压缩用例数

举个例子,测基带芯片的「随机接入过程」:

  1. 场景法:基本流(正常PRACH发送+收到RAR)、备选流(PRACH冲突、RAR超时)
  2. 等价类划分:PRACH功率(-120dBm ~ 0dBm)、前导码索引(0~63)、RA-RNTI(0~60)
  3. 边界值分析:PRACH功率测 -120、-119、-121;前导码索引测 0、1、63、64
  4. 正交实验法:如果同时测频点、PRACH配置索引、前导码格式,用正交表组合

这样一套组合拳下来,用例数可控,覆盖度也高。我这些年做基带测试,基本都按这个套路来,没出过大问题。

最后说一句: 测试用例设计不是一锤子买卖。第一版用例跑完后,一定要看覆盖率报告,看哪些分支没走到,哪些条件没覆盖。然后迭代优化。好的测试用例,是改出来的,不是写出来的。
测试用例设计方法论 - 知识体系 测试用例设计方法论 等价类划分 边界值分析 正交实验法 场景法 有效等价类 无效等价类 边界值补充 边界值本身 边界值-1 边界值+1 正交表设计 两两组合覆盖 基本流 备选流 组合使用流程 场景法 → 等价类划分 → 边界值分析 → 正交实验法 先画流程,再分区间,再补边界,最后压缩组合
专注资料整理