软件测试之分布式对象测试 软件测试方法
如今很少有设计单个进程在单个处理机卜执行的系统,为了获得灵活性和伸展性,许多系统都被设计成多个充分独立的部件,每个部件可以存在于一个独立的进程中而整个统的运行会根据需要启动多个进程。如果这些进程不是分布在一台机器上,而是分布在多台机器上,借助于计算机通信或网络实现它们相互之间的协作,从而构成一个分布式的系统。客户机/服务器模是一种简单的分布式系统,在这种模璀中。客户机和服务器部件被设计成存在于独立的进程中服务器提供数据计算、处理、存储等管理工作,客户端接受用户的输入、请求、显示结等工作两者分工不同。随着计算机技术的发展,现在可以构造一个分布式的服务器集群,通过并行技术实现复杂的或巨量的计算:也可以构造没有服务器的、分布式的、由客户端构成的对等网络fP2P)系统。
分布式对象的概念和特点
线程是一个操作系统进程内能够独证运行的内容,它拥有自己的计数器和本地数据。线程是能够被调度执行的最小单位。而向对象语言通过隐藏接口的属性或在某些情况下使线程对对象做出反应,以此提供一些简单的同步手段。这就意味着在对象接口中蚓步是可见的(如Javasynchomize关键字),而传递消息是同步中最关键的一环。在这种情况下,类测试并不能发现很多同步错误,只有当一系列对象交互作用时才真正有机会发现错误。 当软件包含多个并发进程时,其特点是不确定性,完全地重复运行一个测试是很困难的。线程准确的执行是由操作系统安排的,与系统测试无关的程序变化可能会影响测试中的系统线程执行顺序。这就意味着如果出现失败,缺陷就必须被隔离并修复,并重新测试。不能因为在一个特定执行中没有发生错误就肯定缺陷被消除了,我们必须使用下列技术之一来进行测试。
· 在类的层次上进行更彻底的测试。对用来产生分布式对象的类进行设计检查,应该确定类设计中是否提供了恰当的同步机制。动态类测试应该确定在受控制的测试环境中同步是省常。
· 在记录事件发生顺序的同时,执行大量的测试用倒。这就增大了执行所有顺序的可能性。而努力想友现的问题正是来源于事件执行的顺序。如果一执行所有的顺序,就能找到这些问题。
· 指定标准的测试环境。从一台尽可能简单的机器开始,包括尽可能少的网络、调制解调器或其他共享设备互联。并确定应用程序能够在这个平台L运行。然后安装一套基本的应用程序,它将一直在此机器上运行。每个测试用例都应该描述在标准环境下所做的任何修改。还要包括进程开始的顺序。标准环境下的程序调试应允许测试者控制线程的创建、执行和删除的顺序。环境越大,共享和网络化的程度越高,要保持环境的一致性就更难。不论在哪我们都应该有测试实验室,并把测试机器与公共网络的其他部分隔离,这些机器专用于测试进程。
2测试中需要注意的情况
· 局部故障。由于以分布式系统为主的机器上的软件或硬件可能出错,分布式系统的部分代 码也许就不能执行,而运行在单一机器上的应用程序是不会遇到这类问题的。局部出错的司能性使我们应考虑针对网络连接的断开、失灵或关闭网络上的一个节点而发生故障的这类测试。这一点可以在前面提到的实验室进行实现。
· 超时。当一个请求发送到另一个系统时,|_【】9络系统通过设置定时器来避免死锁。如果在指定的时间内没有得到任何的回应,系统就放弃这个请求。这可能是由于系统的死锁,或是网络上的机器太忙以致反映的时间比规定的时间要长a当出现请求被回答或未被回答时,软件应该能够做出正确的反映。当然在这两种情况下, 反映是爿i同的。在网络机器匕运行测试时,测试必须加载多种配置。
· 结构的动态性。分布式系统通常具有依靠多种机器的加载来改变自身配置的能力, 比如特定请求的动态定向。系统的设计要允许多种机器参与进来,而且系统也需要根据大量的配置来重复测试。如果存在一组大量日B置,对这些配置进行全部测试是可行的。另外,可以使用比如正交阵列测试系统这样的技术来选择一套特殊的测试配置。
· 线程。作为时间调度的计算单元,引进了线程的概念。在设计中,基本的权衡是
以线程的数量为中心。增加线程的数量可以简化一定的算法和技术,但线程执行
的顺序出现风险的机会更大。减少线程的数量可以减少这种顺序问题,但会使软
件更为刻板而且通常效率会更低。
· 同步。当两个或两个以上的线程都必须访问一个存储空间时,就需要一定的机制
来避免两个线程相互冲突。而且两个线程可能会同时对数据进行修改。一些语言
(如Java)提供了语言关键字来自动添加避免同时访问的机制。而其他语言,如
c_-,则要求每个开发者必须自行构造以达到这一目的。在面向对象的语言中同
步会显得更为简单,因为这种机制局限于一般数据属性的修改方法,而且有不止
一个特定的方法来避免实际数据的直接存取。
文章来源于领测软件测试网 https://www.ltesting.net/