随着网络技术的不断发展,大量分布式系统被部署在网络中,常见的如Web应用、Web Service等。分布式系统不同于一般软件系统,它通常由物理分布的多个子系统组成,这些子系统通过相互间的协作完成计算任务,具有物理分布、并发访问、时序敏感、平台异构等特点。此外,分布式系统中的诸多子系统在触发方式、工作方式等方面往往也不属于同一类型,比如,通过网络协议传递消息的子系统和利用本地接口进行方法调用的子系统等。 因此,对分布式系统的测试也不同于一般软件系统的测试,需要采用分布式测试。
一、什么是分布式测试
分布式测试是指通过局域网和Internet,把分布于不同地点、独立完成特定功能的测试计算机连接起来,以达到测试资源共享、分散操作、集中管理、协同工作、负载均衡、测试过程监控等目的的计算机网络测试。
二、分布式测试系统的特点
分布式测试系统是传统网络化测试系统的进一步发展,具有以下主要特点:
(1)网络化。
网络化的目的是实现多个测试节点间基本的互连、互通功能,实现资源共享,是分布式测试系统的底层支撑结构。
(2)分布性。
分布式测试系统不仅在地域上分布,而且在计算上也应是分布的。这对测试系统提出了一些更高的要求,如测试子系统间协同工作、整体视图、负载均衡、具有可扩展性和高可用性等。同时,分布式测试系统对用户具有位置透明性,测试信息“唾手可得”。
(3)开放性。
开放性包含四个方面的特征,即可移植性、可互操作性、可伸缩性、易获得性。分布式测试系统能够采用各种COTS(Commercial-Off-The-Shelf,商业上现成的产品和技术)软/硬件模块,给系统的构造带来诸多便利。
(4)实时性。
分布式测试系统本质上是一个实时系统,任务间协同工作处理各种测试信息都必须是实时的,对过程之间的同步、操作的时限有着严格要求。
(5)动态性。
测试系统可以动态地运行操作,支持测试过程中的所有的管理和测试活动,能灵活地根据测试实施方案,进行测试过程对象和活动的映射。
(6)处理不确定性。
分布式测试环境的初始状态是确定的、已知的,但随着系统的运行,各种动态实体在环境中变化,同时对环境产生影响,使得环境也发生某些变化,这种动态变化带来了不确定性,分布式测试系统必须具有处理这种不确定性的能力。
(7)容错能力强,可靠性高、安全性好。
三、分布式测试系统关键技术
(1)分布式环境
对分布式测试而言,测试过程是一种对流程控制要求很高的活动,因此系统需要适时地获取全局状态以正确地指导流程;其次,在测试过程中,系统要能够方便地监视和操纵测试过程。因此,分布式测试系统适合采用集中式的分布式策略,即,由一台中心计算机控制若干台受控计算机的执行,整个测试过程和资源管理由中心来完成,它掌握整个分布式测试环境的状态,从而发出控制命令。
(2)分布式环境下的节点通信
分布式测试环境中的活动均带有很强的流程性,某一步操作的失败会导致整个测试流程的中断和异常,因此需要一个稳定的通信环境。同时,通信主要是在中心节点和执行节点之间进行,两种节点的主要工作都集中在测试活动并且在逻辑上中心节点和执行节点相互并发,具有一定的独立性。因此,分布式测试系统相对于提供服务的分布式系统而言,适合用基于消息通信的方式来实现。
(3)测试任务调度
分布式测试的优点是测试人员可以事先定制任务执行的时间表,如在指定时间、指定设备上执行指定的测试任务。但同时也面临一个问题,在硬件和软件资源有限的情况下,如何以最有效的方式完成测试任务?其中关键的问题就是测试调度。分布式测试调度是指把组成测试任务的一组测试用例,分配到分布式测试系统的不同执行节点上,并按照一定的测试时序调度执行,以满足事先制定的测试需求。
分布式测试调度方法可分为静态调度、动态调度和混合调度三类。
静态调度是指假设系统的拓扑结构和性能参数固定不变,设计调度算法时只考虑当前系统状况,并针对当前状况尽量优化调度性能。
动态调度则是指在测试执行过程中,根据系统的运行状况(如执行节点加入或退出、执行节点资源使用情况等),动态地决定各个用例的执行节点和相应的执行时间。动态调度比静态调度更加灵活,但也会带来更多的调度开销,有可能影响最终的调度性能。
混合调度是静态调度和动态调度二者的组合方法,一般来说,它根据测试用例和系统的特点,对部分用例采取静态调度策略,对另一部分用例则采取动态调度策略。这三种方法各有利弊,需要测试人员根据具体测试情况来选择使用哪种调度方法。
以上对分布式测试系统的特点和部分关键技术进行了简单分析。随着越来越多的领域活动依赖于分布式应用,分布式测试将受到人们更大的关注,测试系统实现技术也将不断发展成熟,以便快速高效地发现软件中存在的功能和性能缺陷。
【编辑推荐】