4.哪个层真正的引起了那个问题?

  在Web系统中的错误通常是很难一直重现因为许多由C/S架构的分布式特性而引入的许多变量。(例如,服务器,客户端和网络组件)。在一个web环境中至少由3个常见的怀疑部分:客户端,服务器和网络。客户端和服务器都会携带诶之和兼容性问题,那些和PC环境相似,所有的组件都在一个盒子里。在C/S系统里,问题成倍的增长,然而,由于可能有很多的客户端和服务器链接在一个网络中。典型的C/S配置和兼容性问题涉及到硬件和操作系统的混合(例如,基于UNIX的vs基于windows的盒子)以及在服务器端的软件组合(Web服务器包,数据库服务器包,防火墙,COM对象,CORBA对象等等)。问题也可能涉及客户端的软件组合(TCP/IP堆栈,拨号软件,帮助组件,浏览器带宽和浏览器版本)。另外,浏览器设置,例如一些常见的设置,连接设置,安全设置(包括ActiveX空间,插件,Java,脚本,下载,用户认证等等),内容设置,程序设置,和其他高级设置(包括浏览器选项,多媒体选项,JVM选项,打印选项和HTTP选项)引入很多可以被测试并分析的变量。

  网络提供了另一套变量。网络用几个方式影响着Web应用程序,包括由于带宽和响应时间引起的分时相关的问题(竞态条件,性能,超时等等),由于硬件设备例如网关和路由器导致的潜在的配置和兼容性问题,以及和安全实现相关的端问题。

  5.静态和动态操作环境是不同的

  一般来说,有两类操作环境-每个都有自己的测试牵连:

  静态环境(例如配置和兼容性错误)不兼容性问题可能存在其中,不管可变的条件,例如处理速度和可用的内存

  动态环境(例如资源及时间相关的错误)其他方面可兼容的组件可能出现错误在其中,由于内存相关的错误和反应时间条件(我们将在这一节中更详尽的探讨动态环境)

  静态操作环境:配置和兼容性变量

  配置和兼容性问题可能会出现在web系统中的任何一个点上:客户端,服务器端,或网络中。配置问题包括不同的服务器软件和硬件设置,浏览器设置,网络连接,和TCP/IP堆栈设置。浏览器设置/前面提到的JavaScript例子说明了配置问题的一种类型。

  我们用来示范的所测试应用程序有一些制图的功能,可以让用户生成度量报告,例如条形图和直线图。当用户请求一个度量报告时,应用程序服务器执行的伪码如下:

  1.连接服务器并运行查询,

  2.编写查询结果到一个名为c: empchart.val的文件中,

  3.执行Chart的JavaApplet。从c: empchart.val文件中读取数据以生成一个图表

  4.发送JavaApplet到浏览器

  在测试这个应用程序过程中,我发现图表功能可以在以上的配置上运行,但是却不能在其他配置上工作。在我更进一步的研究之后,我认识到问题可能出现在two-box配置中。在检查代码之后,我认识到问题在步骤2和3中。在步骤2中,查询结果被写到数据库服务器本地驱动器中c: empchart.val。在步骤3里,ChartJavaApplet是运行在应用服务器上而不是和数据库服务器在一个相同的盒中。当它试图在应用服务器本地驱动器中打开c: empchart.val文件时,文件并不存在。

  在这个用例中,我不建议在遇到问题时阅读代码,我把调试的工作留给开发人员。我只不过想指出识别哪个服务器配置是有问题的,并且在bug报告中含括这些信息。我也会在测试下的应用程序支持的全部的分别式配置下运行一个粗略的测试用例包。

  配置问题在静态操作环境中也是很终于的。

  这个例子并不是要说IE比NetscapeNavigator更好,它只不过意味着在浏览器之间有不兼容性问题-并且代码应该假设相对路径在所有的浏览器中都可以工作。更重要的是,它建议当你在一个环境中发现一个错误时,如果它是一个环境相关的错误的话,同样的错误可能不会出现在不同的环境中。

  动态的操作环境:事情不会保持一样

  当特定环境的属性值不是每次都在测试过程中保持常量时,它会引起操作环境变为动态。属性可以从资源特定(可用的RAM,磁盘空间等)转变为时间特定的(网络反应时间,用户要提交的交易顺序等)。

  当一个测试用例取决于步骤集和操作环境的准确复制,然而(由于它的动态本质)操作环境不可能被复制,错误变得不可重现或很难重现。

  顺便说一下,这也是内存相关错误通常较难重现的原因。当一个内存覆盖的错误出现在代码中时,例如,它常常会引起一个内存覆盖的问题。然而,从一个黑盒测试的角度看,我们永远没有机会看到这个错误的症状直到执行或读取特定的代码或数据溢出字节。在这个例子中,步骤集代表了黑盒测试的准确集合。内存覆盖错误代表了在代码中的真实的错误。被执行或读取的被覆盖的字节的条件代表了动态的操作环境或需要揭露(重现)错误的条件。