首先来介绍一下B/S与C/S架构

C/S架构简要介绍

在了解什么是B/S架构之前,我们有必要了解一下什么是C/S架构:

C/S架构是第一种比较早的软件架构,主要用于局域网内。也叫 客户机/服务器模式。

它可以分为客户机和服务器两层:

第一层:  在客户机系统上结合了界面显示与业务逻辑;

第二层:  通过网络结合了数据库服务器。

简单的说就是第一层是用户表示层,第二层是数据库层。

  这里需要补充的是,客户端不仅仅是一些简单的操作,它也是会处理一些运算,业务逻辑的处理等。也就是说,客户端也做着一些本该由服务器来做的一些事情,如图所示:

C/S架构软件有一个特点,就是如果用户要使用的话,需要下载一个客户端,安装后就可以使用。比如QQ,OFFICE软件等。

什么是B/S架构

B/S架构的全称为Browser/Server,即浏览器/服务器结构。

Browser指的是Web浏览器,极少数事务逻辑在前端实现,但主要事务逻辑在服务器端实现。

B/S架构的系统无须特别安装,只有Web浏览器即可。

其实就是我们前端现在做的一些事情,大部分的逻辑交给后台来实现,我们前端大部分是做一些数据渲染,请求等比较少的逻辑。

B/S架构的分层:

与C/S架构只有两层不同的是,B/S架构有三层,分别为:

第一层表现层:主要完成用户和后台的交互及最终查询结果的输出功能。

第二层逻辑层:主要是利用服务器完成客户端的应用逻辑功能。

第三层数据层:主要是接受客户端请求后独立进行各种运算。

如图所示:

对于功能测试,其实都是一样的,判断功能是否有问题并不取决于系统的架构,而是根据客户的需求,来判断预期结果与实际结果之间的差异。以下罗列出的主要是考虑到这两种架构本身所导致测试的偏重点。

我们也许都知道B/S架构中客户端向服务端请求是通过http方式的,C/S架构中客户端向服务端请求是通过socket方式的,其实很类似

  1. 建立客户端的socket,确定要连接的服务器的主机名和端口
  2. 发送连接请求到服务器,并等待服务器的回馈信息
  3. 连接成功后,与服务器进行数据的交互
  4. 数据处理完毕后,关闭自身的socket连接

B/S架构:

l cookie和session

由于http协议的无状态性,从而导致了cookie的诞生,对于程序基于cookie与session的编程,通常我们需要测试cookie是否按预定的时间进行保存,刷新对Cookies有什么影响等;例如在浏览器端禁用cookie,那么登录时,通常是登录不进系统的,目前见到的大部分系统都存在这样的问题,实际如果系统做的很完善的情况下,是可以解决此问题的,或者能给用户一个有好的提示等。

l 前台验证和后台验证

对于后台验证,作为C/S程序可能并不需要过多考虑,因为它的代码都是在后台编写的;

关于web程序绕过前台进行后台验证的测试,在这里不再多说,相信网上有很多工具可以实现。

l 安全性测试

在因特网上部署的系统尤其重要,测试的过程中我们通常会进行sql注入,cookie欺骗,html标签,特殊字符,字符长度是否与数据库中一致,上传文件时选择一些特殊的文件(如.aspx,jsp,php等)等等

l 兼容性测试(客户端是浏览器,存在众多不确定性)

B/S的唯一客户端就是浏览器,而浏览器又有成千上万种,不同的浏览器内核不同,解读页面控件和脚步语言的结果也不一样,可能导致不同的浏览器对系统显示有差别或者部分功能不可用

C/S程序一般是典型的中央集权的机械式处理,交互性相对低,通常是部署在局域网内的,对网络环境要求低

l 兼容性

我们知道B/S的压力在服务端,C/S客户端可以分担一些压力,但是C/S对客户端的环境要求相对较高,包括OS环境(根据目前使用情况来说,主要是在win7系统或同期版本中出现权限问题,或受OS位数的影响),安装过程是否与其他软件冲突,安装顺序,.Net framework版本,客户端升级等均有不同程度要求,同时维护成本较高。

l 安装/卸载测试

  1. C/S结构通常我们先要安装(其实也可以不用安装,直接运行exe文件,也就是我们所说的绿色版本,具体可以根据实际需要),安装界面,路径,安装后的功能是否可用,重复安装,安装失败后是否回滚等等均在测试范围之类。
  2. 有安装就有卸载,windows自带了一个卸载功能,c:\windows\system32\msiexec.exe,我们在生成安装包的同时可以调用此文件。当然也可以使用第三方的卸载工具,如360卸载等。

l 快捷键的使用

Windows操作习惯性讲究快捷,所以通常用户会在常用模块要求使用快捷键来操作

l UI测试

Web程序同样也会考虑到UI测试,在这里主要是考虑异于web的地方。例如窗口的缩放,拖动,任务栏管理器的启用与禁用,以及多窗口的操作及排列等,通常都是要符合windows的操作习惯。

l 明显的性能问题

通常在对程序最小化后系统资源占用多少有一定要求,或者允不允许同时打开多个进程,运行长时间后系统出现卡死等明显的性能问题均在考虑范围之内

深入理解B/S与C/S架构的更多相关文章

  1. 理解vuex的状态管理模式架构

    理解vuex的状态管理模式架构 一: 什么是vuex?官方解释如下:vuex是一个专为vue.js应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证以一种可预测的 ...

  2. 《深入理解mybatis原理》 MyBatis的架构设计以及实例分析

    作者博客:http://blog.csdn.net/u010349169/article/category/2309433 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简 ...

  3. 深入理解java:5. Java分布式架构

    什么是分布式架构 分布式系统(distributed system)是建立在网络之上的软件系统. 内聚性是指每一个数据库分布节点高度自治,有本地的数据库管理系统. 透明性是指每一个数据库分布节点对用户 ...

  4. 深入理解Tomcat系列之一:系统架构(转)

    前言 Tomcat是Apache基金组织下的开源项目,性质是一个Web服务器.下面这种情况很普遍:在eclipse床架一个web项目并部署到Tomcat中,启动tomcat,在浏览器中输入一个类似ht ...

  5. 《深入理解Nginx:模块开发与架构解析》(一)

    第1章 研究 Nginx 前的准备工作 1.1 Nginx 是什么 Web 服务器的基本功能:基于 REST 架构风格,以统一资源描述符(URI)或者统一资源定位符(URL),作为沟通依据,通过 HT ...

  6. 《深入理解Nginx:模块开发与架构解析》读书笔记

    1.nginx的特点:快.扩展性强.可靠性强.内存低消耗.支持高并发.热部署.开源免费 2.nginx由master进程来管理多个(CPU数)worker进程 3.配置按功能分,有4类: 1)用于调试 ...

  7. LInux基础(04)项目设计一(理解链表管理协议的代码架构)

    要设计好一个项目必须要有一个健全的代码框架 一个结构体内有数据域和处理数据的函数指针, 先实现管理链表的函数 增加节点  删除节点  清空链表  遍历节点对每个节点进行操作 再实现协议的注册 把对象s ...

  8. 关于一致性hash,这可能是全网最形象生动最容易理解的文档,想做架构师的你来了解一下

    问题提出 一致性hash是什么?假设有4台缓存服务器N0,N1,N2,N3,现在需要存储数据OBJECT1,OBJECT2,OBJECT3,OBJECT4,OBJECT5,OBJECT5,OBJECT ...

  9. 《深入理解mybatis原理1》 MyBatis的架构设计以及实例分析

    <深入理解mybatis原理> MyBatis的架构设计以及实例分析 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单.优雅.本文主要讲述MyBatis的架构 ...

随机推荐

  1. SQL Server中如何设置对列的权限

    一.方式一:使用视图 将需要限制用户只能看到特定的几个列.设置成一个视图,然后对这个视图进行权限控制 二.方式二:使用GRANT语句 1.授予相关列的查询权限(SELECT) 在数据库db1中,登录名 ...

  2. maven创建web报错failure to transfer org.codehaus.plexus

    failure to transfer org.codehaus.plexus:plexus:pom:2.0.5 from http:// repo.maven.apache.org/maven2 w ...

  3. 单片机project师必备的知识

    C语言编程 程序编译过程  哪部分干什么 数据结构  链表 二叉树 算法   数组  堆栈 队列算法 遍历 常量在内存中的表现形式 语法和内存的相应关系 数电 UML 类图 时序图 状态图 用例图   ...

  4. LLVM每日谈之十九 LLVM的第一本系统的书&lt;Getting Started with LLVM Core Libraries&gt;

    作者:史宁宁(snsn1984) LLVM最终有了一本系统的书了--<Getting Started with LLVM Core Libraries>. 这本书号称是LLVM的第一本书, ...

  5. 复制DropDownList

    DropDownList ddlA; ListItem[] ar = new ListItem[ddlB.Items.Count]; ddlB.Items.CopyTo(ar,0); ddlA.Dat ...

  6. Node.js:目录

    ylbtech-Node.js:目录 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部 1. http://www.runoob.com/nodejs/nodejs ...

  7. BZOJ 4491 分块OR差分+线段树

    思路: (是不是只有我作大死写了个分块) up[i][j]表示从第i块开始到第j个位置 上升的最大值 down[i][j]同理 left_up[i]表示从第i块开始能够上升的最长长度 left_dow ...

  8. WinForm中DataReader绑定到DataGridView的两种方法

    在WinForm中,DataReader是不能直接绑定到DataGridView的,我想到了用两种方法来实现将DataReader绑定到DataGridView. SqlCommand command ...

  9. Hadoop MapReduce编程 API入门系列之倒排索引(二十四)

    不多说,直接上代码. 2016-12-12 21:54:04,509 INFO [org.apache.hadoop.metrics.jvm.JvmMetrics] - Initializing JV ...

  10. jTemplates的教程,包括{#if}{#foreach}{#for}的简单使用

    最近在做一些局部刷新的分页工作,一般不使用既成的插件的话,就是在脚本里面重新渲染一个局部的html,把需要局部分页的模块重写一遍,还需要在控制器里再定义一个方法返回所需的局部数据,这种做法相当冗余,所 ...