1. 课程导入
自动驾驶系统的安全性与可靠性,无法仅靠“多跑里程”来证明。真实道路中极端、长尾、组合式风险场景出现概率极低,而软件迭代又要求快速验证“这次改动有没有破坏原有能力”。因此,本课程聚焦两条主线:场景覆盖——用有限测试资源尽可能逼近真实风险空间;回归测试——在版本持续演进中稳定识别能力退化与新增缺陷。二者共同构成自动驾驶测试工程的核心闭环。
一、学习目标:从“会跑用例”到“会设计验证体系”
完成本课程后,你应具备以下能力:
- 能解释场景、场景库、覆盖度、回归基线、测试预言等核心概念,并区分其工程边界。
- 能基于 ODD(运行设计域)与风险来源,构建分层场景空间,而不是零散堆叠用例。
- 能设计场景覆盖指标,包括参数覆盖、逻辑覆盖、组合覆盖与风险加权覆盖。
- 能搭建回归测试流水线,完成用例筛选、基线管理、结果比对、失败归因与报告输出。
- 能识别“覆盖率高但无效”“回归通过但漏检”等典型误区,并给出改进策略。
核心判断:场景覆盖解决“测什么”,回归测试解决“怎么持续测、如何判断变差”。缺少任一环,测试都会退化为低价值重复劳动。
二、核心概念:场景、覆盖与回归的三角关系
场景是对自动驾驶系统所处环境、任务与动态交互的结构化描述,通常包含道路拓扑、交通参与者、环境条件、自车任务与初始状态。一个可执行场景还必须绑定参数范围、触发条件与评价标准。场景覆盖不是简单统计用例数量,而是衡量测试集在风险空间中的分布质量:是否覆盖关键参数边界、是否覆盖交互逻辑分支、是否覆盖高风险组合。回归测试则是在新版本上重放或重生成测试集,与基线结果比对,判断功能是否退化。
三者关系可用“风险空间—场景集—回归基线”来理解:风险空间定义目标,场景集是采样手段,回归基线是持续验证的参照系。若场景集偏离风险空间,回归通过率再高也不代表安全;若回归基线不稳定,覆盖再全也无法定位退化。
三、方法流程:从风险到回归的六步闭环
工程落地建议按以下流程推进,每一步都应有明确输入、输出与验收标准:
- 界定 ODD 与风险源:明确道路类型、天气、光照、交通密度、速度范围,并关联事故形态与系统失效模式。
- 构建分层场景库:按功能场景、逻辑场景、具体场景三层组织,逻辑场景定义参数空间,具体场景用于执行。
- 设计覆盖指标:至少包含参数边界覆盖、逻辑分支覆盖、组合交互覆盖与风险加权覆盖,避免单一计数。
- 生成与筛选用例:结合专家经验、实车数据挖掘、仿真采样与对抗生成,按风险与变更影响排序。
- 执行回归并比对基线:固定环境、地图、传感器配置与评价脚本,输出通过、失败、新增、消失四类结果。
- 归因与反哺:对失败样本分类为感知、预测、规划、控制或场景设计问题,并将有效样本沉淀回场景库。
建议把“场景库版本”和“被测软件版本”同时纳入回归记录。否则当结果变化时,无法判断是软件退化还是场景集变更导致。
四、案例场景:一次典型的回归退化定位
假设某版本更新了规划模块的换道决策逻辑。回归执行后发现:整体通过率从 96.2% 降至 94.8%,但失败用例集中在“相邻车道有快速接近车辆时的换道”场景。进一步查看参数分布,发现失败样本多落在相对速度 15~25 km/h、本车速度 60~80 km/h 的区间。此时不应直接判定“规划模块变差”,而应按以下顺序排查:
- 确认场景库与基线版本是否一致,排除场景集变更干扰。
- 检查评价脚本是否更新,避免阈值变化造成假失败。
- 对比失败样本的感知输入,确认是否存在感知抖动或漏检。
- 若感知一致,再定位规划轨迹的横向加速度、换道时机与安全距离指标。
- 将确认有效的失败样本加入高风险场景子集,作为后续版本必测项。
该案例说明:回归测试的价值不在于“通过率数字”,而在于可定位、可复现、可沉淀。一个失败样本如果能转化为稳定场景,就比一百个随机通过用例更有工程价值。
五、实战路线图与常见误区
| 阶段 | 核心任务 | 关键产出 | 常见误区 |
|---|---|---|---|
| 风险建模 | 梳理 ODD、事故形态与失效模式 | 风险清单、优先级矩阵 | 只按功能罗列,忽略组合风险 |
| 场景构建 | 逻辑场景参数化、具体场景实例化 | 分层场景库、参数空间定义 | 场景不可执行、参数无边界 |
| 覆盖度量 | 设计多维覆盖指标并可视化 | 覆盖报告、风险热力图 | 只统计用例数,不看分布 |
| 回归执行 | 流水线化执行、基线比对、结果分类 | 回归报告、失败样本集 | 环境不固定,结果不可复现 |
| 归因闭环 | 失败分类、根因定位、场景反哺 | 缺陷单、新增场景、基线更新 | 只修代码,不沉淀场景 |
两个高频误区需要特别警惕:第一,把“仿真里程”当作覆盖度,里程长不等于风险覆盖全;第二,回归基线随意更新,导致通过率虚高、退化被掩盖。基线变更必须经过评审并记录原因。