软件测试基础四(服务端知识)
服务端基础
1. 系统架构介绍
1.1. CS 架构(Client/Server,客户端 - 服务器架构)
优点:
- 能充分发挥客户端 PC 的处理能力,部分工作在客户端处理后提交给服务器,客户端响应速度快。
- 操作界面可定制化程度高,能满足个性化要求。
- 可实现复杂业务流程。
- 安全性能相对容易保证。
缺点:
- 需要专门的客户端安装程序,部署和配置不便。
- 兼容性差,不同操作系统需开发不同程序。
- 开发、维护成本高,需专业技术人员。
- 一次升级需所有客户端更新程序。
1.2. BS 架构(Browser/Server,浏览器 - 服务器架构)
优点:
- 分布性强,客户端零维护,有网络和浏览器即可处理业务。
- 业务扩展方便,增加网页可增加服务器功能。
- 维护简单,改网页可同步更新所有用户。
- 开发简单,共享性强。
缺点:
- 个性化功能受限。
- 跨浏览器存在兼容性问题。
- 请求 - 响应模式,响应速度相对低。
- 在速度和安全性设计上成本高。
- 功能相对弱化,难以实现传统特殊功能要求。
1.3. CS与BS区别总结
- 效率:CS效率高,某些内容已经安装在系统中了,BS每次都要加载最新的数据
- 升级:BS无缝升级,CS删除老版本再安装新版本
- 安全:CS更安全,需要安装、注册、登录;BS有浏览器即可使用,安全程度低
- 开发成本:BS成本低,CS开发不同的系统需要不同的开发人员,成本高
2. 服务器介绍
2.1. 服务器定义
- 硬件层面:可理解为高性能电脑,安装软件后能对外提供服务。专业服务器需专业硬件和软件支持,性能高价格也高。
- 软件层面:运行在硬件服务器上为用户提供服务的计算机软件。在不同情境下,“服务器” 含义不同,可能指硬件、软件或提供服务的系统。
2.2. 软件服务器类型
- 文件服务器:在计算机网络环境中,供所有用户访问的文件存储设备,专门用于文件检索和存储。
- 数据库服务器:提供数据组织、存储和管理功能,如 Oracle、MySQL、Microsoft SQL Server 等。
- 邮件服务器:负责电子邮件收发管理的设备。
- FTP 服务器:在互联网上提供文件存储和访问服务,依照 FTP 协议工作。
- Web 服务器:严格意义上只处理 HTTP 协议,发送静态页面内容,常见的有 Nginx、Apache、IIS 等。
- 应用服务器:通过各种协议将商业逻辑暴露给客户端程序,一般也支持 HTTP 协议,可实现 Web 服务器功能,能处理业务逻辑,实现动态生成文档,常见的有 Tomcat、Weblogic、Jboss 等。
3. 编程语言介绍
3.1. 编程语言时代发展
- 低级语言时代:1946 - 1953,主要包括机器语言和汇编语言,被称为 “天书”。
- 高级语言时代:1954 至今,随着世界上第一个高级语言 Fortran 的出现,新编程语言不断涌现,如 BASIC、C 语言等。
- 面向对象时代:90 年代初至今,面向对象程序设计重要性凸显,特点为封装性、继承性和多态性,代表语言有 Java、Python。
3.2. Java 语言
- 面向对象编程语言,吸收 C++ 优点,摒弃多继承、指针等难理解概念。
- 功能强大且简单易用,具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。
- 可编写桌面应用程序、Web 应用程序、分布式系统和嵌入式系统应用程序等,在企业级应用中广泛用于电信、金融、交通、电商等大型项目平台建设。
3.3. Python 语言
- 跨平台计算机程序设计语言,高层次结合解释性、编译性、互动性和面向对象的脚本语言。
- 最初用于编写自动化脚本,随着版本更新和新功能添加,越来越多地用于独立大型项目开发。
- 相对 Java 更简单易学,主要应用领域有大数据、人工智能、科学计算和统计、网络爬虫、软件开发等。
4. 常见文件格式
4.1. XML(可扩展标记语言)
- 设计宗旨是传输数据而非显示数据,标签需自行定义,具有自我描述性,是 W3C 推荐标准,纯文本格式,后缀为.xml。
- 与 HTML 差异:XML 不是 HTML 的替代,XML 设计为传输和存储数据,关注内容;HTML 设计为显示数据,关注外观。
- 树形结构:文档从根部开始扩展到枝叶,第一行是 XML 声明,定义版本和编码。
- 语法规则:文档必须有根元素,所有元素须有结束标签,标签对大小写敏感,元素需正确嵌套,属性值须加引号,注释语法与 HTML 相似。
4.2. JSON(JavaScript 对象表示法)
- 基于文本、独立于语言的轻量级数据交换格式,全称 “JavaScript Object Notation”。
- 特点:语法简洁,易于阅读和编写,数据结构清晰。
- 语法规则:键必须是字符串类型,用双引号括起;值可以是数字、字符串、逻辑值(true 或 false)、数组、对象、null。
5. 版本管理
5.1. 定义与重要性
版本管理软件是一种用于管理文件、代码或其他数字资产的修改历史和版本的工具。它允许团队成员协作开发,跟踪每个版本的变化,恢复到以前的版本,并且能够有效地管理多个分支的开发。在软件开发、文档编写、设计等领域广泛应用,确保项目的稳定性、可追溯性和高效性。
5.2. 主要功能
5.2.1. 版本控制
- 记录版本历史
- 能够详细记录文件的每一次修改,包括修改的时间、作者、修改的内容摘要等信息。例如,在软件开发中,每次开发人员提交代码,版本管理软件都会记录代码的变化情况,如新增了哪些功能、修复了哪些Bug等。
- 版本标识与检索
- 为每个版本分配唯一的标识符,方便用户检索和比较不同版本。这些标识符可以是数字编号、时间戳或者是自定义的标签。例如,在Git中,可以使用提交哈希值(如
a1b2c3d4...
)来唯一标识一个版本,也可以使用标签(如v1.0
、v2.0
)来标记重要的版本。
- 版本比较与差异查看
- 可以直观地展示不同版本之间的差异。对于文本文件,通常会以行或字符为单位显示修改的内容,如新增的行、删除的行或者修改的行。这有助于开发人员快速了解版本之间的变化,在代码审查、故障排查等场景中非常有用。
5.2.2. 分支管理
- 创建分支
- 支持从主开发分支(如
master
或main
)创建新的分支。分支是独立的开发线路,可以用于开发新功能、修复Bug或者进行实验性开发,而不会影响主分支的稳定性。例如,开发团队可以为新功能开发创建一个名为feature - new - login - system
的分支,在这个分支上独立进行开发工作。
- 分支合并
- 当分支上的开发工作完成后,可以将分支合并回主分支或者其他目标分支。在合并过程中,版本管理软件会自动处理版本冲突(如果存在),并提供工具帮助用户解决冲突。例如,在将
feature - new - login - system
分支合并回master
分支时,如果主分支和新功能分支对同一文件的同一部分进行了不同的修改,就会产生冲突,需要开发人员手动解决。
- 分支并行开发
- 允许多个分支同时进行开发,提高团队的开发效率。不同的团队成员或团队可以在各自的分支上工作,互不干扰,最后再将各个分支的成果合并到一起。例如,一个大型软件项目可以有多个团队分别在不同的分支上开发不同的模块,如用户界面分支、数据库交互分支等。
5.2.3. 协作支持
- 用户权限管理
- 能够对不同的用户或用户组设置不同的权限。例如,在一个团队项目中,可以设置项目负责人具有完全的读写权限,开发人员具有读写自己分支的权限和只读主分支的权限,而外部合作伙伴可能只有只读特定分支或文件的权限。
- 多人协作开发
- 方便多个用户同时对一个项目进行开发。当多个用户修改同一个文件时,版本管理软件可以有效地管理这些修改,避免数据丢失或冲突。例如,通过锁定机制(部分软件采用)或者合并策略来确保多个用户的修改能够正确地整合到一起。
- 远程仓库支持
- 可以将本地的版本库与远程仓库进行同步。远程仓库通常存储在服务器上,方便团队成员共享和协作。例如,在Git中,开发人员可以将自己的本地代码仓库推送到像GitHub、GitLab等远程仓库平台,团队中的其他成员可以从远程仓库拉取最新的代码进行开发。
5.3. 常见的版本管理软件
5.3.1. Git
- 分布式架构
- Git是一个分布式版本控制系统,这意味着每个开发人员的本地机器上都有一个完整的版本库副本。这种架构使得开发人员可以在本地进行版本控制操作,如提交、分支管理等,即使没有网络连接也可以正常工作。例如,开发人员在出差途中没有网络时,仍然可以在本地仓库进行代码开发和版本管理,等有网络时再将本地修改同步到远程仓库。
- 基本操作
- 初始化仓库:使用
git init
命令在本地目录下创建一个新的Git仓库。例如,在一个新的项目文件夹中执行git init
,就可以开始使用Git进行版本管理。 - 添加文件和提交:通过
git add
命令将文件添加到暂存区,如git add file.txt
,然后使用git commit - m "commit message"
命令将暂存区的文件提交到本地仓库,其中"commit message"
是对本次提交的简短描述,用于记录版本变化的内容。 - 分支操作:创建新分支可以使用
git branch new - branch
命令,切换分支使用git checkout new - branch
命令,合并分支可以使用git merge
命令。例如,要将new - branch
分支合并到当前分支,可以执行git merge new - branch
。
- 与远程仓库协作
- 可以通过
git remote add origin remote - repository - url
命令添加远程仓库,其中remote - repository - url
是远程仓库的地址,如https://github.com/user/repository.git
。然后使用git push
命令将本地仓库的内容推送到远程仓库,使用git pull
命令从远程仓库拉取最新的内容。例如,在团队协作中,开发人员可以先git pull
获取最新的代码,然后进行开发,开发完成后git push
将自己的修改推送到远程仓库。
5.3.2. Subversion(SVN)
- 集中式架构
- SVN是集中式版本控制系统,它只有一个中心版本库存储在服务器上。开发人员通过客户端连接到服务器上的版本库进行操作。这种架构相对简单,管理比较容易,但开发人员必须连接到服务器才能获取完整的版本信息。例如,在公司内部网络中,所有开发人员通过公司的服务器上的SVN版本库进行代码管理。
- 基本操作
- 检出仓库:使用
svn checkout repository - url
命令从服务器上的仓库检出项目到本地目录,开始在本地进行开发。例如,svn checkout https://svn.example.com/project
会将服务器上project
项目的最新版本下载到本地。 - 提交和更新:通过
svn commit - m "commit message"
命令将本地修改提交到服务器上的版本库,通过svn update
命令从服务器更新本地文件到最新版本。例如,开发人员完成一个功能开发后,使用svn commit
将修改提交,然后在需要获取其他开发人员的修改时,使用svn update
更新本地文件。
- 版本管理特点
- SVN使用版本号来标识每个版本,版本号是一个递增的整数。在查看版本历史和比较版本差异时,通过版本号进行操作。例如,
svn diff - r version1:version2
可以查看版本version1
和version2
之间的差异。
5.3.3. Mercurial
- 分布式架构与特点
- Mercurial也是分布式版本控制系统,和Git类似,它具有高效、灵活的特点。它提供了简单易懂的命令行接口和图形界面工具,方便不同类型的用户使用。例如,对于初学者来说,Mercurial的命令可能更容易理解和掌握。
- 基本操作
- 创建和克隆仓库:使用
hg init
命令创建一个新的本地Mercurial仓库,使用hg clone repository - url
命令克隆远程仓库到本地。例如,hg init my - project
创建一个名为my - project
的本地仓库,hg clone https://bitbucket.org/user/project
克隆一个远程仓库到本地。 - 提交和推送/拉取:通过
hg commit - m "commit message"
命令提交本地修改,使用hg push
命令将本地修改推送到远程仓库,使用hg pull
命令从远程仓库拉取修改。例如,在开发过程中,开发人员先hg commit
提交自己的修改,然后通过hg push
和hg pull
与远程仓库进行同步。