场景理论:场景的定义、场景的分类与六层模型
做SOTIF实车验证,绕不开一个核心问题——场景到底是什么?
我见过不少团队,一上来就堆测试用例,结果跑完一轮发现:该覆盖的危险场景没覆盖,不该测的重复场景测了上百遍。说白了,就是没把场景这件事想清楚。
这一章,咱们把场景的定义、分类和六层模型掰开揉碎讲透。你理解了这个框架,后面的场景设计才有根。
2.1 场景的定义
先问个问题:什么是场景?
ISO 21448里给的定义比较学术——场景是描述一段持续时间内,车辆、交通参与者、环境、基础设施等元素的状态与行为。但我个人习惯用一个更直白的说法:场景 = 谁 + 在哪 + 干什么 + 周围有什么 + 天气怎么样。
举个例子:
- 「一辆白色轿车在雨天的高速路上,以120km/h行驶,前方50米有一辆货车突然变道」——这就是一个场景。
- 「一辆车在开」——这不是场景,信息太少了。
我在项目中遇到过一个问题:测试工程师写场景时,只写了「前车减速」,结果路测时发现,前车减速的时机、减速度、路面附着系数都不一样,同一个场景跑出来的结果天差地别。所以,场景必须包含足够的信息粒度。
2.2 场景的分类:三个层次
场景不是铁板一块。学术界和工业界普遍把场景分成三个层次:功能场景、逻辑场景、具体场景。这三个层次,说白了就是抽象到具体的递进关系。
| 层次 | 定义 | 特点 | 典型用途 |
|---|---|---|---|
| 功能场景 | 用自然语言描述的场景概念 | 抽象、定性、无参数 | 需求分析、早期设计 |
| 逻辑场景 | 用参数空间描述的场景范围 | 参数化、有边界、可组合 | 测试设计、参数探索 |
| 具体场景 | 参数取具体值的场景实例 | 确定、可执行、可复现 | 实车测试、仿真运行 |
2.2.1 功能场景
功能场景是最上层的抽象。它用自然语言描述「系统应该处理什么情况」,不涉及具体数值。
比如:
- 「车辆在高速路上遇到前方静止障碍物」
- 「行人从路边停放的车辆后方突然横穿马路」
- 「夜间对向车辆远光灯导致摄像头过曝」
功能场景的好处是——沟通成本低。产品经理、系统工程师、测试工程师坐在一起,用功能场景就能对齐认知。但坏处也很明显:没法直接用来测试,因为太模糊了。
2.2.2 逻辑场景
逻辑场景在功能场景的基础上,给关键参数划定了范围。它描述的是参数空间,而不是单个点。
举个例子,把上面的功能场景「车辆在高速路上遇到前方静止障碍物」展开成逻辑场景:
- 自车速度:80~130 km/h
- 障碍物类型:乘用车 / 货车 / 锥桶
- 障碍物静止位置:车道中心 / 车道偏左 / 车道偏右
- 路面附着系数:0.3~0.85
- 光照条件:白天 / 黄昏 / 夜间
你看,逻辑场景定义了一个参数组合的边界。测试时,你可以在这个边界内采样,生成大量具体场景。
我个人习惯用逻辑场景来做覆盖率分析。比如,自车速度范围是80~130,那低速工况(比如60km/h以下)是不是没覆盖到?如果有,说明场景设计有缺口。
2.2.3 具体场景
具体场景是逻辑场景中参数取具体值后的一个实例。它是可执行的、可复现的。
比如从上面的逻辑场景中,取一组参数:
- 自车速度:100 km/h
- 障碍物类型:乘用车
- 障碍物静止位置:车道中心
- 路面附着系数:0.7
- 光照条件:白天
这就是一个具体场景。你可以把它输入到仿真软件里跑,也可以在实车测试时复现。
具体场景的数量可以非常大。一个逻辑场景,如果有5个参数,每个参数取10个值,理论上就能组合出10⁵ = 10万个具体场景。所以,怎么从逻辑场景中高效采样,是场景设计的关键技术之一。
2.3 场景的六层模型
光有分类还不够。场景本身是一个多维度的复杂系统,怎么把它结构化?业界用得比较多的是六层模型(Six-Layer Model),最早由德国PEGASUS项目提出,后来被ISO 21448采纳。
六层模型把场景拆成六个独立的层,每一层关注不同的维度:
六层模型的核心思想是:场景不是一维的,而是多维的。你设计场景时,不能只盯着动态物体(比如前车),而忽略了道路几何、交通设施、环境条件这些静态或半静态因素。
我举个例子你就明白了:
同样是「前车急刹」这个场景——
- 在干燥柏油路上,自车能稳稳刹住;
- 在湿滑路面上,可能就滑出去了;
- 如果再加上夜间、对向远光灯,摄像头可能根本看不清前车刹车灯。
你看,同一个动态事件(L4),因为环境条件(L5)和道路层(L1)不同,系统的表现完全不同。所以,六层模型是场景设计的检查清单——每一层你都得问自己:这个场景里,这一层有没有特殊之处?
2.4 三个层次 × 六层模型 = 场景设计矩阵
把场景的三个层次和六层模型结合起来,就形成了一个场景设计矩阵。这个矩阵是我个人做场景设计时的核心工具。
| 六层模型 | 功能场景 | 逻辑场景 | 具体场景 |
|---|---|---|---|
| L1 道路层 | 高速路直道 | 车道数: 2~4; 曲率半径: ≥500m | 3车道, 曲率半径800m |
| L2 交通设施层 | 有限速标志 | 限速值: 80~120 km/h | 限速100 km/h |
| L3 临时操作层 | 有施工区域 | 施工占道: 1~2条; 长度: 50~200m | 占1条车道, 长度100m |
| L4 动态物体层 | 前车急刹 | 前车减速度: 3~8 m/s²; 初始距离: 30~80m | 减速度6 m/s², 距离50m |
| L5 环境条件层 | 雨天 | 降雨强度: 轻/中/重; 路面水膜厚度: 1~5mm | 中雨, 水膜3mm |
| L6 数字信息层 | GPS信号弱 | 定位误差: 1~10m | 定位误差5m |
这个矩阵怎么用?
- 先写功能场景:用自然语言描述,每层写一句话。
- 再展开逻辑场景:给每层的参数划定范围。
- 最后采样具体场景:从逻辑场景中取具体值,生成可执行的测试用例。
这样做的好处是——场景设计有层次、有结构、可追溯。你随时可以问:这个具体场景是从哪个逻辑场景来的?那个逻辑场景覆盖了哪些功能场景?
2.5 小结
这一章我们讲了三个核心概念:
- 场景的定义:不是随便一个「车在开」就叫场景,要有足够的信息粒度。
- 场景的三个层次:功能场景(抽象)→ 逻辑场景(参数化)→ 具体场景(可执行),层层递进。
- 六层模型:L1道路层、L2交通设施层、L3临时操作层、L4动态物体层、L5环境条件层、L6数字信息层——每一层都不能遗漏。