刘宇欣
摘要:近年来,Web服务测试得到了越来越多的关注。对Web服务及SOA(面向服务架构)进行简单介绍,分别从基于WSDL的Web服务测试、语义Web服务测试和基于形式化方法的Web服务测试3个方面进行阐述,并重点研究形式化规约的四大类方法:基于模型、基于有限状态、进程代数和代数规约在Web服务测试中的应用。
关键词:Web服务测试;形式化方法;Web服务
中图分类号:TP301
文献标识码:A
文章编号:16727800(2017)004020804
0引言
近年来,Web服务由于其自身的自治性、平台独立性以及服务技术的广泛性,得到了迅速发展。然而Web服务并没有获得预期的广泛市场应用,其主要原因是服务消费者和服务提供者之间存在着信任问题,尤其在服务动态选择和使用时,服务提供者能否为服务消费者提供可靠的Web服务是一个关键问题。针对此类问题,测试是一种有力的解决途径,是保证Web服务功能正确的重要技术。 与传统软件测试相比,SOA特性使得Web服务测试更加困难,从而给测试带来了一些新的挑战。除了服务开发者,其他用户只能访问服务接口,测试人员无法获得服务代码等实现细节,这使得测试人员只能根据服务提供者发布的服务描述文档进行基于规约的测试。服务运行架构的独立性使得测试人员缺乏对服务运行时的控制,组合服务执行中Web服务的动态性和自适应性也使得测试人员很难离线确定被激活的服务,这些动态特性均要求测试
人员实施在线测试;对服务进行的大规模使用和测试可能导致服务崩溃进而带来额外的测试开销。另外,构成软件的Web服务会不断更新变化,每次更新后的重新测试对于原本已经极具挑战的测试来说更是雪上加霜。因此,对Web服务测试技术进行深入的系统性研究非常必要。
1Web服务和面向服务架构
Web服务是一种可以通过网络来支持机器与机器间互操作的交互软件系统。Web服务平台所提供的功能是使用预定义的Web标准为不同的应用程序提供其所需的交互。为了确保集成后的模型能够满足异构系统所需的灵活性,Web服务的集成模型是松耦合的。 目前主要有两种类型的Web服务:一种是基于SOAP,另一种是基于REST。二者都是基于SOA,区别是它们使用的接口不同。基于SOAP的Web服务使用SOAP接口传递消息,并且使用WSDL来描述Web服务,而使用REST接口的Web服务则使用通用的HTTP方法(GET、DELETE、POST和PUT)来描述、发布和使用相关资源。 SOA是建立面向服务软件的一种策略,其目的是为了提供可以被其它服务使用的服务。SOA思想的出现早于Web服务,而Web服务的出现和使用使得SOA得到了快速发展。Web服务的自主性、平台独立性以及动态发现和组合等特性为SOA提供了重要的技术支持。由于Web服务的使用,现有的系统可以在不知道任何关于其它计算机系统技术信息的情况下交换信息。面向服务架构如图1所示。
在SOA中,有3个主要参与者:服务提供者、服务消费者和服务代理商。这3个参与者分别承担了SOA的3种基本活动:发布、发现和绑定。服务提供者是服务的拥有者,负责解决服务中出现的问题及服务的维护,同时也是服务演化的唯一控制者。服务提供者通过在服务代理商处登记注册来发布服务。通常将服务代理商视作服务的查询机制,通过它可以实现服务的发布和搜索功能。服务代理商允许用户查找符合用户需要的服务,并提供如何获得这些服务的信息。服务消费者也是最重要的参与者之一,参与了两项主要活动:发现与绑定。在找到满足其需求的服务之后,服务消费者通过使用从服务代理商处获得的绑定信息来调用相关服务。绑定信息包括了服务的地址、怎样调用服务,以及服务提供哪些功能等。
2Web服务测试
Web服务测试包括Web服务的基本功能测试、服务交互测试、服务质量测试等。Web服务测试发展的历史分为3个阶段[1]: 第一阶段(2002-2003):将Web服务看作由单元组成,测试也表现为单元测试。 第二阶段(2003-2005):提出SOA测试,同时探讨SOA的特性。这一阶段的测试包括发布、查找、Web服务绑定功能、异步Web服务消息传递功能和SOA的SOAP中介能力测试。另外,QoS的测试也在这一阶段中出现。 第三阶段(2004-至今):Web服务动态运行时的能力测试。Web服务组合测试与Web服务版本测试均在这一阶段出现。 由上述阶段可以看出,自2002年开始,面向Web服务软件测试的研究领域发展迅速,从单个服务的静态功能测试发展到服务组合的动态运行能力测试。在这一过程中,许多研究者们对SOA特性进行了探讨,从WSDL、BPEL、OWL-S的语法定义中以及有限狀态机、标签转换系统、语法图与一阶逻辑等形式化模型中研究测试用例生成技术[27]。这些技术解决了Web服务的特定问题,例如处理无效输入以及调用序列中的错误、处理网络连接中断或依赖服务失效引起的错误等。
2.1基于WSDL的Web服务测试
由于服务提供者仅发布Web服务的描述信息而没有源码,消费者和代理商只可使用黑盒测试。基于规约的测试通过接口文档来验证待测系统,如用户接口描述、设计任务书、需求列表、使用手册等。通常,测试者获得的关于Web服务的信息就是服务的规约,如WSDL、OWLS等。大多数Web服务发布都只包含了WSDL文档,WSDL规约中包含了服务提供的操作和参数的抽象信息。目前已有大量的研究工作围绕着基于WSDL的Web服务测试展开。如:Bai等[8]使用WSDL生成测试用例,然而该方法并不依赖于输入消息参数的类型元素,并且没有生成形式化模型;Li等[9]结合WSDL和用户手册提出了一个Web服务测试用例生成方法,介绍了一个支持这种方法的工具WSTDGen。这个工具允许用户定制数据类型并为每一个数据类型选择测试生成规则。Wu等[10]从WSDL文档中生成基于错误的XML架构数据类型的测试数据。Ma等[11]提出基于WSDL的测试数据生成方法,为单操作Web服务产生测试数据,并为Web服务的WSDL规约中的输入元素建模。通过模型对Web服务的输入数据进行拆解,直到数据类型足够简单,最后由模型底层的简单数据类型开始不断向上层递归生成Web服务的测试数据。但是,该方法只能为单个操作产生测试数据,不可以为多操作生成测试数据。