A Survey on Automated Driving System Testing-Landscapes and Trends(二)[系统级ADS测试技术]
系统级ADS测试技术
与模块级测试不同,系统级测试侧重于模块之间的协作而威胁整车安全的故障。
针对模块级的测试技术大部分的测试工作都是在模拟环境中完成的,由各种软件模拟器实现。
基于仿真的测试+混合现实测试(在测试循环中引入了真实硬件)
使用仿真器进行系统级测试
测试方法+测试预期+测试充分性
测试方法
基于搜索的测试+自适应压力测试+基于采样的方法+对抗攻击
基于搜索的测试(fuzz)
- Compositional falsification of cyber-physical systems with machine learning components提出了一个组合的基于搜索的测试框架,并将其应用于具有机器学习组件(即主要是感知)的ADS的测试。他们的工作的基本思想是协同使用感知输入空间和整个系统输入空间:一个空间上的约束可以减少另一个空间上的搜索代价。这样,他们提高了寻找反例的效率。
- Testing autonomous cars for feature interaction failures using many-objective search提出了一种多目标搜索算法,用于检测由特征交互引起的错误。特征交互描述了不同ADS功能之间的相互作用,例如,AEB命令可能被ACC命令覆盖,因为这两个功能都控制着制动执行器。在实践中,基于搜索的测试也被证明对工业级ADS有效.
- AV-FUZZER: Finding safety violations in autonomous driving systems用于APOLLO测试,该框架在发现危险场景方面的有效性。
有一系列的工作研究测试输入和系统行为之间的关系:
- Model-based exploration of the frontier of behaviours for deep learning system testing提出了一种行为边界的概念,它表示了系统开始出现异常行为的输入的边界。
- Deephyperion: exploring the feature space of deep learning-based systems through illumination search首先提供了一个可解释的特征映射,用来解释测试输入和系统行为之间的相关性,并利用Illumination Search来探索特征空间。
- Efficient and effective feature space exploration for testing deep learning systems改进了可解释的特征映射,用于寻找那些有助于特征映射探索的测试输入。
车道保持系统是自动驾驶系统测试的一个重要目标。当应用基于搜索的测试时,不同的道路表示方式会影响方法的有效性。
- Analysis of road representations in search-based testing of autonomous driving systems比较了六种用于测试车道保持系统的道路表示方式,并发现曲率和方向是影响这些系统行为的重要因素。
- Automatically testing self-driving cars with search-based procedural content generation提出了一种名为ASFAULT的新方法,用于生成虚拟道路来测试车道保持系统。在BeamNG.AI和DeepDriving上的实验表明,该方法可以生成有效的测试道路,使车辆偏离正确的车道。
- FreneticV at the SBST 2022 tool competition
还有一些其他的工作旨在通过设计更好的搜索算法来提高搜索效率。
- Testing vision-based control systems using learnable evolutionary algorithms和Testing autonomous cars for feature interaction failures using many-objective search将多目标搜索与决策树分类相结合,用于自动驾驶系统的测试生成。在他们的框架中,分类器检查场景是否是一个关键场景,并加速搜索过程。
- Eagle strategy with local search for scenario based validation of autonomous vehicles应用基于Eagle策略的RRT来估计关键场景边界。
- Rapid generation of challenging simulation scenarios for autonomous vehicles based on adversarial test提出了一种量子遗传算法,允许较低的种群大小。
- Targeting requirements violations of autonomous driving systems by dynamic evolutionary search研究了测试用例优先级技术,并使用多目标搜索算法来寻找更有可能发生的违规情况。测试用例优先级技术也被用于加速自动驾驶系统的回归测试并取得了显著的结果。
基于搜索的测试通常基于系统仿真;然而,即使使用软件仿真器,自动驾驶系统的仿真仍然可能是昂贵和缓慢的。还有另一系列工作训练替代模型作为测试加速的替代品。
自适应压力测试
压力测试已经在工业的各个领域被广泛采用,它通过提供超出被测系统能力的测试用例来进行测试。自适应压力测试,顾名思义,是以一种自适应的方式进行压力测试;也就是说,它对测试用例进行优先级排序,并根据不同的测试资源进行分配。因此,指定优先级分配策略是自适应压力测试的关键。
基于采样的方法
自动驾驶系统测试中的一个用例是通过从自然场景分布中抽样来生成场景,以使生成的场景更加真实。
- A novel, modular validation framework for collision avoidance of automated vehicles at road junctions提出了一个基于抽样的框架,用于验证道路交叉口的自动驾驶系统。具体来说,他们首先根据真实世界的事故数据,对交叉口场景及其代表性的变化进行聚类,然后用拉丁超立方抽样方法对这些相关参数进行抽样,并用它们来组成具体的仿真测试场景。 抽样也被用来帮助识别故障特征。
- Interpretable safety validation for autonomous vehicles将信号时序逻辑(STL)与抽样方法相结合,用于生成测试中的干扰轨迹。由于STL的特点,即对时间上的逻辑关系的描述,这些轨迹是可解释的,也更容易调试。
对抗攻击
用于测试感知模块。
这些工作攻击了感知模块,但是它们评估了攻击对整个系统的影响。
- Dirty road can attack: Security of deep learning based automated lane centering under {Physical-World} attack生成了攻击补丁,作为脏路的伪装,误导受害者自动驾驶系统的横向控制功能偏离车道。
- Experimental resilience assessment of an open-source driving agent根据系统级安全风险分析,对相机捕获的图像生成扰动,以评估OpenPilot在真实环境条件下的可靠性。
- badvertisement: Attacking advanced driver-assistance systems using print advertisements利用印刷广告进行攻击,例如,他们在其他车辆的后面嵌入一个对抗性的交通标志,并误导系统做出错误的行为。
测试预期
自动驾驶系统的系统级测试的预期通常由安全指标来定义,例如碰撞时间,它衡量了被测自动驾驶系统距离危险情况有多远。这些指标可以通过监测仿真器中的系统行为直接计算,或者用形式化规范来表示,例如STL,它可以自动监测系统行为并计算指标值。此外,一些工作中也使用了变形关系来定义自动驾驶系统的预期。
安全指标
在系统级测试中,一个合适的安全指标,或者称为关键性指标,可以用来发现更多的系统违规。
这些安全指标可以分为时间指标和非时间指标。
时间指标描述了对运动物体的时间要求,最流行的是碰撞时间(TTC)及其扩展,例如最坏碰撞时间(WTTC),它们衡量了自车在场景中与碰撞的接近程度。Weng等人提出了一种模型预测瞬时安全指标(MPrISM),它考虑了运动车辆之间的交互。另一些指标包括车头时距(THW)和反应时间(TTR)。前者计算了自车到达前车位置所需的时间,后者估计了所需反应的剩余时间,例如刹车动作。
非时间指标涉及不同的方面,例如距离、减速和转向。一种距离指标叫做停止距离(SD),它计算了一辆车以最大舒适减速度停止所需的距离。另一种距离指标叫做横向位置(LP),它定义了车辆中心与行驶车道中心之间的距离。减速指标,例如避免碰撞的减速率(DRAC),考虑了紧急情况下的减速率。转向指标,例如转向角反转率(SARR),关注了车辆在行驶过程中的转向角。 有一些工作Fitness functions for testing automated and autonomous driving systems和Fitness function templates for testing automated and autonomous driving systems in intersection scenarios提出了以一种优雅的方式组织和利用这些安全指标。此外,李等人提出了设计涉及更多因素的指标,例如场景、任务和自动驾驶系统功能之间的关系。
形式化规范
形式化规范使用时序逻辑语言来表达系统在运行过程中应该满足的性质;然后通过基于规范的监测,系统行为的满足度可以自动决定。在自动驾驶系统的系统级测试中,STL,它可以表达实时连续变量上的性质,是规范语言的合适选择。有一些工作采用STL作为规范语言,其中STL监视器被综合出来,用来判断自动驾驶系统的行为是否满足期望的安全性质。也有研究者利用形式化规范来表示驾驶规则和自动驾驶系统的行为,以检查它们之间的一致性。
变形测试
在系统级测试中,有研究者利用变形关系来区分真正的故障和误报。变形关系规定了自动驾驶系统在稍微不同的场景中的行为应该是相似的;否则,在这样的场景中发生的碰撞被认为是可避免的,因此是一个真正的故障。
测试充分性
在系统级测试中,测试的充分性体现在ADS测试场景的多样性上。
场景覆盖
直观地来说,如果所有不同类型的场景都被覆盖了,那么测试就是充分的。唐等人[252]根据地图的拓扑结构对场景进行分类。Kerber等人[253]根据场景的时空特征定义了一种距离度量,用于实现场景聚类。此外,仿真数据的时间、空间和因果信息可以进一步抽象为情境,用于覆盖更多的测试场景[254, 255]。
组合覆盖
与直接基于场景特征定义的上述覆盖标准不同,组合覆盖考虑了不同参数组合的覆盖,这些参数用于识别不同的场景。Tuncali等人[247, 248]提出了使用覆盖数组来生成自动驾驶系统测试中的场景。覆盖数组是软件测试中的一种特定机制,它保证了参数的t-路组合覆盖的满足。关于t-路组合覆盖的更多细节,请参见5.2.3节。郭等人[256]提出了场景复杂度的定义,并应用组合测试技术来生成更复杂的测试场景。舒等人[257]在变道场景中采用了三路组合测试方法,确保了生成的关键场景的高覆盖率。李等人[258]利用本体概念,即实体及其关系的表达,来描述自动驾驶系统的驾驶环境。然后将构建的本体与组合测试技术相结合,用于生成具有覆盖保证的具体场景。另一项工作[259]提出了一种基于t-路组合测试的场景生成框架,称为ComOpT,并发现了阿波罗系统的众多故障。此外,组合测试也被用于参考文献[260]中解决自动驾驶系统的回归测试问题。
讨论
基于搜索的测试(FUZZ)是测试整个自动驾驶系统最广泛使用的技术,有不同的关注点,例如研究测试输入和系统行为之间的关系[190–192],测试车道保持系统[26, 189, 193, 209]和测试用例优先级[199–201]。
虽然基于仿真的测试旨在解决现实世界测试的高成本问题,但它可能会反复模拟相同类型的场景,这也是一个耗时的过程。
因此,自适应压力测试[211, 212, 214, 216]和基于抽样的技术[217–219, 221, 223, 224, 228–230]被用来加速测试过程。
与感知和端到端模块的情况一样,对抗攻击[235–238]也被用于系统级测试,其目的是检测感知的漏洞,这些漏洞会影响整个系统的安全性。
在这些测试技术中,自适应压力测试还没有被广泛研究,但它在未来的自动驾驶系统测试中具有很高的潜力,因为它在工业的各个领域都很有效[269]。
系统级测试通常依赖于安全指标,例如时间和非时间指标(如表8所示)和变形关系[250],作为在测试过程中测量安全违规发生的预言。为了确保系统级测试的充分性,有两条工作线,即场景覆盖[252–254]和组合测试[247, 248, 256–260],它们提出了用于表征测试场景多样性的指标。 总体而言,在系统级测试中存在比模块级测试更多的工作。
总结:有大量的研究利用了不同的技术,例如,基于搜索的测试、自适应压力测试和基于采样的技术,用于在系统级测试ADS。此外,已经针对测试过程中的不同用途提出了许多度量,例如,它们被用来测量违反安全规定的发生,并且它们被用来表征测试场景的多样性。
混合现实测试
由于自动驾驶系统的现实世界测试的昂贵性,之前的大多数方法都是在软件仿真器中测试自动驾驶系统的。尽管现代仿真器可以很强大和高保真,但基于仿真的测试并不足以揭示自动驾驶系统的所有问题,因为仿真器和现实世界之间存在差距。作为一种折中,混合现实测试将基于仿真的测试与现实世界测试相结合。在本节中,介绍了几种特殊的测试方案,它们用物理组件替换了测试循环中的某些部分。具体来说,这些方案包括Hardware-in-the-Loop(HiL)、Vehicle-in-the-Loop(ViL)和Scenario-in-the-Loop(SciL)。
Hardware-in-the-Loop
Hardware-in-the-Loop测试通常将真实的ECU硬件引入到测试循环中,如图4中的绿色框所示。有一系列的工作[270–273]采用了这种测试方法。陈等人[270, 271]提出了一个硬件在环测试平台,它可以利用OpenStreetMap[274]来模拟大规模场景中的多智能体交互。Brogle等人[272]基于Carla和ROS构建了他们的硬件在环平台,它在车辆动力学和传感器数据输出方面实现了高保真度。高等人[273]设计了另一个用于AEB测试的硬件在环平台,并发现AEB功能在硬件在环测试中的性能接近于真实道路测试。
Vehicle-in-the-Loop
Vehicle-in-the-Loop测试的工作原理是将一个同步的虚拟场景集成到一辆真实的车辆中,如图4中的灰色框所示。我们收集的以下工作[275–279]都是基于这个思想的。陈等人[275]提出了一个车辆在环测试平台,它可以根据相应的高清地图重建场景。为了模拟更真实的场景,这些工作[276–278]将流行的交通仿真器,如SUMO[280]和VISSIM[281],集成到车辆在环测试循环中。Stocco等人[279]利用DonkeyCar平台[282]构建了一个1:16比例的汽车,它由端到端驾驶模型控制。他们在一个封闭的跑道环境中测试这些驾驶模型,并研究了仿真和现实世界之间故障的可转移性。
Scenario-in-the-Loop
Scenario-in-the-Loop测试通过将更多的真实组件,如行人假人,集成到循环中,来缩小仿真器和现实世界之间的差距,如图4中的蓝色框所示。Szalay等人[283]首先提出了场景在环测试的概念,并在后续的工作[285]中基于SUMO和Unity[284]开发了一个场景在环测试平台。Horvath等人[286]通过比较这种方法与车辆在环测试的实现过程来研究场景在环测试。作者发现,这两种测试方法有相同的基础,但场景在环测试仍处于早期阶段。
仿真测试和实际测试的对比
测试用例的真实性
在基于仿真的测试中,有一个问题是由测试算法生成的导致系统故障的虚拟场景可能永远不会发生在现实世界中。例如,仿真器创建了一系列的交通参与者,但其中只有一部分是真实可能发生的。 有一系列的工作旨在弥合这个差距,从而生成自然的场景用于自动驾驶系统测试。Nalic等人[288]提出了一个使用两种仿真工具,CarMaker(用于车辆动力学)和VISSIM(用于交通仿真)的协同仿真框架;他们的框架可以根据从真实数据中衍生出来的校准过的交通模型生成场景。在他们后来的工作[289]中,应用了一种压力测试方法,它已经在6.1.1节中介绍过,在协同仿真环境下增加了检测到的关键场景的数量。Klischat等人[290]利用OpenStreetMap提取真实世界的道路交叉口,并与SUMO结合生成逼真的交通场景。温等人[291]关注在自车附近的特定区域触发事件,并使用基于卷积神经网络(CNN)的选择器来选择那些能够实现更真实结果的场景代理。 以下工作[292–296]专注于从公开的事故报告中重建场景。Mostadi等人[295]利用一种距离度量,即曼哈顿距离,来将虚拟场景与真实场景对齐。计算机视觉算法,即目标检测和跟踪,在参考文献[292, 296]中被用来从事故视频中提取车辆的轨迹。Gambi等人[189, 293, 294]利用自然语言处理技术提取相关信息,然后计算抽象轨迹来重建事故。实验结果表明,该方法能够准确地重建公开报告中的事故,并且生成的测试用例能够暴露开源自动驾驶系统,即DeepDriving[207],的错误。 还有一系列工作[297–300]专注于缩小训练过程中的现实差距。通过包含增强数据、小型汽车和真实世界轨道等组件,他们可以生成更真实的情况来训练自动驾驶感知模型或强化学习算法。
仿真器的真实性
Antkiewicz等人[301]进行了一项关于不同仿真水平的测试评估的比较研究。在他们的工作中,作者研究了基于仿真的测试、混合现实测试和现实世界测试在两个场景中的应用,即跟车和替代行人过马路。他们提出了各种指标,例如真实性、成本、敏捷性、可扩展性和可控性,并基于这些指标比较了不同的测试方案。作为他们的结论,他们定量地展示了测试方案之间的性能差异:虽然现实世界测试在真实性方面更好,但它比基于仿真的测试更昂贵,也更缺乏敏捷性、可扩展性和可控性;混合现实测试的性能处于它们之间。Borg等人[302]研究了在不同仿真器中测试自动驾驶系统,他们利用基于搜索的测试技术在两个仿真器中生成场景,即PreScan[303]和Pro-SiVIC[304]。他们发现了测试输出的显著差异,例如,他们检测到了不同的安全违规。因此,他们建议在未来涉及多个仿真器来进行更稳健的基于仿真的测试。 虽然基于仿真的测试不能达到与现实世界测试相同的真实性,但基于仿真的测试的结果在多大程度上可以对现实世界测试有益?这个问题在参考文献[305]中进行了研究,作者在其中进行了基于仿真的测试,以识别关键场景并将它们映射到现实世界环境中。他们的关键见解表明,62.5%由仿真器检测到的不安全场景转化为真实碰撞,93.3%与仿真器一起的安全场景在现实世界中也是安全的。另一个问题是,仿真器生成的数据集是否可以替代基于DNN的自动驾驶系统测试的现实世界数据集,这已经在参考文献[306, 307]中进行了研究。此外,他们还比较了离线测试(例如模块级测试)和在线测试(例如系统级测试)在其优缺点方面。基于DNN的自动驾驶系统上的实验表明,在两个数据集上平均预测误差差异小于0.1,这意味着仿真器生成的数据集可以作为现实世界数据集的替代品。在线测试比离线测试更适合基于DNN的自动驾驶系统测试,因为在线测试可以检测到更多错误,即那些随时间累积而产生的错误,而离线测试则不能。Reway等人[308]通过在三种不同环境下(即一个真实试验场和两个仿真软件)对一个目标检测算法进行测试,评估了仿真与现实之间的差距,并考虑了四种天气条件。通过考虑每个平台上诸如精度和召回率等指标来定量计算差距。他们的一个实验结果是,在夜间和雨天条件下,真实和仿真域之间的差距大于白天条件下的差距。
回答RQ2
90多篇专门针对自动驾驶系统的系统级测试的论文中,那些模块级测试技术,如基于搜索的测试、抽样和对抗攻击,也被广泛用于寻找由系统级不同模块之间的协作引起的故障。此外,还提出或利用了更多的指标,用于促进测试过程。
另一个发现是,有30多篇论文专注于缩小仿真和现实世界环境之间的差距,例如,通过将真实组件引入到测试循环中,或者通过比较基于仿真的测试和现实世界测试。
与模块级测试类似,自动驾驶系统的系统级测试仍然存在一些开放的挑战。例如,由于测试过程中的系统执行既昂贵又耗时,因此需要在未来探索如何加速测试过程。