测试人员如何了解系统架构
通过开发和架构师提供的各种维度的视图,进行了解系统的架构
a)、逻辑视图。它提供了系统开发中对象间或实体间相互关系的静态快照。这种视图实际上可能有两个或更多的表现层。一个概念模型,另一个是数据库模式中模型的实现。往往现在数据库架构师使用PowerDesigner描述实体的逻辑关系,所以需要我们测试工程师学会查看数据库实体描述,从而了解系统中的数据库设计,例如关键字,索引、表实体之间的关系等。
b).过程视图。过程视图描述设计的并发性和同步性因素。我们了解过程视图,从而会了解系统中各个模块之间的时间、空间关系。原来的结构化编程中经常用流程图来表示,而现在面向对象的编程经常用一些建模工具描述对象实体。
c).物理视图。物理视图描述软件到硬件的映射,其中包括实现高可用性、可靠性、容错性和性能等目标的处理部件的分布情况。常用Rose部署图来描述物理视图,也可以使用Visio等绘图工具绘制系统架构图来描述。
具体架构解析下面已Weblogic为例,说明常用的服务端的设计(我们自己实现的大部分和这个原理应该是类似的)。
ServerSocket监听accept到一个请求以后就会生成一个socket,然后我们会将这个socket封装成一个对weblogic内部子系统的请求,抛到后面一个执行线程池里,然后根据具体的请求会调用用户自己的servlet等。这个途径上有几个地方可能有问题,一个是对于非常大量的并发连接的话,在监听层次上,由于ServerSocket是同步接受请求的,如果在一个socket还没accept结束时,有新的请求进来,它会将新的请求放到一个queue里边,这个queue的长度由accept backlog来确定。如果这个queue满了,新的请求将不能进来,而被直接reject掉。这是可能就需要将accept backlog调大一些。请求被accept以后,就需要通过我们的reader线程来将其数据读出来,并封装成内部的一个ExecuteRequest。
其实oracle的共享连接方式的原理和这个也差不多。在我们项目中,对系统架构设计理解是我们经常会考虑下面的问题:系统是否采用了异步的处理方式增加处理能力和扩展性?系统采用的错误处理机制是什么样子的?系统都在什么层面设计了缓存?系统如何进行多节点的分布和调度,如何进行水平扩展?等等。
了解了系统的架构之后,对于测试来说,就应该做相应的准备工作。针对特定的结构采取相应的测试设计。例如,对于J2EE架构,则要考虑如何集成测试,采用何种集成策略。对于性能测试,考虑哪些测试。例如研发采用Weblogic作为应用服务器,则我们要考虑该服务器哪些配置参考会影响系统的性能。物理架构中具有中间件服务器,则我们对中间件服务器如何测试。
系统架构