3. 场景库工程化定义

在 EyeQ 这类 ADAS/AD 芯片的验证体系中,“场景”这个词被频繁使用,但不同团队口中的场景往往指的不是同一件事。有人说的场景是一段自然驾驶片段,有人说的是一条仿真脚本,还有人说的是回归报告里的一个条目。如果概念边界不清,就会出现“场景库看起来很大,但回归覆盖说不清”“测试用例写了几千条,却无法回答某个 ODD 是否被验证过”这类问题。本节先把四个核心概念拆开,再说明它们在 EyeQ 开发流程中的位置与交付物形态。

一、四个概念的分层定义

场景(Scenario)是对一段交通情境的抽象描述,回答的是“世界上发生了什么”。它通常由道路结构、交通参与者、环境条件、动态行为四类要素构成。例如:双向两车道、限速 60 km/h、本车直行、对向卡车在距本车 80 m 处左转横穿、晴天、路面干燥。场景本身是与实现无关的,它不指定用哪颗芯片、哪个版本、哪种传感器配置去跑,也不规定通过判据。场景是知识资产,不是执行资产。

场景库(Scenario Library)是场景的受控集合,回答的是“我们决定覆盖哪些情境”。它的工程价值不在数量,而在组织方式:按 ODD 维度(道路类型、天气、光照、交通密度)、按功能(AEB、LKA、ACC、ELK)、按风险等级、按来源(法规、事故、路测、专家构造)建立索引与标签体系。场景库必须带元数据:唯一 ID、版本、来源、适用功能、参数范围、优先级、关联需求 ID。没有元数据的场景集合只是文件夹,不是场景库。

测试用例(Test Case)是把场景绑定到具体执行条件后的可执行单元,回答的是“在什么配置下、怎么跑、怎么判”。一个场景可以派生出多个测试用例。例如上述“对向卡车左转横穿”场景,在 EyeQ 验证中可派生:摄像头+雷达融合配置、纯视觉降级配置、不同 EyeQ 软件版本、不同触发时刻(TTC = 2.5 s / 2.0 s / 1.5 s)等多个用例。测试用例必须包含:输入激励(视频注入/回放/仿真参数)、被测对象(芯片+软件版本+传感器配置)、预期输出(报警时刻、制动减速度、误报/漏报判定)、通过判据。

回归集(Regression Set)是从测试用例中挑选出的、每次软件变更后必须重跑的稳定子集,回答的是“这次改动有没有破坏已有能力”。回归集不是全量测试集,它强调快、稳、可重复、可判定。典型做法是按风险分层:P0 回归集覆盖安全相关核心功能,要求每次提交必跑;P1 覆盖主要功能,每日构建跑;P2 覆盖边缘场景,版本发布前跑。

四者关系可以概括为:场景是“情境描述”,场景库是“受控情境集合”,测试用例是“场景+配置+判据的可执行绑定”,回归集是“测试用例中必须反复验证的稳定子集”。从场景到回归集,抽象度递减、执行性递增、数量通常递减。
场景 → 场景库 → 测试用例 → 回归集:概念边界与转化关系 场景 Scenario 道路结构 / 参与者 / 环境 动态行为 / 与实现无关 例:对向卡车左转横穿 TTC=2.0s,晴天,干燥 场景库 Library 受控集合 + 元数据索引 ODD / 功能 / 风险 / 来源 唯一ID、版本、需求关联 按标签可检索、可追溯 测试用例 Test Case 场景 + 配置 + 判据 输入激励 / 被测对象 EyeQ版本+传感器配置 预期输出 / 通过判据 回归集 稳定子集 P0/P1/P2 分层 快、稳、可重复 每次变更必跑 组织 绑定 筛选 场景库在 EyeQ 开发流程中的位置与交付物 需求分析 ODD定义 / 功能需求 交付:场景需求清单 场景库构建 场景采集/构造/标注 交付:场景库+元数据 用例开发 绑定配置/判据/激励 交付:测试用例集 回归验证 P0/P1/P2分层执行 交付:回归报告 失败用例反馈 → 补充/修正场景 关键交付物: 场景库(含元数据表)→ 测试用例集(含配置矩阵)→ 回归集定义(含分层策略)→ 回归执行报告(含通过率/失败归因) 版本绑定 场景库版本 随EyeQ软件发布

二、概念边界的三个易混淆点

第一,场景不等于测试用例。很多团队把“场景库里有 5000 个场景”直接等同于“有 5000 个测试用例”,这是危险的。一个场景在不同 EyeQ 软件版本、不同传感器配置、不同触发参数下,行为可能完全不同。场景是“考什么”,测试用例是“怎么考、考哪个版本、多少分算过”。场景库可以跨项目复用,测试用例必须绑定具体版本。

第二,回归集不等于全量测试集。回归集的核心约束是“每次变更都能跑完且结果可信”。如果回归集包含大量不稳定、判定模糊、执行时间长的用例,它就会失去回归价值。工程上通常用“失败可复现率”和“单次执行时长”两个指标筛选回归集:失败可复现率低于 95% 的用例先移出 P0,单条执行超过 10 分钟的用例考虑降层或优化。

第三,场景库不是一次性交付物。场景库随 ODD 扩展、事故数据积累、法规更新而持续演进。每次回归失败、每次路测发现新边缘场景,都应反馈到场景库,形成“验证—发现—补充—再验证”的闭环。这也是 EyeQ 这类长生命周期芯片必须把场景库当作版本化资产管理的原因。

三、EyeQ 开发流程中的位置与交付物

在 EyeQ 项目中,场景库位于需求分析与回归验证之间,起到“需求可验证化”的桥梁作用。需求分析阶段输出 ODD 定义和功能需求,场景库构建阶段把这些需求翻译成可描述、可检索、可复用的场景集合;用例开发阶段再把场景绑定到 EyeQ 的具体配置上;回归验证阶段从用例集中筛选稳定子集,在每次软件变更后执行并输出报告。

各阶段的关键交付物如下表所示。需要强调的是,场景库的元数据表是整个链条的“索引骨架”,没有它,后续的用例追溯和回归筛选都会退化为人工翻找。

阶段 核心活动 交付物 关键字段/内容
需求分析 定义 ODD、功能需求、安全目标 场景需求清单 ODD 维度、功能 ID、风险等级、法规引用
场景库构建 采集/构造/标注/评审场景 场景库 + 元数据表 场景 ID、版本、来源、参数范围、适用功能、优先级
用例开发 绑定配置、激励、判据 测试用例集 用例 ID、关联场景 ID、EyeQ 版本、传感器配置、通过判据
回归验证 分层筛选、执行、归因 回归集定义 + 回归报告 P0/P1/P2 清单、通过率、失败用例归因、版本对比
实践建议:在场景库元数据表中,至少保留“关联需求 ID”和“关联用例 ID”两个反向索引字段。这样当某个需求变更时,可以快速定位受影响场景和用例;当某个回归用例失败时,可以快速回溯到它覆盖的需求和场景,判断是场景问题、用例问题还是 EyeQ 实现问题。

四、一个可参考的场景库元数据字段示例

下面给出一个简化的场景库元数据表结构,字段设计围绕“可检索、可追溯、可回归”三个目标。实际项目中可根据团队工具链扩展,但核心字段不建议省略。

场景ID: SCN-AEB-CC-0012
场景名称: 对向卡车左转横穿_晴天干燥_城市道路
场景版本: v1.3
来源: 事故数据库 / 专家构造
ODD标签: 城市道路 | 晴天 | 干燥 | 限速60
适用功能: AEB-Car-to-Car
风险等级: P0
参数范围: 本车速度 40~60 km/h, TTC 1.5~2.5 s
关联需求: REQ-AEB-0042
关联用例: TC-AEB-CC-0012-01 ~ 05
创建日期: 2024-03-15
最后评审: 2024-06-20
状态: 已发布

这个结构的关键在于:场景 ID 是稳定主键,版本号支持演进,ODD 标签支持多维检索,关联需求与关联用例形成双向追溯,风险等级直接决定它进入哪一层回归集。当 EyeQ 软件从 v1.0 升级到 v1.1 时,回归系统可以按“适用功能=AEB-Car-to-Car 且 风险等级=P0”自动筛选出必须重跑的场景,再映射到对应版本的测试用例执行。

理解这四个概念的边界,本质上是在理解验证工程的“抽象层次管理”:场景保持与实现无关,场景库保持可管理,测试用例保持可执行,回归集保持可重复。四层各司其职,EyeQ 的场景库才能真正支撑起持续、可信、可追溯的回归验证。