自动驾驶文献阅读:《BehAVExplor: Behavior Diversity Guided Testing for AutonomousDriving Systems》

写在前面

        这篇文章主要是对于《BehAVExplor: Behavior Diversity Guided Testing for Autonomous Driving Systems》这篇科研性质的文献进行阅读与总结。文章于2023年7月17日至21日发表于ACM SIGSOFT国际软件测试与分析研讨会(ISSTA '23,CCF-A),主要介绍了一种新颖的行为引导模糊测试技术,设计出一种名为BehAVExplor的系统,旨在提高自动驾驶系统测试的多样性和有效性。总体来看,所选文章在自动驾驶系统测试领域提供了创新的视角和方法,对于提高系统安全性具有重要的研究价值。

        笔者因为对自动驾驶系统测试技术的研究兴趣选取了这篇论文,如果你是自动驾驶、软件测试或相关安全领域的研究人员,可能会有一定的借鉴意义。

关键词:自动驾驶系统;行为多样性;场景生成;模糊测试;安全仿真

原文链接:doi: 10.1145/3597926.3598072

目录

写在前面

摘要

研究背景

ADS仿真测试

正文内容

总体架构

总结与思考

相关资源

基于数据变异的类似文献

SAMOTA

DriveFuzz

AV-Fuzzer


摘要

        对自动驾驶系统(ADS)进行测试是确保自动驾驶车辆可靠性和安全性的关键任务。现有的方法主要集中在搜索安全违规行为,而忽略了生成测试用例的多样性,这可能导致生成许多冗余的测试用例和失败,进而降低测试性能并增加故障分析成本。

        在本文中,作者提出了一种新的行为引导模糊测试技术(BehAVExplor),用于探索测试中自动驾驶车辆(即由被测试的ADS控制的车辆)的不同行为,并检测多样化的违规行为。具体来说,设计了一个高效的无监督模型,称为BehaviorMiner,用于表征自动驾驶车辆的行为。BehaviorMiner从给定场景中提取时间特征,并执行基于聚类的抽象,将具有相似特征的行为分组到抽象状态中。如果一个新的测试用例触发了新的行为(例如,覆盖了新的抽象状态),它将被添加到种子语料库中。由于行为多样性和一般违规反馈之间可能存在冲突,我们进一步提出了一种能量机制来指导种子选择和变异。种子的能量量化了它的表现有多好。我们在Apollo(一个工业级的ADS)和LGSVL模拟环境中对BehAVExplor进行了评估。实证评估结果表明,BehAVExplor可以有效地找到比现有技术更多样化的违规行为。


研究背景

ADS仿真测试

        ADS测试方法主要分为两类:道路测试和基于仿真的测试。虽然道路测试对于确保自动驾驶车辆(AVs)在现实世界中的安全性是不可或缺的,但其成本通常较高,且难以全面覆盖自动驾驶车辆需要安全应对的各种情况(例如,不同的事故场景)。与此相比,基于高保真仿真器的测试(如LGSVL和CARLA),允许开发人员和工程师系统地评估ADS在可能遇到的更广泛具体场景中的表现。然而,由于道路条件的开放性和不可预测性,例如天气、交通流量和车辆行为,存在无限的具体场景,这就构成了AV测试的一个关键挑战:如何有效地发现这些不同的场景。

CARLA仿真器的测试

        为了高效地生成关键场景,研究者们已经提出了多种ADS测试方法,包括数据驱动方法、Agent模型和引导搜索方法。这些方法通常设计风险评估指标,比如碰撞时间和停车距离比例,以指导关键场景的生成。尽管如此,现有技术主要集中于发现失败场景(即违规情况),而对于生成场景的多样性考虑不足。一些有潜力生成新的关键场景并导致新的违规行为的种子测试用例被忽视了,限制了测试的有效性并增加了故障分析的成本。


正文内容

总体架构

BehAVExplor的工作流程如下:

  1. 初始化种子语料库:开始时,有一个初始的种子语料库,包含一些基础的测试用例。

  2. 能量机制选择种子:使用基于能量的机制从语料库中选择一个种子进行变异,能量反映了种子生成失败测试用例的潜力。

  3. 自适应变异:对选定的种子进行变异,生成新的测试用例。

  4. 仿真模拟:将新生成的测试用例在仿真环境中执行,收集ADS的行为和执行结果。

  5. 行为分析:使用BehaviorMiner分析新测试用例的行为特征,并与现有测试用例的行为进行比较。

  6. 评估和反馈:如果新测试用例展现出新的行为或更低的违规度,它将被添加到种子语料库中,用于后续的变异和测试。

  7. 迭代过程:这个过程不断迭代,直到满足某个停止条件,如时间限制或测试用例数量限制。

        可以见得,作者所构建的 BehAVExplor 在“种子选择-变异-仿真-行为挖掘”的工作流内,采用了在线测试的方法。通俗来说,就是边生成场景测试用例,边进行仿真模拟查看效果。这种在线和迭代的测试方法能够逐步探索ADS的行为空间,并有效地发现多样化的违规情况。如果方法得当的话,这里允许迭代生成偏好,或者动态的进行一些人为干预,对提高测试的覆盖率有一定好处。缺点就是相对占用资源,仿真测试依赖于场景生成,所以如果仿真过程较慢会影响生成场景的进度。

       算法描述如下:

       

Fuzzing过程设计

这里截图进行摘要分析。和摘要描述一致,可与上述算法进行参考对应。

行为距离计算

其实就是新老行为之间的差异。

用的方法就是预先通过时间对齐,对应好同一时间尺度之后,计算几类轨迹的相似程度。

从而得到两个抽象状态序列之间的行为距离,具体的计算方法如下 :

这里延伸一下Hamming distance:

Hamming distance(汉明距离)是一种用于度量两个等长字符串之间差异度的指标,得名于理查德·汉明(Richard Hamming)。在信息论中,它用来衡量两个等长字符串之间对应位置上不同字符的数量,这个数字也被称为汉明距离的“距离值”。

例如,如果我们有两个5位的二进制字符串:

  • 字符串A: 10101
  • 字符串B: 11011

它们之间的汉明距离是3,因为有3个位置上的字符不同(第一个、第三个和第五个位置)。

意思就是一个个对齐后逐帧对比的

违规度量计算

这部分大概意思就是违规行为对于理想状况的偏差。或者说,在仿真器中违规了多少多少米,真就是字面意思上的“违规距离”。(我之前一直以为是违规动作和聚类中心之间的各项属性的加权和,看来实际就只是“ego车”到这个位置挨上什么了,有没有到位等等,无非是做了层量化)


总结与思考

1.具有点拨性的内容

  • 筛选场景时应用了增量测试(incremental testing)的特点,而且这个表达比较好,值得借鉴。
  • 给出的Alg参考格式,对写文章有帮助
  • 对行为的Fuzz,采样思想比起连续性的分析,要显著降低技术门槛,而且大幅优化了算力。
  • 兼顾多样性和有效性(我一般喜欢管多样性叫泛化深度)

2.一点批判

  • 比起ScenarioFuzz,有去冗余的操作,但在重复性排除方面其实做有空间。
  • 变异的种类不是很多,不过本身聚焦于 Behavior fuzzing,无可厚非。
  • 给出的Alg参考格式,对写文章有帮助。


相关资源

原文链接:doi: 10.1145/3597926.3598072

基于数据变异的类似文献

SAMOTA

Fitash Ul Haq, Donghwan Shin, and Lionel Briand. 2022. Efficient online testing for DNN-enabled systems using surrogate-assisted and many-objective optimization. In Proceedings ofthe 44th international conference on software engineering.811–822.

AV-Fuzzer

[21] Guanpeng Li, Yiran Li, Saurabh Jha, Timothy Tsai, Michael Sullivan, Siva Ku-mar Sastry Hari, Zbigniew Kalbarczyk, and Ravishankar Iyer. 2020. AV-FUZZER:Finding Safety Violations in Autonomous Driving Systems. In 2020 IEEE 31stInternational Symposium on Software Reliability Engineering (ISSRE). 25–36.AV-FUZZER: Finding Safety Violations in Autonomous Driving Systems | IEEE Conference Publication | IEEE Xplore

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值