3. 场景与场景库核心概念

在自动驾驶测试中,“场景”不是一段简单的道路描述,而是对车辆所处环境、任务、动态交互和评价条件的一次结构化抽象。只有把现实世界中的连续驾驶过程切分成可定义、可复现、可评价的单元,测试团队才能建立稳定的用例体系,并让仿真、封闭场地和实车测试共享同一套语言。本节围绕场景定义、场景要素、场景分类、逻辑场景与具体场景、场景库层次结构五个核心概念展开。

一、场景定义:从连续驾驶到可测单元

场景(Scenario)通常定义为:在特定时间、特定道路环境和特定交通参与者状态下,自车完成某一驾驶任务或遭遇某一交通事件的过程描述。它至少包含初始状态、动态演化和终止条件三部分。初始状态回答“从哪儿开始”,动态演化回答“过程中发生了什么”,终止条件回答“何时判定结束”。

例如“前车紧急制动”场景可以描述为:自车以 60 km/h 跟随前车,车距 25 m;前车在 1.5 s 内减速度达到 -6 m/s²;当自车完成制动、发生碰撞或前车停止后 3 s,场景结束。这样的定义已经具备可复现和可评价的基础。

场景的最小闭环:初始状态 + 动态演化 + 终止条件 + 评价指标。缺少任何一项,测试结果都难以稳定复现。

二、场景要素:六层结构拆解

为了系统化描述场景,工程上常把场景要素分为六层:道路层、交通设施层、临时改变层、交通参与者层、环境层和数字信息层。道路层描述车道、曲率、坡度、路口拓扑;交通设施层描述标志、标线、信号灯;临时改变层描述施工、事故、临时管制;交通参与者层描述车辆、行人、骑行者及其运动;环境层描述天气、光照、路面附着;数字信息层描述地图、V2X 和传感器可见性。

这六层不是简单罗列,而是决定了场景参数空间的大小。道路层和交通参与者层通常是最关键的变量来源,环境层和数字信息层则常作为扰动条件加入回归测试。

scene:
  road: {type: urban, lanes: 3, speed_limit: 60}
  facilities: {traffic_light: true, crosswalk: true}
  temporary: {construction: false}
  actors:
    - ego: {speed: 60, lane: 2}
    - lead_vehicle: {speed: 45, gap: 25, decel: -6}
  environment: {weather: rain, light: day, friction: 0.6}
  digital: {map: HD, v2x: false}

三、场景分类:按抽象层次与用途划分

场景可以按不同维度分类。按抽象层次,分为功能场景、逻辑场景和具体场景;按来源,分为自然驾驶场景、事故场景、专家设计场景和仿真生成场景;按测试目的,分为功能测试场景、性能测试场景、安全边界场景和回归场景;按交互复杂度,分为单车场景、多车交互场景和混行场景。

其中,功能场景用自然语言描述“做什么”,例如“车辆在路口左转时避让对向直行车辆”;逻辑场景用参数范围描述“在什么范围内做”,例如“对向车速度 30~60 km/h,自车速度 20~50 km/h”;具体场景则给出唯一参数组合,例如“自车 35 km/h,对向车 45 km/h,距离 40 m”。

分类维度 类型 典型用途
抽象层次 功能场景 / 逻辑场景 / 具体场景 需求分析 / 参数覆盖 / 仿真执行
来源 自然驾驶 / 事故 / 专家设计 / 仿真生成 真实性 / 边界挖掘 / 补充覆盖
测试目的 功能 / 性能 / 安全边界 / 回归 验证能力 / 评估指标 / 找失效 / 防退化
交互复杂度 单车 / 多车交互 / 混行 基础功能 / 博弈决策 / 复杂城市交通

四、逻辑场景与具体场景:参数空间与实例化

逻辑场景是场景库中最具工程价值的一层。它把功能场景中的关键变量抽象为参数区间或分布,例如自车速度、目标车速度、相对距离、减速度、反应时间、路面附着系数等。逻辑场景不直接执行,而是作为具体场景的生成模板。

具体场景是逻辑场景的一次参数实例化。例如逻辑场景定义“自车速度 40~80 km/h,前车减速度 -3~-8 m/s²,初始车距 10~40 m”,通过采样可生成“自车 60 km/h、前车减速度 -6 m/s²、车距 25 m”这一具体场景。回归测试中,具体场景是仿真器、场地和实车台架真正执行的输入。

关键区别:逻辑场景描述“参数空间”,具体场景描述“参数点”。逻辑场景用于覆盖设计,具体场景用于执行和判定。

五、场景库的层次结构

场景库不是场景的简单堆叠,而是按“场景族—逻辑场景—具体场景—测试用例”组织的层次结构。场景族按驾驶任务或交通事件聚类,如跟驰、换道、路口通行、避障、泊车;逻辑场景定义参数空间;具体场景是参数实例;测试用例则绑定被测版本、仿真配置、通过准则和优先级。

一个可维护的场景库还应包含元数据:场景来源、适用 ODD、法规关联、风险等级、覆盖状态、最近执行结果。这样,回归测试才能回答“哪些场景已覆盖、哪些版本退化、哪些边界尚未验证”。

场景库层次结构:从场景族到测试用例 逻辑场景定义参数空间,具体场景完成参数实例化,测试用例绑定版本与判定准则 ① 场景族(Scenario Family) 按驾驶任务或交通事件聚类:跟驰、换道、路口通行、避障、泊车、汇入汇出 作用:建立场景库一级索引,支撑 ODD 覆盖分析与测试策略分解 ② 逻辑场景(Logical Scenario) 用参数区间或分布描述一类场景:自车速度 40~80 km/h,前车减速度 -3~-8 m/s²,车距 10~40 m 作用:定义参数空间,指导采样、边界搜索与覆盖度评估 ③ 具体场景(Concrete Scenario) 参数实例化:自车 60 km/h,前车减速度 -6 m/s²,初始车距 25 m,雨天,附着系数 0.6 作用:仿真器、封闭场地和实车台架可直接执行的输入 ④ 测试用例(Test Case) 绑定被测版本、仿真配置、通过准则、优先级、覆盖状态与最近执行结果 作用:回归测试的最小执行与判定单元,支撑版本退化追踪 一级索引:任务/事件 支撑 ODD 覆盖分析 参数空间:区间/分布 指导采样与边界搜索 参数点:唯一组合 可直接执行与判定 版本+配置+准则 回归执行最小单元

六、常见误区与复盘

第一个误区是把功能场景直接当测试用例执行。功能场景只有自然语言描述,没有参数和判定条件,无法稳定复现。第二个误区是逻辑场景参数范围过大,导致采样稀疏,边界失效被漏掉。第三个误区是具体场景没有绑定版本和通过准则,回归结果无法比较。第四个误区是场景库只存场景文件,不存元数据,导致覆盖状态和风险等级无法追踪。

复盘建议:建立场景库时,先定义场景族和 ODD 映射,再逐层细化逻辑场景与具体场景;每个具体场景必须绑定测试用例元数据,包括被测版本、仿真配置、通过准则、优先级和最近执行结果。否则场景库会退化为“文件仓库”,无法支撑回归测试工程。

综上,场景定义提供了可测单元的基本结构,场景要素决定了参数空间,场景分类帮助组织测试策略,逻辑场景与具体场景连接了覆盖设计与执行实例,场景库层次结构则让这些资产可管理、可追踪、可回归。理解这五个概念,是后续场景生成、覆盖度评估和回归测试流水线设计的基础。