1. 课程导入

自动驾驶系统的安全性与可靠性,无法仅靠“多跑里程”来证明。真实道路中极端、长尾、组合式风险场景出现概率极低,而软件迭代又要求快速验证“这次改动有没有破坏原有能力”。因此,本课程聚焦两条主线:场景覆盖——用有限测试资源尽可能逼近真实风险空间;回归测试——在版本持续演进中稳定识别能力退化与新增缺陷。二者共同构成自动驾驶测试工程的核心闭环。

一、学习目标:从“会跑用例”到“会设计验证体系”

完成本课程后,你应具备以下能力:

  • 能解释场景、场景库、覆盖度、回归基线、测试预言等核心概念,并区分其工程边界。
  • 能基于 ODD(运行设计域)与风险来源,构建分层场景空间,而不是零散堆叠用例。
  • 能设计场景覆盖指标,包括参数覆盖、逻辑覆盖、组合覆盖与风险加权覆盖。
  • 能搭建回归测试流水线,完成用例筛选、基线管理、结果比对、失败归因与报告输出。
  • 能识别“覆盖率高但无效”“回归通过但漏检”等典型误区,并给出改进策略。
核心判断:场景覆盖解决“测什么”,回归测试解决“怎么持续测、如何判断变差”。缺少任一环,测试都会退化为低价值重复劳动。

二、核心概念:场景、覆盖与回归的三角关系

场景是对自动驾驶系统所处环境、任务与动态交互的结构化描述,通常包含道路拓扑、交通参与者、环境条件、自车任务与初始状态。一个可执行场景还必须绑定参数范围、触发条件与评价标准。场景覆盖不是简单统计用例数量,而是衡量测试集在风险空间中的分布质量:是否覆盖关键参数边界、是否覆盖交互逻辑分支、是否覆盖高风险组合。回归测试则是在新版本上重放或重生成测试集,与基线结果比对,判断功能是否退化。

三者关系可用“风险空间—场景集—回归基线”来理解:风险空间定义目标,场景集是采样手段,回归基线是持续验证的参照系。若场景集偏离风险空间,回归通过率再高也不代表安全;若回归基线不稳定,覆盖再全也无法定位退化。

场景覆盖与回归测试工程知识框架 风险空间 → 场景建模 → 覆盖度量 → 回归执行 → 基线比对 → 归因闭环 风险空间 ODD边界 · 事故形态 长尾组合 · 失效模式 场景建模 逻辑场景 · 具体场景 参数空间 · 触发条件 覆盖度量 参数 · 逻辑 · 组合 风险加权覆盖 回归测试流水线 用例筛选 · 基线管理 · 结果比对 · 失败归因 误区:只追用例数量 覆盖率高 ≠ 风险覆盖好 误区:基线频繁漂移 通过率失真,退化被掩盖 闭环:归因反哺场景 失败样本沉淀为新场景

三、方法流程:从风险到回归的六步闭环

工程落地建议按以下流程推进,每一步都应有明确输入、输出与验收标准:

  1. 界定 ODD 与风险源:明确道路类型、天气、光照、交通密度、速度范围,并关联事故形态与系统失效模式。
  2. 构建分层场景库:按功能场景、逻辑场景、具体场景三层组织,逻辑场景定义参数空间,具体场景用于执行。
  3. 设计覆盖指标:至少包含参数边界覆盖、逻辑分支覆盖、组合交互覆盖与风险加权覆盖,避免单一计数。
  4. 生成与筛选用例:结合专家经验、实车数据挖掘、仿真采样与对抗生成,按风险与变更影响排序。
  5. 执行回归并比对基线:固定环境、地图、传感器配置与评价脚本,输出通过、失败、新增、消失四类结果。
  6. 归因与反哺:对失败样本分类为感知、预测、规划、控制或场景设计问题,并将有效样本沉淀回场景库。
建议把“场景库版本”和“被测软件版本”同时纳入回归记录。否则当结果变化时,无法判断是软件退化还是场景集变更导致。

四、案例场景:一次典型的回归退化定位

假设某版本更新了规划模块的换道决策逻辑。回归执行后发现:整体通过率从 96.2% 降至 94.8%,但失败用例集中在“相邻车道有快速接近车辆时的换道”场景。进一步查看参数分布,发现失败样本多落在相对速度 15~25 km/h、本车速度 60~80 km/h 的区间。此时不应直接判定“规划模块变差”,而应按以下顺序排查:

  • 确认场景库与基线版本是否一致,排除场景集变更干扰。
  • 检查评价脚本是否更新,避免阈值变化造成假失败。
  • 对比失败样本的感知输入,确认是否存在感知抖动或漏检。
  • 若感知一致,再定位规划轨迹的横向加速度、换道时机与安全距离指标。
  • 将确认有效的失败样本加入高风险场景子集,作为后续版本必测项。

该案例说明:回归测试的价值不在于“通过率数字”,而在于可定位、可复现、可沉淀。一个失败样本如果能转化为稳定场景,就比一百个随机通过用例更有工程价值。

五、实战路线图与常见误区

阶段 核心任务 关键产出 常见误区
风险建模 梳理 ODD、事故形态与失效模式 风险清单、优先级矩阵 只按功能罗列,忽略组合风险
场景构建 逻辑场景参数化、具体场景实例化 分层场景库、参数空间定义 场景不可执行、参数无边界
覆盖度量 设计多维覆盖指标并可视化 覆盖报告、风险热力图 只统计用例数,不看分布
回归执行 流水线化执行、基线比对、结果分类 回归报告、失败样本集 环境不固定,结果不可复现
归因闭环 失败分类、根因定位、场景反哺 缺陷单、新增场景、基线更新 只修代码,不沉淀场景
两个高频误区需要特别警惕:第一,把“仿真里程”当作覆盖度,里程长不等于风险覆盖全;第二,回归基线随意更新,导致通过率虚高、退化被掩盖。基线变更必须经过评审并记录原因。