移动机器人

当前位置:前位置:首页 > 移动机器人
全部 2020

MoFuzz:用于测试模型驱动软件工程工具的模糊器套件

时间:2022-03-25   访问量:0


引用

H.L.Nguyen,N.Nassar,T.KehrerandL.Grunske,MoFuzz:AFuzzerSuiteforTestingModel-DrivenSoftwareEngineeringTools,202035thIEEE/ACMInternationalConferenceonAutomatedSoftwareEngineering(ASE),2020,pp.1103-1115.

摘要

模糊测试的目的是通过将自动生成的数据输入到被测试的程序中来发现意外的程序行为。然而,使用模糊来测试模型驱动软件工程(MDSE)工具的应用仍然受到限制,因为现有的模糊器难以提供结构化的、良好类型的输入。我们提出了三种不同的模糊MDSE工具的方法:一个是基于图语法的模糊器,另外两个是基于覆盖引导的和基于突变的模糊器的两种变体,它们使用不同的模型突变算子集工作。我们对一组真实世界的MDSE工具的评估表明,我们的方法可以优于标准模糊器和模型生成器的模糊能力。此外,我们发现,我们的每一种方法在故障发现能力和覆盖被测试系统的不同方面的能力方面都有自己的优缺点。因此,这些方法相互补充,形成了一个用于测试MDSE工具的模糊器套件。

1.引言

模糊测试自动生成大量的输入并将它们输入到被测试程序中,以发现意外的程序行为并评估程序的可靠性。自Miller首次提出以来,通过AFL这样的工具进行模糊处理,由于其概念上的简单性和被证明的有效性而被广泛采用。各种先进的方法已经被提出通过指导输入生成过程来提高模糊器的性能。通过包含目标输入字符串突变或特定于问题的生成器,已经进行了进一步的改进。

然而,模糊技术在测试模型驱动软件工程(MDSE)工具方面的应用还很有限。这是由于现有的模糊器难以提供结构化的、良好类型的输入,即符合由给定元模型和底层建模框架诱导的类型和一致性约束的模型。

在本文中,我们研究了基于Eclipse建模框架(EMF)的MDSE工具的模糊化,EMF是OMG的基本元对象工具(EMOF)的参考实现,EMOF在开源的MDSE环境和工具链中已经成为公认的标准。使用EMF模型作为输入的工具有一个处理管道,如图1所示。解析阶段将模型从某种外部表示转换为内部表示,根据工具的核心功能,内部表示可以很容易地进行处理。通过解析阶段的模型在语法上是有效的,因为它们遵守EMF施加的基本一致性约束,并且它们是给定元模型的正确类型。语法上有效的模型可能需要通过验证阶段,检查进一步的语义一致性约束,特别是多重约束或元模型定义的任意格式良好的规则。每个阶段都可能拒绝输入模型,并且工具的核心功能仍未经过测试。因此,为了有效地测试基于EMF的工具,模糊器必须生成至少符合EMF和类型约束的输入模型,而现有的模糊方法都无法满足这一需求。


图1:基于EMF的MDSE工具加工管道

我们提出了MoFuzz,一个用于测试MDSE工具的模糊器套件,通过借鉴两个相互独立发展的研究领域来解决这一挑战,即(i)突变和基于生成器的模糊,(ii)自动化模型生成。前者提供了指导模糊器有效覆盖被测系统的灵感,后者提供了生成有效模型的技术。

我们提出三种不同的模糊器来生成模型,作为模糊MDSE工具的输入:(i)一一种基于图形语法的模糊器,它试图尽可能快地覆盖输入域的不同方面,以及两种基于突变的方法,其目的是使用(ii)定义的一组自定义EMF编辑API的突变,或者(iii)一组指定为模型转换规则的编辑操作,这些规则是从给定的元模型中生成的。虽然已经对使用上下文无关语法的文本输入格式进行了研究,但我们的方法集成了基于实例生成图语法概念的EMF模型生成器。我们的基于变异的模糊器在某种意义上受到指导,即有希望的种子输入是通过一个反馈循环来选择的,该反馈循环利用了来自被测系统的覆盖率信息。它们的变异点在于模型突变所保持的一致性水平。

我们已经在一组基于EMF的真实MDSE工具上评估了我们的模糊方法。实验结果表明,所有方法的模糊能力都优于现有的模糊器和自动模型生成器。此外,我们发现,我们的每一种方法在故障发现能力和覆盖被测试系统的不同方面的能力方面都有自己的优缺点。因此,这两种方法相辅相成,形成了一个用于测试MDSE工具的模糊器套件。

2.方法

2.1综述

图2给出了我们称为MoFuzz的模糊器套件的总体概述。它以输入域的元模型和待测试的MDSE工具作为输入。在内部,我们构建在JQF之上,这是一个针对Java的反馈导向的模糊测试框架。JQF覆盖率,并使用自定义输入生成器提供的输入反复执行测试中的程序。此外,JQF提供了各种模糊算法的实现,包括Zest算法,它将在我们的评估中用作基线技术。


图2:MoFuzz的高层概况

我们提供三种不同的输入生成策略:(i)一种基于图语法的方法,利用最近推出的高效模型生成器,尽可能快地涵盖输入领域的不同方面;以及两种基于突变的方法,目的是通过使用(ii)一组构建在通用EMFEditAPI之上的自定义突变来增量演进输入,以练习深度路径,或者(iii)一组保持一致性的编辑操作(CPEOs),指定为模型转换规则,使用相关方法和支持工具集从给定的元模型生成。

2.2基于发生器的模糊方法

使用基于生成器的模糊方法的主要目的是尽可能快地生成覆盖输入域不同方面的模型,。尽管基于求解器的生成器提供了最强的一致性保证,但现有工具对于我们模糊化的目的来说效率太低;他。在剩下的模型生成器中,Nassar最近提出的EMF模型生成器代表了一致性和性能之间最有希望的折衷。生成的模型是有效的EMF模型,它们具有适当的类型,并且遵循由元模型定义的任意多重性约束的良好格式规则。此外,该工具可以在几分钟内生成大型有效模型。

2.2.1Mofuzz的生成策略。为了模糊化,我们将模型增加阶段配置为两种产生规则:额外节点创建和额外边缘创建。前者创建一个特定类型的ASG对象及其来自合适容器的传入包含引用,后者在两个合适的现有对象之间插入一个跨树引用。这些规则是针对元模型的每个元类和引用类型派生的,并配备了应用程序条件,以防止引入上限违规并保留EMF约束。所有的规则都被包装到一个所谓的独立单元中,该单元以非确定性的方式迭代地执行其中的一个规则。

从我们使用基于生成器的模糊器的总体目标出发,这种策略背后的直觉如下:规则被设计为原子性的,也就是说,它们执行基本的更改,因此可以生成模型的所有可能结构。通过构造,规则覆盖所有元模型类型。因此,他们可以广泛地研究并生成给定元模型的所有可能的有效EMF模型。此外,查找规则匹配是非常高效的,因为它需要找到一个小型的图形模式。分类成两种不同类型的规则增加了找到适用规则的可能性。此外,它们的原子设计增加了以任何顺序组合它们的灵活性。最后,该策略从头开始模型生成过程,因此,它独立于给定种子模型的质量,原则上,种子模型可以作为输入输入到EMF模型生成器中。这种策略可以有效地生成大型模型。然而,在MoFuzz中,我们选择了一个限制模型大小的设置,以避免在测试中执行MDSE。

2.3基于变异的模糊方法

在这种方法中,我们建议采用在自动故障检测中最广泛使用的技术之一,即覆盖引导灰盒模糊(CGF),到MDSE领域。基于一组初始输入,CGF迭代地对输入应用各种突变以产生新的测试输入。关键的想法是只保留那些增加覆盖率的新输入,从而以迭代的方式有效地探索程序空间。特别地,我们建议将CGF的实施分为两个阶段,生成阶段和突变阶段:

在生成阶段,生成随机种子模型,直到实现预配置的目标元模型覆盖率。我们的目标是要有一套不同的种子输入,涵盖被测试项目的不同方面。但是,我们只使用覆盖在测试中的MDSE工具的新部件的最新输入来初始化我们的输入队列。这种方法背后的直觉是,第一个输入通常只覆盖可以轻松到达的程序位置。相反,以后仍然能够在这些微不足道的路径之外执行额外覆盖的输入可能更值得保留。

在突变阶段,从队列中选择一个输入模型,并对其应用一组突变。如前所述,如果突变的输入执行新的覆盖率,它也会被添加到队列中,否则它将被丢弃。此过程将重复进行,过程。然而,利用CGF的传统模糊器通常对二进制/文本输入进行操作,因此在比特级别上应用突变,这对于实例模型的输入领域不是很有效。因此,我们需要直接在模型级别上操作的突变操作符。

我们提供了上述两阶段方法的两个具体实现,一个使用通用EMFEditAPI,另一个基于基于规则的突变。

2.3.1基于通用EMFEditAPI的自定义突变。对于第一种技术,我们使用不同类型的模型突变来解决两个阶段中每个阶段的不同需求。由于突变操作符是基于EMFEditAPI实现的,我们将这种技术称为MoFuzz-cgf-emfedit。

(1)生成阶段:对于生成阶段,我们建立在NaoMod团队开发的现有EMFRandomInstantiator之上,NaoMod团队以前被称为AtlanMod。与Mougenot的方法类似,EMF随机实例化器通过利用给定元模型定义的包含层次结构,通过两个步骤随机生成EMF模型:首先,包含树以深度优先的方式填充随机初始化的对象,直到达到预配置的目标大小。树遍历可能会在随机点上被修剪,或者达到预先配置的最大深度。结果是一个符合元模型定义的包含层次结构的模型。其次,跨树引用是基于分部模型中的可用类型创建的。这是通过遍历模型中的每个对象并设置存在合适相反对象的交叉引用来完成的。

为了在生成的种子模型中获得实例化模型结构的高度多样性,我们调整了原始的随机选择策略,通过优先化元模型定义的未公开类和引用类型。这在基于语法的模糊器中很常见,这些模糊器操作于派生树,其中先前发现的扩展规则被优先化以实现更高的语法覆盖率。

(2)突变阶段:基于EMFEditAPI的突变操作于模型中的单个对象,因此不需要通过计算密集的匹配算法来发现复杂的图形模式。简单来说,以下突变已经实现:增加对象,删除对象,改变属性,取消设置属性,改变交叉引用,替换子树。

我们的默认实现在选择一个随,按照以下顺序优先选择突变操作符:(1)添加对象,(2)更改/取消设置属性和替换子树,(3)更改交叉引用,(4)删除对象。

与基于求解器或基于图语法的方法相比,基于EMFAPI的操作更高效,因为它们不需要执行任何昂贵的约束求解或图转换操作。然而,只考虑基本的一致性约束,即一致的包含层次结构和适当的类型;任何进一步的约束都可能被违反。我们可以容忍这种情况,因为使用这种技术,我们更喜欢速度而不是一致性。我们依靠进化算法过滤掉格式太不规范的输入模型,从而不能暴露MDSE测试工具的核心功能的新部分。

2.3.2元模型基于规则的突变。我们的第二个覆盖导向模糊器,在图2中被称为MoFuzz-cgf-cpeo,它使用基于规则的模型转换,这些转换是从给定的元模型中派生出来的,作为模型突变。转换规则生成器最初设计的目的是生成编辑操作的声明性规范,这些操作在可视化模型编辑器中可以作为编辑命令使用。这些编辑操作必须保持标准可视编辑器所强制的一致性级别,标准可视编辑器包括基本类型和EMF约束。此外,为了保持模型处于图形显示状态,还强制执行了一组受限制的多重性,特别是下界。与前一节中介绍的自定义突变相比,我们使用这种保持一致性的编辑操作进行模糊化的主要直观感受是在更高的一致性级别上合成模型,因此可以更可靠地通过图1所示的模型加载管道。

一般类型的CPEOs类似于我们定制定义的突变,包括创建、删除、移动和更改模型元素的操作:

与应用基于API的突变策略相反,我们在所有类型的CPEOs上选择均匀的概率分布来选择下一个突变。这种选择背后的基本原理是,节点删除和移动不会导致剧烈的变化,就像我们基于api的突变一样。这是因为指定CPEO的编辑规则是由转换引擎通过检查所谓的悬空条件来应用的,这些条件是由双推出方法对图转换施加的。如果一条规则会导致ASG中的悬空引用,悬空条件就会阻止它的应用,这意味着我们不能在CPEO指定的单个转换步骤中删除较大的子图。较大的子图只能以逐步删除的方式删除,从包含树的叶节点开始。

3.实验评估

3.1研究设计

3.1.1实验对象。理想的评估形式是在一个已建立的基准上评估我们的模糊器套件的性能,这是传统模糊器的惯例,也是声音实验评估所需要的。然而,这些基准都不包括作为被测程序的MDSE工具,而且目前还没有用于模糊测试MDSE工具的基准,这是我们在这项工作中的先锋。为此,我们选择了一组真实世界的MDSE工具作为实验对象。所有工具都是公开可用的,在Java和EMF的基础上实现,并提供一个合适的测试驱动程序作为模糊的入口点:EMF2GraphViz、UMLValidator、UMLValidator、UML2OWL、EMFCompare、EcoreUtil。

所选的主题涵盖了各种不同的特定于MDSE的任务和应用程序,包括模型到模型和模型到代码的转换、模型验证、模型比较和合并,以及用于实现建模工具的基本库。此外,我们的主题选择包括通用工具和特定于语言的工具,后者基于UML元模型的基于EMF的实现。我们选择的所有科目都在积极发展中,在MDSE社区中大量使用,它们有超过十年的发展历史。因此,我们可以假设所有的研究对象都有一定程度的成熟;它们不太可能包含浅层bug,通过模糊处理将错误查找变成一项重要的任务。

3.1.2模糊套件的配置。虽然我们的模糊套件可以使用任何基于EMF的元模型来对通用工具进行模糊测试,但在我们的实验中,我们坚持使用UML元模型来实现这个目的,以便在不同的实验对象之间进行更好的比较。

至于算法参数,我们为生成的模型设置最大目标大小为500。对于基于突变的模糊器,我们将其输入队列的大小限制为最多存储50个执行新程序部件的模型。

3.1.3基准选择。我们选择Zest和EMFRandomInstantiator作为比较基准的基线。它们代表了结构感知模糊和自动模型生成这两个研究领域的最新工具,我们在本文中集成了它们。

3.1.4实验次数和重复次数

由于模糊的基本随机性质,模糊器的性能可以在多个运行中变化。为了解释这一点,每个受试者进行了30次试验。结果以平均值和标准差报告。此外,还进行了统计检验,以确定观察到的任何差异是否具有统计学意义。

研究1天不等。在这个评估中,使用了一个1,因为初步的测试运行显示,,几乎所有的测试对象的地图覆盖(见下文)趋于稳定。

3.2研究问题

l问题一(覆盖率):与两种基线方法相比,MoFuzz在模糊MDSE?

l问题二(故障探测):与两种基线方法相比,MoFuzz是否可以在模糊MDSE?

3.3实验结果

3.3.1问题一:覆盖率结果。为了评估覆盖率,我们使用JQF框架提供的地图覆盖率度量。由于在模糊测试期间要执行大量的程序,因此计算每次运行的覆盖率应该尽可能地轻量级。


图三:平

图3绘制了每个主。总体结果报告在表1中。结果表明,对于所有基准测试对象,除了UML2Java,我们提出的一种或多种技术能够显著优于基线方法。相反,所有方法都可以在UML2Java上执行得同样好,与其他方法相比,UML2Java是一个相当简单的主题。


表1:平均地图覆盖后130次试验

总体来说,MoFuzz-emf-modelgen和Mofuz-cgf-emfedit在所有技术中表现最好,Mofuz-emf-modelgen通常拥有最快和最高的总体地图覆盖。虽然MoFuzz-cgf-cpeo能够在大多数受试者中优于AtlanMod,但这种改进通常不足以超越Zest。

3.3.2问题二:崩溃探测。表2展示了我们在实验评估过程中遇到的崩溃。


表2:找到实验中发现的每次


图4:每种方法发现的崩溃数

总的来说,MoFuzz模糊器套件发现了12个崩溃,而合并的基线只能暴露其中的一个子集(8个崩溃),如图4所示。虽然一些发现的崩溃可能具有相同的异常类型,但我们的每个模糊器也能够触发一个独特的崩溃,这是任何其他方法都没有覆盖到的。

4.结论和未来工作

在本文中,我们提出了MoFuzz,一个针对模型驱动软件开发(MDSE)中模糊测试工具问题的模糊测试套件。该套件包括一个基于图形语法的模糊器和两个基于覆盖引导的突变模糊器的变体。

我们的实验结果是双重的。首先,我们可以证明MoFuzz套件中的所有模糊器都可以显著优于现有的标准模糊器和模型生成器,以覆盖测试中的MDSE工具及其故障检测功能。其次,我们的实验结果表明,MoFuzz中的模糊方法确实有各自的优点和缺点。因此,模糊器相互补充,形成了一个用于测试MDSE工具的模糊器套件,有助于建模工具的成熟。

未来的工作将集中在进一步增强MoFuzz算法上。种子生成方法可以为MoFuzz提供高质量的种子语料库。这些方法的一个更直接的替代方法是进一步调整我们的实例生成算法,以专注于生成意外的、稍有畸形的输入,忽略所需的引用、设置无效的属性值等。我们还想研究将基于生成器和突变的模糊器更紧密地整合的潜在好处。一方面,由于EMF模型生成器(它是我们基于生成器的模糊器的基础)可以与种子输入模型一起工作,因此它可以与JQF框架的反馈循环集成,以实现更具有覆盖率指导的行为。另一方面,它可以用来为两个基于突变的模糊器生成种子输入,目前这两个模糊器的工作分为两个阶段创造自己的种子输入用于突变。

此外,我们打算探索EMF模型生成器提供的其他生成策略的模糊特性,以生成不同的和巨大的模型。最后,我们打算扩大我们的实验,包括进一步的MDSE工具与不同类型的模型,以加强我们的实验结果的外部有效性。

致谢

本文由南京大学软件学院2021级硕士曾鹏程翻译转述、肖媛审核。

上一篇:移动机器人所用电机,移动机器人研究结论与展望,移动机器人的参考文献,2021世界智能网联汽车大会未来汽车开发者大会在京召开

下一篇:Syrius炬星联手北大信研院智能机器人实验室正式挂牌

返回顶部