引用
Hutchison, Casidhe, Milda Zizyte, Patrick E. Lanigan, David Guttendorf, Michael Wagner, Claire Le Goues, and Philip Koopman. "Robustness testing of autonomy software." In Proceedings of the 40th International Conference on Software Engineering: Software Engineering in Practice, pp. 276-285. ACM, 2018.
一.背景自治系统和机器人越来越多的存在,对于意外输入如何保持它们的安全很重要。虽然长期研究传统系统的鲁棒性测试,但是自治系统的鲁棒性测试是相对未知的领域。缺乏有效的方法来测试自主系统。
鲁棒性测试是黑盒测试的一种变体,用于评估系统的鲁棒性。自治系统是:有状态的、暂时的、分布式的信息物理系统。下面要提到的ASTAA是以Ballista(一种有名的测试技术)的设计原则为开发基础的。
二.解决的问题提出了autonomy架构的自动化压力测试(ASTAA),这是一个自动生成并运行测试以有效地发现现实世界中的工业自治系统中的缺陷的系统。
三. 方法ASTAA是一个鲁棒性测试框架,旨在自动发现自治系统中的安全问题。在高层次上,ASTAA在组件接口注入异常值,以测试这样一个系统中模块的鲁棒性。然而,ASTAA还包括一些必要的关键特性,以便有效地将传统的健壮性测试目标对准自治系统:使用安全不变量,将消息作为注入接口,实施拦截测试。ASTAA测试的过程主要分三个阶段:
①首先使用被测系统(SUT)的现有文档手动生成一个ASTAA测试规范。
自治系统环境中的“安全操作”不仅包括避免崩溃或挂起,还包括维护SUT的安全关键属性。系统安全不变量必须始终有效,系统才能被认为是安全的(例如,“无论输入是什么,如果急停开关接通,系统都不应移动”)。
②然后将测试规范与异常数据库中的信息结合起来,生成一组测试用例。
给定一个测试规范,ASTAA自动生成测试用例描述,遵循Ballista从异常数据库注入虚假数据的方法。ASTAA实现了拦截测试,它“拦截”(更改)正在运行的系统中的特定消息或字段,而不改变消息中的其他字段。
③ASTAA测试运行器自动执行SUT上的测试用例,监视不变的冲突,并记录结果。
ASTAA在运行SUT及其子系统时通过监视系统行为来检测安全违规和崩溃/挂起。
ASTAA提供测试日志来描述导致错误的系统运行的总体情况。
ASTAA架构
四.结果
在五年的时间里,将ASTAA应用于17个这样的系统,包括仿人机器人,工业机械手,无人驾驶飞机,地面和海上车辆,发现了数百个bug。除了告知测试方法之外,这些系统还允许定量和定性地描述这些不同项目中常见的错误类型。例如,发现了一个移动机械手的缺陷,它可能导致机械臂和移动底座之间的碰撞。在另一个例子中,执行了无人地面车辆的安全临界速度限制,并确定了可能违反速度限制的故障模式。
结果的有效性受到了几个威胁。首先,手动分类错误,因此人的偏见可能会影响结果。通过汇总三位专家的评估结果来降低这种风险,他们保守地达成了共识。ASTAA中的实现错误是一个相关的威胁,是虚假的错误报告可能会影响结果。但是,总的来说,ASTAA发现的bug是通过健壮性测试文献中成熟的监控技术来识别的,或者通过ASTAA开发团队外部SUT创建者/维护者定义或验证的安全不变量来识别的。ASTAA已经成功地应用于许多实际系统中,并且其报告的错误已经被这些独立系统的开发人员验证,这表明相关实现错误的风险很低。
对比:相比之下,ASTAA测试框架是为自治系统显式设计的,考虑到它们的各种属性。与基于模型的模糊测试工具不同,它不受输入特性的影响,因为它不依赖模型,而是截取实时数据。故障模型也比chu的工作扩展得多,控制回路的闭合允许作为系统稳健性的一部分来测量崩溃(中止)。
五.总结在自治系统中,面对意外输入的鲁棒性尤为重要。然而,自治系统有许多与经典软件系统相同和不同的方面,这些方法对于如何测试它们的健壮性具有重要的意义。
ASTAA,这是一个建立在经典技术基础上的工具,但是它包含了一些新颖的东西,可以让它解决测试自治系统的具体挑战。使用ASTAA测试了17个跨不同领域的系统稳健性弱点。定性和定量地分析在这些系统的一个子集中发现的缺陷,支持了ASTAA背后的许多设计决策,包括它从先前的健壮性测试方法中获得的某些原则。本文中的大部分讨论旨在作为研究、开发和测试自治系统的实用指南。然而,得到的一个更广泛的教训是不仅可以对自治系统进行鲁棒性测试,而且这样做可以发现很容易激活的漏洞。在一个案例中,ASTAA发现了一个关键缺陷,它可能导致机械手的角度设置为一个无限的负角度。这将允许机械手碰撞-并损坏机器人底座。开发人员最初忽略了我们的bug报告,认为输入案例不可信。几周后,他们在实际的机器人上意外触发了这个错误,导致机械手严重损坏了一个昂贵的末端执行器。