4. 问题复现的基本概念

在智能驾驶路测中,发现一个异常只是起点,真正决定问题能否被修复的,是它能否被稳定地“请回来”。复现(Reproduction)指的是在受控条件下,让同一问题再次出现的过程。它把一次偶发的路测现象,转化为可观察、可测量、可反复验证的工程对象。没有复现,问题定位就只能依赖猜测;有了复现,团队才能把“我见过一次”变成“我随时能让你看到”。

复现的本质是:在保持关键条件一致的前提下,重建问题发生的因果链。关键条件包括场景输入、车辆状态、软件版本、传感器配置、时间同步与执行时序。

4.1 可复现性定义

可复现性(Reproducibility)是指:给定相同的初始条件、相同的输入序列和相同的系统配置,问题能够以可预期的方式再次出现。它包含三个层次的含义:

  • 条件可描述:问题发生时的场景、参数、版本、环境能够被完整记录,而不是“大概在某个路口”。
  • 过程可重放:输入数据(如感知结果、CAN 信号、时间戳)能够按原始时序重新注入系统。
  • 结果可判定:复现成功与否有明确的判据,例如同一帧出现相同误检、同一时刻发生相同接管。

在工程实践中,可复现性通常用一个可量化的指标来衡量:复现率。它等于成功复现次数除以总尝试次数。复现率越高,说明问题越“确定”,定位成本越低;复现率越低,说明问题越依赖隐藏条件,需要更精细的采集与回放手段。

4.2 复现等级

根据复现的稳定程度和所需条件,业界通常把复现分为若干等级。等级越高,问题越容易被工程化处理。下表给出一种常见的五级划分:

等级名称典型特征复现率参考定位难度
L1不可复现仅有一次路测记录,无法再次触发< 5%极高
L2概率性复现多次尝试中偶尔出现,条件不明确5% ~ 50%高
L3条件性复现在特定场景或参数下稳定出现50% ~ 90%中
L4确定性复现相同输入下每次必现> 90%低
L5最小化复现已裁剪到最小输入集,仍稳定触发≈ 100%极低

从 L1 到 L5,本质上是一个“不断缩小条件空间”的过程。L5 是定位工程师最希望达到的状态:输入最小、路径最短、因果最清晰。

4.3 确定性复现与概率性复现

确定性复现(Deterministic Reproduction)指在相同输入和相同配置下,问题每次都会出现。它通常对应软件逻辑缺陷、固定阈值越界、状态机死锁等“必然性”问题。确定性复现的定位效率最高,因为工程师可以反复运行、逐步裁剪输入,直到找到触发条件。

概率性复现(Probabilistic Reproduction)则指问题只在部分尝试中出现,往往与并发时序、资源竞争、传感器噪声、随机初始化或环境扰动有关。概率性复现的难点在于:每次运行的条件并不完全一致,工程师看到的“相同”可能只是表面相同。此时需要引入统计方法,记录每次运行的完整上下文,并通过大量重复实验来估计复现率及其置信区间。

判断确定性与概率性的一个实用方法:固定所有可固定变量后,连续运行 20 次。若 20 次全部触发,可初步归为确定性;若触发次数在 1~19 之间,则归为概率性,并需要进一步分析触发条件。

4.4 复现率评估指标

复现率不是简单的“成功次数 / 总次数”,在工程中需要结合置信度和样本量来评估。常用指标包括:

  • 点估计复现率:R = n_success / n_total,最直观,但样本少时波动大。
  • 置信区间:用二项分布或 Wilson 区间给出复现率的范围,避免“3 次成功 2 次”就下结论。
  • 首次复现耗时:从开始尝试到第一次成功复现所消耗的时间或里程,反映问题被“抓住”的效率。
  • 最小复现输入规模:触发问题所需的最短数据片段或最少信号数量,越小越好。
  • 复现稳定性:连续多轮复现中,结果是否保持一致,用于区分“真复现”和“碰巧相似”。

下面是一段用于记录复现实验的日志片段示例,包含版本、场景、尝试次数和结果:

repro_id: REP-2024-0417-003
sw_version: ADAS_2.7.3-rc1
scenario: urban_left_turn_cyclist_cutin
input_source: rosbag_20240416_142233.bag
attempts: 20
success: 17
repro_rate: 0.85
confidence_95: [0.62, 0.97]
first_success_attempt: 3
min_input_duration: 8.4s
notes: 触发条件与雨天路面反光相关,需保留摄像头曝光参数

4.5 核心原理与流程

复现的基本流程可以概括为“记录—回放—判定—收敛”四个环节。记录阶段要尽可能完整地保存场景输入、系统状态和版本信息;回放阶段要保证时间同步和信号顺序一致;判定阶段要定义清晰的通过/失败标准;收敛阶段则通过裁剪输入、调整参数,把复现等级从 L2/L3 提升到 L4/L5。

问题复现流程与复现等级演进 ① 记录 场景/版本/时序/参数 ② 回放 数据注入/时间同步 ③ 判定 通过/失败/相似度 ④ 收敛 裁剪输入/提升等级 迭代:未达目标等级则补充记录、调整回放条件 复现等级演进 L1 不可复现 复现率 < 5% L2 概率性 5% ~ 50% L3 条件性 50% ~ 90% L4 确定性 > 90% L5 最小化 ≈ 100% 复现率评估要点 • 点估计 R = 成功次数 / 总尝试次数,样本量不足时需给出置信区间 • 首次复现耗时越短,说明触发条件越容易被捕获 • 最小复现输入规模越小,因果链越清晰,定位效率越高 • 复现稳定性用于排除“碰巧相似”,确保问题本质一致

4.6 案例与场景

某项目在城区路测中发现:车辆在左转时偶发对横穿骑行者误制动。第一次路测只记录到一次,属于 L1。团队随后补充采集了同一路口的 20 次通行数据,其中 6 次触发,复现率约 30%,进入 L2。通过分析发现,触发与雨天路面反光导致摄像头曝光异常有关。固定曝光参数并回放同一段 rosbag 后,20 次中 18 次触发,复现率提升到 90%,达到 L4。最后裁剪出 8.4 秒的关键片段,仍能稳定触发,进入 L5。整个过程从“不可复现”收敛到“最小化复现”,定位时间从预计两周缩短到三天。

4.7 常见误区与复盘

误区一:把“相似现象”当成“同一问题”。 两次误制动可能由不同原因引起,必须通过版本、场景、信号对比确认因果一致。

误区二:样本量过小就下结论。 3 次尝试 2 次成功,不能直接说复现率 67%,应给出置信区间并继续实验。

误区三:只记录结果,不记录条件。 缺少版本、参数、时间同步信息,回放时无法重建原始因果链。

误区四:忽视概率性问题的统计特性。 概率性复现需要多轮实验和条件对比,不能靠单次运行判断。

复盘时建议回答三个问题:问题当前处于哪个复现等级?复现率及其置信区间是多少?下一步是补充记录、调整回放条件,还是裁剪输入以提升等级?把这三个问题写进复现报告,才能让定位工作有方向、有节奏、有收敛。