3. 场景测试基础

在NOA(Navigate on Autopilot,领航辅助驾驶)场景测试与量产验证中,最容易被混淆的不是工具链,而是四个基础概念:场景、用例、测试项、测试套件。它们看似只是文档层级,实际上决定了测试覆盖是否可度量、回归是否可复用、问题是否能追溯到具体触发条件。如果概念边界不清,团队常出现“场景写成了用例”“用例堆成了套件”“测试项无法定位失败原因”等问题,最终导致验证效率低下。

核心关系可以概括为:场景定义“世界是什么样”,用例定义“要验证什么行为”,测试项定义“具体怎么执行与判定”,测试套件定义“如何组织与批量运行”。四者从抽象到具体、从描述到执行,形成一条可追溯的验证链。

一、四个概念的定义与边界

场景(Scenario)是对驾驶任务所处环境与动态交互的抽象描述,回答“在什么道路、什么交通、什么天气、什么目标下行驶”。例如“城市主干道无保护左转,对向有直行车辆,雨天,目标为安全通过且不引发冲突”。场景强调语义与约束,不绑定具体参数取值,也不规定必须用哪种工具执行。

用例(Test Case)是在某个场景下,为验证一个明确功能或安全目标而设计的最小验证单元。它把场景收敛为可判定的输入与预期,例如“主车在路口等待,对向直行车距50m、速度40km/h,主车应在安全间隙内完成左转,且不触发AEB”。用例强调验证意图与预期结果,通常一个场景可派生多个用例。

测试项(Test Item)是用例的可执行实例,包含具体参数、初始状态、执行步骤、判定阈值与数据采集要求。例如“主车速度0km/h,对向车初始距离50m,相对速度40km/h,仿真步长10ms,判定:左转完成时间≤8s,最小TTC≥2.5s,无碰撞”。测试项强调可执行、可复现、可判定,是自动化执行与结果记录的最小单位。

测试套件(Test Suite)是按一定策略组织的测试项集合,用于批量执行、回归验证或版本准入。例如“城市路口左转回归套件”包含20个测试项,覆盖不同对向车距离、速度、天气与光照组合。套件强调组织策略与执行范围,通常与版本、里程碑、风险等级绑定。

二、相互关系:从场景到套件的追溯链

四者不是简单包含关系,而是多对多、可追溯、可复用的工程关系。一个场景可派生多个用例;一个用例可实例化为多个测试项(不同参数组合);一个测试项可被多个套件引用(如冒烟套件、回归套件、夜间专项套件)。反过来,任何一个测试项失败,都应能向上追溯到用例意图与场景来源,向下定位到具体参数与日志。

场景 → 用例 → 测试项 → 测试套件:可追溯验证链 场景 Scenario 道路·交通·天气·目标 语义抽象,不绑参数 例:无保护左转 用例 Test Case 验证意图·预期结果 最小验证单元 例:安全间隙左转 测试项 Test Item 参数·步骤·阈值·日志 可执行可复现 例:50m/40km/h 测试套件 批量·回归·准入 按策略组织 例:左转回归套件 派生 实例化 组织 多对多复用关系 1个场景 → N个用例 1个用例 → M个测试项 1个测试项 → K个套件 失败可反向追溯 追溯示例:左转测试项失败 测试项:TTC=2.1s 用例:安全间隙左转 场景:无保护左转 套件:城市路口回归

三、方法流程:如何从场景构建到套件执行

工程实践中,建议按以下流程推进,避免概念混用:

  1. 场景建模:从ODD(运行设计域)出发,按道路类型、交通参与者、天气光照、任务目标四个维度建立场景库,每个场景赋予唯一ID与语义标签。
  2. 用例设计:针对每个场景,识别需要验证的功能点与安全目标,形成用例。用例应写明前置条件、操作意图、预期结果与失败判据。
  3. 测试项实例化:将用例中的变量参数化,生成具体测试项。每个测试项必须包含初始状态、执行步骤、判定阈值、数据采集项与通过标准。
  4. 套件编排:按版本准入、冒烟、回归、专项(夜间/雨天/拥堵)等策略,从测试项池中选取并组织套件,设置执行顺序与优先级。
  5. 执行与追溯:批量执行套件,记录每个测试项结果;失败项自动关联用例与场景,形成缺陷报告与覆盖度分析。

四、案例与清单:城市路口左转验证

以“城市主干道无保护左转”为例,四层概念的具体落地如下表所示。该表可直接作为团队内部的概念对齐清单。

层级 名称示例 关键内容 数量关系
场景 SC-CITY-LT-001 无保护左转 城市主干道、对向直行、雨天、目标安全通过 1个场景
用例 TC-LT-001 安全间隙左转 验证主车在安全间隙内完成左转且不引发冲突 派生3个用例
测试项 TI-LT-001-01 对向50m/40km/h 初始距离50m、速度40km/h、TTC≥2.5s、无碰撞 实例化12个测试项
测试套件 SUITE-CITY-LT-REG 城市路口左转回归套件,含12个测试项 被3个套件引用

五、常见误区与复盘

误区一:把场景当用例。场景只描述环境与目标,不写预期结果与判定阈值。若场景中直接写“应通过”,则无法度量。
误区二:用例与测试项混用。用例是验证意图,测试项是执行实例。一个用例可对应多个参数组合的测试项,不能一一等同。
误区三:套件等于全部测试项。套件是按策略选取的子集,全量执行不等于有效回归。应按风险与变更范围动态编排。
误区四:缺少唯一ID与追溯字段。测试项失败后无法反查场景与用例,导致问题定位靠人工回忆,效率极低。
建议在测试管理平台中为四层对象建立统一ID规范,例如:场景 SC-xxx、用例 TC-xxx、测试项 TI-xxx、套件 SUITE-xxx,并在测试项中强制填写 scenario_id 与 case_id 字段。这样任何一次失败都能在数秒内完成从结果到场景的追溯。
# 测试项元数据示例(YAML)
test_item_id: TI-LT-001-01
case_id: TC-LT-001
scenario_id: SC-CITY-LT-001
suite_refs:
  - SUITE-CITY-LT-REG
  - SUITE-SMOKE-CITY
params:
  ego_speed_kph: 0
  oncoming_distance_m: 50
  oncoming_speed_kph: 40
  weather: rain
criteria:
  min_ttc_s: 2.5
  collision: false
  max_completion_time_s: 8

掌握这四个概念的定义与关系,是后续场景覆盖率统计、测试项自动生成、套件回归策略设计的基础。只有把“场景—用例—测试项—套件”这条链打通,NOA场景测试才能从手工堆砌走向工程化、可度量、可追溯的量产验证体系。