本文是一篇工程硕士论文,本文分析了对存在测试oracle问题的程序进行错误定位的难点和挑战,总结了目前已有的基于模型转换程序的错误定位工作,简单分析了利用MT对模型转化程序进行错误定位的优势和不足。
第 1 章 绪论
1.1 研究背景与意义
随着现代化信息技术和互联网的快速发展,计算机软件已经遍及到现代生活中的方方面面,给人们的学习生活工作带来了巨大的影响。伴随着软件应用的日益广泛和人们对软件需求的不断提高,信息系统的复杂性、多样性也在不断提高,软件产品的质量也面临着越来越多的突出问题,保障软件质量也变得愈加重要。作为软件开发和软件维护中的一个重要阶段,软件调试是保证软件质量的一个关键环节和重要步骤,它是计算机程序中查找并减少错误或缺陷的一个系统过程。开发人员大多通过打印关键信息、设置断点、程序插桩等方法对程序进行调试。作为一个多步骤的过程,调试包括发现错误、定位错误根源、修复程序缺陷等步骤,它在软件开发工程中是非常重要的。然而,软件调试一直以来都是一项繁琐且复杂的工作,且随着软件的发展和人们需求的不断提升,软件调试在物质和时间成本上都花费巨大,为软件开发工作带来巨大挑战。
自从2001年模型驱动架构(Model Driven Architecture,MDA)[1]被提出以来,便在学术界和工业界引起了极大的反响和广泛的关注。作为一种新兴的软件开发模式,MDA主张整个软件开发生命周期围绕模型展开,并以此为基础将系统的业务模型与具体的实现细节分离。在对MDA的研究期间涌现出了多种模型转换程序语言以及支持模型转换的工具和平台:目前大约有10种不同的模型转换语言(如ATL,QVT 等)[2],相关的工具和平台有 60多个(如Eclipse-ATL,QVTo-Eclipse等)[3]。同时,关于MDA和模型转换的应用以及新的研究成果也不断被提出。在软件开发的应用领域,“模型驱动工程”被认为是近年来在MDA的大背景下已经活跃起来的一个概念,模型和建模也愈发得到重视,并且各种建模技术也获得了蓬勃发展。尽管MDA并非这些理念技术的源头,但是MDA对软件领域建模与模型的研究起到了极大的促进作用[4]。在基于模型的软件开发中,除了广泛使用的“模型驱动”,“基于模型”、“面向模型”、“以模型为中心”等概念也随之出现,模型驱动工程(Model-Driven Engineering,MDE)就是在此背景下出现的。它并不是一种新的技术,而是软件开发领域各种围绕模型与建模技术的融合,它的立场和层次更接近于基本的软件工程。基于MDA的软件开发过程的实质,就是从计算无关模型(Computation Inde-pendent Model,CIM)到平台无关模型(Platform Independent Model,PIM),从PIM到平台相关模型(Platform Specific Model,PSM),进而从PSM到代码的映射[5]。不同层次模型之间的映射就是通过模型转换来自动实现的。
1.2 国内外研究现状
1.2.1 模型转换程序错误发现研究现状
为了有效保障模型转换程序的质量,现有的研究目前大致分为两部分:发现模型转换程序中的错误与定位模型转换程序中的错误。在发现模型转换程序错误的研究中,目前已取得了一些研究成果。Gonza´lez等人[9]提出了一种白盒测试模型生成方法,该方法通过模型转换程序中规则的前置条件与后置条件,从模型转换程序元模型的结构出发,提取出OCL约束,由此生成满足特定路径条件的不同测试输入模型。
在发现错误的研究中,人们普遍采用的方法是利用基于约束的形式化描述来验证输出模型[10]。Sagar Sen等人[11]开发了一个测试模型生成工具Cartier,该工具在确定模型转换的约束条件后通过约束求解的方式来处理约束条件,进而从模型转换的输入域中选择合格的测试模型。Jiang等人[12]利用蜕变测试技术缓解模型转换程序中的oracle问题,通过多种蜕变关系为原始测试模型生成对应的蜕变模型,最终检查原始输出模型和蜕变关系构造后的输出模型之间是否符合对应的蜕变关系来检查程序正误。He等人[13]针对双向模型转换程序中难以构造测试预言的问题,定义了一个元模型来建立测试组,并建立了一个测试框架以支持双向模型转换的测试。上述测试研究成果中主要通过检查输入和输出结果来判断程序的正确与否,这是一种动态的测试过程,他们的研究重心放在了测试用例的生成和缓解oracle问题以确定输出结果上。Denney等人[14]提出了注释模式编译器,它可以通过注释推理算法自动生成验证程序所需的注释和安全属性,并简化了模式开发和维护。Calegari等人提出了一个基于归纳构造演算(Calculus of Inductive Constructions,CIC)的框架,通过从MDE技术空间的元模型、 模型和转换到CIC技术空间的类型、 命题和功能来对模型转换进行模型验证[15]。Gogolla对Model Transformation Contract进行了扩展,提出了一种Tract的测试方法,Tract定义了源和目标元模型上的一组约束、一组源目标约束和一个Tract测试套件,即满足源约束的源模型集合,将自动生成的测试套件转换成输入模型后通过检查输出模型来对程序进行测试[16]。
第 2 章 相关知识概述
2.1 蜕变测试
测试是一种动态的分析方法,主要通过运行程序并分析其结果来判断程序是否有误。一般程序的测试主要通过检查程序的运行结果是否符合测试预言来判断程序是否出错,程序的测试预言规定了输入和输出之间的约束关系,是程序调试的基础,如果不能确定测试预言,就不能通过检查输入与输出之间的关系去判断程序是否出错,进而影响到软件调试工作的进行。
相关研究表明,在软件工程中某些特定的领域,有很多程序都是没有测试预言的,目前已经有很多学术研究者将关注点放在该类没有测试预言的程序研究上,致力于解决该类程序的调试问题,并提出相应的方法技术。蜕变测试作为近几年最流行的软件测试技术之一引起了学术研究者的兴趣并得到越来越多的关注,已经逐渐成为软件工程领域的热点问题,并随着深入的实验研究,在机器学习、人工智能、生物信息、普适计算等各个领域都取得了巨大的进展。蜕变测试是由T.Y.Chen提出的,可以有效地缓解“测试准则问题”,其核心思想是在程序没有预期输出的情况下,挖掘构造程序中的蜕变关系并进一步得到一个与原输入具有某种特定关系的衍生输入,通过判断输出之间是否符合特定的关系来确定程序中是否存在错误。蜕变测试与其他测试技术最大的不同在于该技术不需要知道期望的输出结果,而是利用蜕变关系构造新的输入,运行程序后通过检查输出之间的关系是否符合预期关系来判断程序是否出错。经过几十年的发展与众多学者的研究,目前蜕变测试已经被广泛应用于计算机的诸多领域,包括编译器的测试、机器学习和人工智能等领域。
蜕变测试可以有效缓解测试中的oracle问题,是一种方便实用的软件测试方法[38]。该方法认为MT里最重要的概念就是蜕变关系,蜕变关系是对多组输入之间和对应输出之间关系的一种约束,是程序正确执行必须遵守的规约。
2.2 模型转换程序
基于MDA的软件开发过程如图2.2所示。MDA利用不同层次的模型从不同角度来描述软件系统:计算无关模型关注系统的业务功能描述;平台无关模型从软件系统实现的角度来描述系统业务功能;平台相关模型描述利用特定技术对系统的实现。基于MDA的软件开发过程实质上就是实现从CIM到PIM,从PIM到PSM,进而从PSM到代码的映射[39]。而不同模型之间的映射则通过模型转换来自动实现。
模型转换在基于MDA软件开发的整个系统中具有核心和统帅的地位。相比传统的软件开发过程,MDA能更好的适应多变的需求、不断增长的系统规模以及日益复杂的系统环境,并使得所开发的软件具备更好的可重用性和可移植性。这些优势使得基于MDA的软件开发模式在多个领域(如分布式系统、电信领域应用、网络应用、国防与航天应用、无线传感器网络等)得到了广泛的应用和推广[40, 41]。
同所有的软件产品一样,基于MDA开发的软件也面临着质量的考验。鉴于MDA的特点不难发现,决定其最终软件质量的关键因素是模型转换过程的正确性。模型转换的基本过程如图2.3所示,从一个模型到另一个模型的转换,实质上是通过在模型转换平台上运行模型转换程序来自动实现的。也就是说,模型转换的过程就是执行模型转换程序的过程。显然,在MDA中要保障最终软件的质量,归根结底在于如何保障模型转换程序的质量。
3 基于蜕变变测试的模型转换错误定位 173.1 方法总体概述及流程简介 . . . . . . . . . . . 17
3.1.1 错误定位思想原理 . . . . . . .. . . . 17
3.1.2 方法工作流程 . . . . . . . . . . .. . . . . . 18
4 基于蜕变变测试的模型转换程序修复................24
4.1 方法概述及流程简介 . . . . . . . . . . . . . .. . . . 24
4.1.1 缺陷修复思想原理 . . . . . . . . . . . . . . . 24
4.1.2 方法工作流程 . . . . . . . . . . . . . . . . . . . . 25
5 实验设计以及结果分析 295.1 SBFL-MT错误定位实验设计以及结果分析 . . . . . . .. . . . . . 29
5.1.1 实验设计及其流程 . . . . . . . . . . . . . . . . . . . 29
5.1.2 SBFL-MT实验结果及分析 . . . . . . . . . . . . . . . . . . 31
第 5 章 实验设计以及结果分析
5.1 SBFL-MT错误定位实验设计以及结果分析
本文实验中选择了一组模型转换程序进行实验来验证SBFL-MT错误定位的效果。为了得到多错误程序错误定位的结果,我们利用程序变异中的方法随机向原来正确程序中植入错误,获得程序的错误版本(变异体)。实验主要利用自动错误定位的准确度对SBFL-MT的错误定位效果进行评估。 在这一部分,首先介绍实验设置,然后分析实验结果,以证明SBFL-MT的方法的可行性和有效性。
5.1.1 实验设计及其流程
我们将会详细介绍本实验的设计及其操作流程。在实验中选取了4个模型转换程序来进行实验,通过随机变异生成大量变异体为实验可靠性提供数据支持。针对每个变异体我们会用SBFL-MT方法进行错误定位并进行统计,评估SBFL-MT方法的错误定位效果。
本次实验选取了4个模型转换程序作为实验对象,通过分别向每个程序中随机植入错误,每个模型转换程序又生成多个错误变异体得到多个错误程序版本。表5.1显示了与每个程序相关的详细信息,包括程序中规则的数量、构造的MRs的数量和构建的变异体的数量。
第 6 章 总结与展望
6.1 工作总结
随着软件应用系统的日渐复杂和庞大,基于模型驱动进行的软件开发因能更好的适应多变的需求和复杂的环境而逐渐在更多的场景中得到应用和推广。 通过观察基于模型驱动的软件开发的特点我们不难发现,决定其软件质量的关键因素是保证模型转换的正确性。 而实际上,模型转换的过程是模型转换程序在模型转换平台上自动运行实现的,因此,想要保证软件质量归根结底还是要保证模型转换程序的正确性。 模型转换程序存在测试oracle问题,本文提出了利用MT对其进行调试的方法,其中包括对模型转换程序的错误定位和程序修复方面的研究,提出了SBFL-MT的方法来对模型转换程序进行错误定位,开发了一个程序缺陷修复工具,并通过实验与案例分析评估SBFL-MT方法针对模型转换程序错误定位的可行性和有效性。 本文首先提出了研究问题,即如今基于模型驱动的软件开发愈发重要,保证模型转换程序的质量也是至关重要,而模型转换程序存在测试oracle问题,对该程序进行错误定位比较困难。然后本文总结了已有的针对普通程序的错误定位研究和针对模型转换程序错误定位的工作,对存在测试oracle问题的程序进行调试的方法进行了深入探讨分析,之后在此基础上提出了我们在模型转换程序上进行错误定位的方法SBFL-MT,详细介绍了SBFL-MT的错误定位思想及其操作流程。随后介绍了本文开发的模型转换程序自动缺陷修复工具——AMTRepair,主要内容包括该修复工具的核心思想以及其执行步骤。本文主要进行了如下几方面的工作:
(1) 本文首先介绍了MT的核心思想和整体流程,简单介绍了MT在诸多领域已有的相关工作,总结了MT和其他技术相结合进行错误定位的研究成果,简单分析了技术特点及存在的不足。
(2) 本文分析了对存在测试oracle问题的程序进行错误定位的难点和挑战,总结了目前已有的基于模型转换程序的错误定位工作,简单分析了利用MT对模型转化程序进行错误定位的优势和不足。
(3) 本文将MT和SBFL相结合应用到了模型转换程序的调试工作中,系统性的提出了针对模型转换程序错误定位的定位方法SBFL-MT,该错误定位方法具有以下特点:[1] 利用蜕变关系生成蜕变模型,即根据程序设计对应的蜕变关系,并以原始测试用例作为输入通过蜕变关系构造生成衍生测试用例,通过程序功能以及原始测试用例I和转换后的输入I 之间的关系可以得到输出O和O 之间的关系,通过检查输出之间是否包含对应关系来判断程序的错误与否,从而解决了程序没有测试预言的问题。
参考文献(略)