深入理解B/S与C/S架构
首先来介绍一下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方式的,其实很类似
- 建立客户端的socket,确定要连接的服务器的主机名和端口
- 发送连接请求到服务器,并等待服务器的回馈信息
- 连接成功后,与服务器进行数据的交互
- 数据处理完毕后,关闭自身的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 安装/卸载测试
- C/S结构通常我们先要安装(其实也可以不用安装,直接运行exe文件,也就是我们所说的绿色版本,具体可以根据实际需要),安装界面,路径,安装后的功能是否可用,重复安装,安装失败后是否回滚等等均在测试范围之类。
- 有安装就有卸载,windows自带了一个卸载功能,c:\windows\system32\msiexec.exe,我们在生成安装包的同时可以调用此文件。当然也可以使用第三方的卸载工具,如360卸载等。
l 快捷键的使用
Windows操作习惯性讲究快捷,所以通常用户会在常用模块要求使用快捷键来操作
l UI测试
Web程序同样也会考虑到UI测试,在这里主要是考虑异于web的地方。例如窗口的缩放,拖动,任务栏管理器的启用与禁用,以及多窗口的操作及排列等,通常都是要符合windows的操作习惯。
l 明显的性能问题
通常在对程序最小化后系统资源占用多少有一定要求,或者允不允许同时打开多个进程,运行长时间后系统出现卡死等明显的性能问题均在考虑范围之内
深入理解B/S与C/S架构的更多相关文章
- 理解vuex的状态管理模式架构
理解vuex的状态管理模式架构 一: 什么是vuex?官方解释如下:vuex是一个专为vue.js应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证以一种可预测的 ...
- 《深入理解mybatis原理》 MyBatis的架构设计以及实例分析
作者博客:http://blog.csdn.net/u010349169/article/category/2309433 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简 ...
- 深入理解java:5. Java分布式架构
什么是分布式架构 分布式系统(distributed system)是建立在网络之上的软件系统. 内聚性是指每一个数据库分布节点高度自治,有本地的数据库管理系统. 透明性是指每一个数据库分布节点对用户 ...
- 深入理解Tomcat系列之一:系统架构(转)
前言 Tomcat是Apache基金组织下的开源项目,性质是一个Web服务器.下面这种情况很普遍:在eclipse床架一个web项目并部署到Tomcat中,启动tomcat,在浏览器中输入一个类似ht ...
- 《深入理解Nginx:模块开发与架构解析》(一)
第1章 研究 Nginx 前的准备工作 1.1 Nginx 是什么 Web 服务器的基本功能:基于 REST 架构风格,以统一资源描述符(URI)或者统一资源定位符(URL),作为沟通依据,通过 HT ...
- 《深入理解Nginx:模块开发与架构解析》读书笔记
1.nginx的特点:快.扩展性强.可靠性强.内存低消耗.支持高并发.热部署.开源免费 2.nginx由master进程来管理多个(CPU数)worker进程 3.配置按功能分,有4类: 1)用于调试 ...
- LInux基础(04)项目设计一(理解链表管理协议的代码架构)
要设计好一个项目必须要有一个健全的代码框架 一个结构体内有数据域和处理数据的函数指针, 先实现管理链表的函数 增加节点 删除节点 清空链表 遍历节点对每个节点进行操作 再实现协议的注册 把对象s ...
- 关于一致性hash,这可能是全网最形象生动最容易理解的文档,想做架构师的你来了解一下
问题提出 一致性hash是什么?假设有4台缓存服务器N0,N1,N2,N3,现在需要存储数据OBJECT1,OBJECT2,OBJECT3,OBJECT4,OBJECT5,OBJECT5,OBJECT ...
- 《深入理解mybatis原理1》 MyBatis的架构设计以及实例分析
<深入理解mybatis原理> MyBatis的架构设计以及实例分析 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单.优雅.本文主要讲述MyBatis的架构 ...
随机推荐
- Unable to read the project file 'client.csproj'. Could not load file or assembly 'Microsoft.Build.En
错误具体信息: Unable to read the project file 'client.csproj'. Could not load file or assembly 'Microsoft. ...
- Android实战简易教程-第六十六枪(server端搭建和server端Json数据交互)
学习Android有一段时间了.对server端有非常深的好奇,决定对server端的实现进行一些研究,这里实现了一个简单的小样例,用于获取server端的json数据,样例非常easy,适合刚開始学 ...
- 认证 协议 JWT OAuth Session Cookie
本文翻译自Auth-Boss. 如果有翻译的不恰当或不对的地方, 欢迎指出. 成为一个认证老司机, 了解网络上不同的身份认证方法. 本文档的目的是记录和编目Web上的身份验证方法.认证指的是创建一个系 ...
- 编程基础知识——C++能不能支持Java和ObjC的反射?
C++能不能支持Java和ObjC的反射? 要回答这个问题.首先我们要清楚什么是反射.什么是反射? 教科书的解释我就不说了,(^o^)事实上我也记不得.实际开发应用的反射就是在没有某个类型的头文件或者 ...
- Mule ESB-3.Build a webservice proxy
自从引入ESB后,系统之间不再直接依赖.我负责的这块,主要是解决Webservice的问题.使系统A不再直接依赖系统B的Webservice. 我们选择的产品是Mule ESB.所以自然要使用Mule ...
- c#为程序添加全局热键的方法
在程序失去焦点或者在后台运行时,可以通过使用全局热键的方式,进行一些快捷的操作,如QQ默认操作中ctrl+alt+A调出截图功能. 在Windows中实现热键功能需要使用win32的Api函数Regi ...
- 读入图片显示scipy.misc module has no attribute imread?
>>> import scipy >>> scipy.misc <module 'scipy.misc' from 'C:\Python27\lib\site ...
- Qt5.9 WebChannel
Qt WebChannel enables peer-to-peer communication between a server (QML/C++ application) and a client ...
- ROW_NUMBER() OVER()函数用法;(分组,排序),partition by (转)
1.row_number() over()排序功能: (1) row_number() over()分组排序功能: 在使用 row_number() over()函数时候,over()里头的分组以及排 ...
- MVP演化论
本文是翻译MVP: Model-View-Presenter The Taligent Programming Model for C++ and Java(Mike Potel)文章的摘要.该文介绍 ...