自动驾驶测试是一个复杂的系统,本文将从小到大、逐步展开,帮助读者梳理其中的要点。
在展开前,先提出一个问题:自动驾驶的测试需要达到怎样的量级?
据国际通用标准,人类司机驾驶一小时的死亡概率约为1/10^6,全球因道路交通事故每年死亡约125万。若要发展自动驾驶,其死亡概率必须显著低于这一标准。目前社会可接受的自动驾驶一小时死亡率不高于1/10^9。若要把死亡率降至1/10^9级别,每更新一次软件,理论上需司机累计驾驶10^9小时才能确保功能可靠性。显然,依靠真实车辆测试难以实现这一目标。
现实中的测试体系通常采用分层思路,结合多种成本与覆盖角度的测试手段,以可控的时间和成本接近真实场景的测试效果。不同测试方法的成本不同,合理的迭代次数也不同。若一个项目具备完善的测试体系,模块逻辑测试须规避超过60%的潜在问题,仿真测试需解决约30%的剩余问题,而留给实车鲁棒性测试的比例最多不超过10%。在各自手段内尽量发现潜在问题,控制后续测试的难点与成本;若搭配合理,能在确保高覆盖度的同时实现成本可控。例如,若仿真测试体系完备,开发规划几乎无需大量上车验证即可节省大量外围资源。
不同测试方法的对比
多层次测试手段的组合并非没有代价,构建专项测试系统往往需要较长的搭建周期与较高的初期成本。无论是零部件层面的CAE、DV、PV测试,还是软件的静态、集成、仿真测试,常有为了赶进度而跳过某些测试环节的情况。
这其实是一笔经济账:若省略了前道测试环节,后道高成本环节需要解决前道遗留问题时的资源支出,若超过前道设立的花费,整个测试体系就会变得不划算,反之亦然。
合理的测试层次需要实现平衡。一般而言,在成熟的研发体系中,更多梯次、互相正交的测试体系配合高效的流程往往带来更高的效率。
真正有效的测试往往通过特定的测试工具与用例,聚焦被测对象在特定维度的问题。任何测试系统,只要能针对某一类潜在问题、成本低于其他手段且覆盖范围高于其他手段,便是一个优秀的测试系统。其归类并非决定性的,务实才是核心。
在测试设计中,务实与可操作性是关键。
工程实践中的测试过程
测试流水线往往也是训练流水线的一部分。以往测试工作聚焦于杜绝人为失误所致的潜在隐患,最广为人知的即测试驱动开发(Test-Driven Development,TDD):在编写功能代码前先编写测试用例,只编写能通过测试的代码,以测试推动开发。
如今自动驾驶正走向自监督的过程,更多的机器对机器之间的互动与测试反馈成为常态,也就是深度学习的应用场景。对人而言,测试是为了确保产品与目标一致;对机器而言,训练也是为了达成类似的目标。
以下内容将系统性地介绍当前智能驾驶领域的典型测试流程,从不同的合作模式、领域侧重点以及技术断面三个方面进行梳理。
自动驾驶的常用测试手段
从合作模式看,测试可分为黑盒、白盒和灰盒三类。
白盒测试查看内部结构的每一条通路是否按设计工作,通常用于内部管理;黑盒测试不考虑内部结构,只验证产品功能是否符合技术要求,通常用于对方内部管理;灰盒测试介于两者之间,在测试外部功能的基础上对关键链路进行确认,具体程度视合作关系而定。
从领域角度看,不同领域有各自的测试维度与问题。
从软件代码出发,测试可分为静态测试与动态测试:静态测试分析程序的语句结构、编码规范等是否存在错误,常用工具如 QAC、Converity 等,但在整个体系中占比相对较小,通常是软件测试的第一道。代码评审(Code Review)对静态设计进行评估;动态测试则将运行结果与预期对比,分析运行效率与健壮性。目前自动驾驶的软件测试大多属于动态测试范畴,如性能测试及各类在环测试。
从技术断面来看,这是最复杂、也是最关键的一环。
首先解释断面的意义:面临多因素混合作用的复杂系统时,通过设置断面,可以隔离影响变量、将复杂性简化到可测试的程度,并把原本串行的问题排查任务转化为并行任务,缩短进度。
在最底层,是单元测试、模块测试和模块集成测试。在研发平台(X86)上,将软件函数、单个或多个模块的输入输出作为断面,核心在于验证代码逻辑正确性。通过 VecTorCast、GTest 等工具注入大量错误输入与少量正确输入,确认反馈符合预期。此过程通常是开环的。
模块级测试也称为模型在环测试(MIL):除了正确性,还会考虑模型的性能指标,如感知模块的识别精度等。
进入软件逻辑层面时,可能出现嵌入式环境中的硬件相关问题,例如堆栈溢出、调度混乱、时间戳不稳定、系统调用不稳定、内存读取异常等。为排除这些差异,可以在目标硬件维度引入处理器在环测试(PIL),将部分代码放在目标处理器上验证功能正确性的同时,确认性能是否达到要求,例如最长耗时、系统调用可靠性等。通常 PIL 侧重正确性,硬件在环测试(HiL)侧重稳定性。
PIL 与 HiL 的区别在于目标硬件的参与。HiL 通常不会大规模部署,成本较高,但结果更贴近真实状态,可额外评估软件在目标硬件上的整体性能。HiL 测试通常将被测控制器与一系列模拟设备进行硬件连接,通过仿真输入来完成对目标硬件的测试。实践中,30-50 台轻量级 HiL 台架往往更具性价比,长周期测试误差较大,短周期测试更有效。
完成控制器级测试后,测试将进入整车级别。此阶段包括车辆在环测试(VIL,Vehicle-in-Loop)或实车虚拟注入测试,即在封闭测试场内的实车环境下,通过配置断面测试接口,屏蔽部分真实感知输入,模拟各种道路环境。通过这种方式,可以在受控场景下实现可信度较高的测试,同时充分利用封闭场地资源。
另一种形态是实车交通环境在环测试(VTEHiL),在室内场地构建周边环境变化与车辆移动,进行智能驾驶车辆的测试。由于环境完全受控,可实现24小时连续测试,并能高效、全面地模拟极端工况。
进一步深入的是道路在环测试(RIL,Road-in-Loop)或封闭场地测试。除了环境参与者和司机之外,其他要素均为真实要素。传统测试中常用人车搭配的遥控方式,如今已出现自动化测试方案:通过云端集中指挥调度,测试用例同步到封闭场地的智能假人与假车,显著提升测试效率。
在整车级别的测试中,关注的指标包括接管率、鲁棒性等。除 VIL、RIL 外,还有 LabCAR 测试台架以及大规模实车测试,这些内容往往与整车其他测试流程共同进行。
单个智能驾驶控制器的测试只是一个阶段,接下来将进入整车级测试的阶段。
