4. 场景分类与参数化:功能场景、逻辑场景、具体场景的定义、场景参数化方法(OEDR模型)、场景变体生成技术、基于场景的测试用例设计
各位工程师朋友,咱们今天聊聊场景分类与参数化。说实话,这是整个预期功能安全测试里最核心、也最容易被忽视的一环。我见过太多团队一上来就猛跑仿真,结果跑了一堆无效场景,问题一个没抓到。为什么?因为场景没分清楚,参数没定义好。
好,咱们一步步来。
4.1 场景的三个层次:功能、逻辑、具体
场景分类,说白了就是三个层次:功能场景、逻辑场景、具体场景。这三个概念,我建议你像记自己的工号一样记牢。
核心理解:功能场景是“做什么”,逻辑场景是“怎么做”,具体场景是“做出来什么样”。
4.1.1 功能场景(Functional Scenario)
功能场景是最抽象的层次。它只描述“发生了什么”,不关心具体数值。比如:
- “前车突然减速”
- “行人横穿马路”
- “车道线模糊”
嗯,这里要注意:功能场景通常用自然语言描述,是测试工程师和系统工程师沟通的起点。我个人习惯在项目初期先拉一个功能场景清单,哪怕只有十几条,也比没有强。
4.1.2 逻辑场景(Logical Scenario)
逻辑场景开始引入参数范围。它不指定具体值,但告诉你参数在什么区间内变化。举个例子:
- 前车速度:10~60 km/h
- 自车速度:30~80 km/h
- 相对距离:5~50 m
- 路面摩擦系数:0.3~0.8
逻辑场景的价值在于——它定义了测试空间的边界。我在项目中遇到过,有人把逻辑场景的参数范围设得太宽,结果仿真跑了一周还没跑完。后来我建议先做敏感性分析,把关键参数挑出来,范围收窄,效率直接翻倍。
4.1.3 具体场景(Concrete Scenario)
具体场景就是参数都定死了。比如:
- 前车速度:40 km/h
- 自车速度:60 km/h
- 相对距离:20 m
- 路面摩擦系数:0.7
说白了,具体场景就是一条可执行的测试用例。你把它扔进仿真器,就能跑出结果来。
4.2 场景参数化方法:OEDR模型
好,场景分清楚了,接下来怎么参数化?我个人比较推崇OEDR模型。OEDR是四个维度的缩写:
| 维度 | 英文 | 中文 | 举例 |
|---|---|---|---|
| O | Operational | 运行环境 | 天气、光照、路面、交通标志 |
| E | Environmental | 环境要素 | 静态障碍物、动态交通参与者 |
| D | Dynamic | 动态行为 | 自车速度、目标车加速度、变道意图 |
| R | Risk | 风险因素 | 遮挡、传感器退化、通信延迟 |
为什么用OEDR?因为它覆盖了场景的方方面面。我曾经在做一个城市NOA项目时,团队只关注了O和E,结果D和R没覆盖到,导致一个关键场景漏测——雨天+遮挡+前车急刹。嗯,那次教训挺深刻的。
我的建议:每个逻辑场景至少从O、E、D、R四个维度各选2~3个参数。这样既能保证覆盖度,又不会让参数组合爆炸。
4.3 场景变体生成技术
有了参数化方法,下一步就是生成场景变体。说白了,就是从一个逻辑场景里变出成百上千个具体场景。常用的方法有三种:
4.3.1 组合测试(Combinatorial Testing)
把每个参数的取值范围离散化,然后做组合。比如:
- 前车速度:{20, 40, 60} km/h
- 自车速度:{40, 60, 80} km/h
- 相对距离:{10, 20, 30} m
3×3×3 = 27个具体场景。你想想看,如果参数再多几个,组合数会爆炸。所以一般用pairwise或orthogonal array来降维。
4.3.2 边界值分析(Boundary Value Analysis)
这个我特别喜欢用。为什么?因为很多bug都出在边界上。比如:
- 相对距离刚好等于最小安全距离
- 前车速度刚好等于自车速度
- 路面摩擦系数刚好在干湿交界处
我记得有一次,一个AEB功能在相对距离5.0m时触发正常,但4.9m时就不触发了。查了半天,发现是阈值判断写成了“>5.0”而不是“>=5.0”。边界值分析,真的能救命。
4.3.3 随机采样(Random Sampling)
在参数空间内随机撒点。适合探索未知区域,但效率不高。我一般用它做补充,而不是主力。
注意:随机采样不能保证覆盖到所有关键边界。建议先用边界值分析覆盖边界,再用组合测试覆盖内部,最后用随机采样做补充。
4.4 基于场景的测试用例设计
好,最后一步——怎么把场景变成可执行的测试用例?我总结了一个四步法:
- 选场景:从逻辑场景中选一个,确定参数范围
- 定参数:用OEDR模型把参数定下来
- 生变体:用组合测试或边界值分析生成具体场景
- 写用例:把具体场景写成测试用例,包括前置条件、输入、预期输出
举个例子:
测试用例ID: TC-AEB-001
功能场景: 前车突然减速
逻辑场景:
- 前车速度: 30~50 km/h
- 自车速度: 50~70 km/h
- 相对距离: 10~30 m
具体场景:
- 前车速度: 40 km/h
- 自车速度: 60 km/h
- 相对距离: 20 m
前置条件: 天气晴朗,路面干燥,车道线清晰
输入: 前车以-4 m/s²减速
预期输出: 自车在2.5秒内触发AEB,减速度≥-6 m/s²,且与前车保持≥1m距离
嗯,这里要注意:预期输出一定要写清楚,不能写“系统应正常响应”这种废话。什么叫正常?你得量化。
4.5 本章知识体系总览
最后,我用一张图把本章的核心逻辑串起来。你一看就明白了。
这张图把整个流程串起来了:从功能场景出发,经过逻辑场景的参数化,再到具体场景的生成,最后落地为测试用例。你想想看,每一步都有明确的方法和工具,是不是清晰多了?
最后说一句:场景分类和参数化,看着是基础工作,但基础不牢,地动山摇。我见过太多项目在后期才发现场景覆盖不全,回头补场景,成本翻了好几倍。所以,一开始就把这个框架搭好,后面会省很多事。
公众号:蓝海资料掘金营,微信deep3321