软件测试基础理论
作者:互联网
软件测试基础理论
- 1 什么是软件测试
- 2 测试目的
- 3 软件测试的原则
- 4 软件测试分类
- 5 软件开发和测试模型
- 6 软件产品质量模型
- 7 软件架构
- 8 浏览器
- 9 常见的图片格式
- 10 域名、服务器和URL
- 11 网站访问过程
- 12 接口和功能测试关系
- 13 数据库和功能测试关系
1 什么是软件测试
通过手工或工具对被测对象进行测试操作,从而验证实际结果与预期结果之间是否存在差异。即从需求评审开始,到制定测试计划,测试用例设计,测试执行,再到最后测试问题的回归和关闭这一系列过程。
质量:软件开发完成经测试后,符合需求规格的程度,即满足用户需求的程度。
错误:测试过程中发现的与预期结果不符的一系列问题(不满足需求规格),以及影响用户体验和使用的任何问题。
80/20原则:80%的错误集中在20%的模块中(一个经常出错的模块,即使BUG被修复,这个模块还是可能极不稳定,产生新的BUG)
2 测试目的
用尽可能少的人力物力,找到缺陷,避免损失,降低商业风险:
- 通过发现并修复软件中存在的缺陷,从而提高用户对软件的使用信心。
- 通过记录软件使用过程中的一些数据,为决策提供依据。
- 测试操作可以降低同类型开发的风险。
3 软件测试的原则
(1)测试证明软件存在缺陷:不能证明它没有缺陷
(2)不能执行穷尽测试:具体的测试操作不可能将所有情况都一一罗列,所以测试工作肯定是有终止的时候。
(3)测试应尽早介入:一般不要在开发完成之后才执行测试,这样不利于缺陷的尽早发现。
(4)缺陷存在群集现象:对于一款软件来说核心的功能只占20%,所以在测试的时候我们会花更多的时间专门测试这些功能,因为它里面暴露缺陷的可能就会更大一些
(5) 某些测试操作依赖于特定的环境
(6)杀虫剂现象:不要过多的使用同一条测试用例来对软件进行问题查找
(7)不存在缺陷谬论:任何软件都不可能是完美的
4 软件测试分类
4.1 按测试阶段
4.1.1 单元测试
即模块测试,对程序最小模块的测试,可能是一个函数,也可能是一个类或窗口。目标是确保模块被正确的编码,使用过程设计描述作为指南,对重要的控制路径进行测试以发现模块内的错误,通常情况下是白盒的,对代码风格和规则、程序设计和结构、业务逻辑等进行静态测试,及早的发现和解决不易显现的错误。
4.1.2 集成测试
多个模块组装到一起进行测试,关注模块与模块间的接口。通过测试发现与模块接口有关的问题。目标是把通过了单元测试的模块拿来,构造一个在设计中所描述的程序结构,应当避免一次性的集成(除非软件规模很小),而采用增量集成。
自顶向下集成:模块集成的顺序是首先集成主模块,然后按照控制层次结构向下进行集成,隶属于主模块的模块按照深度优先或广度优先的方式集成到整个结构中去。
自底向上集成:从原子模块开始来进行构造和测试,因为模块是自底向上集成的,进行时要求所有隶属于某个给顶层次的模块总是存在的,也不再有使用稳定测试桩的必要。
4.1.3 系统测试
把系统看成整体测试,测试依据为需求规格说明书
(1)界面/UI测试:测试页面布局是否合理,整体风格是否一致,界面文字是否正确,命名是否统一,页面是否美观,文字颜色图片的组合是否完美等。
(2)功能测试:软件呈现给用户的功能点是否正常使用,是否满足需求文档的内容。
(3)易用性测试:站在用户的角度测试软件好不好用,是否容易操作
(4)性能测试: 测试软件在不同的环境和压力下是否正常运转。
(5)安全测试:防止非法侵入的能力。
(6)兼容性测试: 软件与其他软件的兼容能力,主要指与浏览器的兼容,包括分辨率的兼容
4.1.4 验收测试
检验软件是否符合用户需求,站在用户角度测试
(1)α测试:α 是内测交流版本,通常只在软件开发者内部交流,一般该版本的BUG较多,普通用户最好不安装,α测试是由用户在开发者的场所来进行的,也可以是公司内部的用户在模拟实际操作环境下进行的测试,在一个受控的环境中进行,非正式的验收测试。
(2)β 测试:β 是公测版本,面向所有用户,通常免费发布,通过用户反馈修改细节,是在实际环境中的测试,或者公司内部人员在模拟真实环境中的测试。
由软件的最终用户在一个或多个用户场所来进行的,开发者通常不在现场,用户记录测试中遇到的问题并报告给开发者,开发者对系统进行最后的修改,并开始准备发布最终的软件。
(3)γ 测试: γ是候选版本,与正式软件几乎无异
4.2 按是否查看源代码
4.2.1 黑盒测试
黑盒测试只关注功能,不关注功能的具体实现方式。一般能发现功能不对或遗漏、界面错误、数据库访问或处理错误、性能问题等问题。
(1)功能测试:逻辑功能测试、界面测试、易用性测试、安装测试、兼容性测试
(2)性能测试:时间性能(事物响应时间等)、空间性能(系统资源消耗)、一般性能测试、稳定性测试、负载测试、压力测试
负载测试:通过负载测试来确定在各种工作负载下,系统各项性能指标的变化情况
压力测试:通过确定一个系统的瓶颈或者刚好不能接受的性能点,来获得系统能够提供的最大服务级别
4.2.2 白盒测试
不但关注功能,还要关注是怎么实现的,研究里面的程序结构和源代码。
4.2.3 灰盒测试
介于白盒和黑盒之间的测试,关注接口。
4.3 按是否运行
4.3.1 静态测试
不运行软件,静态观察软件是否符合预期,静态地检查程序代码、界面或文档中可能存在的错误过程。
4.3.2 动态测试
在运行过程中测试,输入相应的测试数据,检查实际输出结果和预期结果是否相符的过程。
4.4 是否自动化
4.4.1 手工测试
4.4.2 自动化测试
通过程序自动测试程序是否有问题。
4.5 其他测试
4.5.1 冒烟测试
通过冒烟测试对软件最基本的流程和功能做一个粗略测试,看基本流程能否跑通。测试拿到研发的第一个版本,一般先执行冒烟测试。
4.5.2 回归测试
回归测试是指在发生修改之后,重新测试先前的测试用例,以保证修改的正确性。
回归测试场景:
(1)开发修改完BUG后:
将之前发现BUG的用例重新执行一次,从而验证该问题已修复,之后关闭对应的BUG;同时,还需要验证和此BUG有依赖关系的场景用例是否正常。
(2)上线前:
- 系统若已比较稳定,可根据8/2原则选择要回归的用例,根据各模块缺陷的情况,将出现问题较多的模块进行回归测试,不多的模块,将缺陷相应的功能点进行回归。
- 业务程度复杂、用户使用较频繁的功能模块进行回归测试。
4.5.3 随机测试
对重要功能进行复测。
4.5.4 探索性测试
一边了解和学习项目,一边测试项目。
5 软件开发和测试模型
5.1 开发模型
5.1.1 瀑布模型
(1)模型阶段
概要设计主要关注:系统架构、模块划分、模块与模块间的接口。
详细设计主要关注:模块内部实现的逻辑和方法、类和类关系,类的设计、函数设计、各接口细节、数据库表的关系、字段关系。
(2)模型优点:
- 开发各阶段清晰
- 强调早期计划及需求调查
- 适合需求稳定的产品开发
(3)模型缺点:
- 依赖于早期需求调查,不适应需求变化
- 风险往往延至后期才发现,失去及早纠正的机会
- 单一流程不可逆
- 前面未发现的错误会传递并扩散到后面的阶段,可能导致项目失败
5.1.2 快速原型模型
(1)模型阶段
实现一个基本原型,让用户对其评价,逐步调整,使其满足最终需求(快速构建软件原型,支持用户参与)。
(2)模型优点:
- 克服瀑布模型的缺点,更好满足用户的需求,并减少软件需求不明确带来的开发风险
- 适合不能预先确定需求的软件开发
(3)模型缺点:
- 不适合大型项目的开发,只适合开发小型、灵活度高的系统
- 前提要有一个展示性的产品原型
5.1.2 螺旋模型
(1)模型阶段:
螺旋模型的每一个周期都包括需求定义、风险分析、工程实现和评审4个阶段,由这4个阶段进行迭代。螺旋模型基本做法是在“瀑布模型”的每一个开发阶段前引入一个非常严格的风险识别、风险分析和风险控制,它把软件项目分解成一个个小项目。每个小项目都标识一个或多个主要风险,直到所有的主要风险因素都被确定。
(2)模型优点:
- 引进了风险分析
(3)模型缺点:
- 风险分析需要专业的知识和成本
- 在项目较大的项目开发中,如果未能及时标识风险,势必造成重大损失
- 过多的迭代次数会增加开发成本,延迟交付时间。
5.2 测试模型
5.2.1 V模型
(1)模型阶段:
(2)模型优点:
- 既包含了底层测试又包含了高层测试
- 每个步骤都是文档驱动
(3)模型缺点:
- 当需求变更时会发生阶段反复,返工量大,模型灵活性较低
5.2.2 W模型
(1)模型阶段:
(2)优点:
- 强调测试伴随整个研发周期,而且测试的对象不仅仅是程序,需求和概要设计同样需要测试
- 更早介入测试,可以发现开发初期的缺陷,可以用更加低的成本进行缺陷修复
(3)缺点:
- 使用起来技术复杂度高,对需求和设计的测试要求高,实践起来困难
- 依赖于软件开发和软件测试依然保持一前一后的线性关系,依然无法支持迭代、自发性和需求等变更调整
- 对于当前很多项目,在执行的过程中不产生文档,W模型基本无法适用
6 软件产品质量模型
软件质量是软件满足各种干系人需要并提供价值的程度。软件质量相关的可测量属性通常称为质量特性。一般来说会使用三个质量模型来评估软件,分别是使用质量模型、产品质量模型和数据质量模型。
7 软件架构
7.1 B/S结构
WEB服务器软件:Apache、iis、ngnix
PHP服务软件(PHP-fpm中间件)、JAVA服务软件(tomcat中间件)
前台通过浏览器向WEB服务器发送请求,Apache若能处理请求,则处理请求后返回处理结果,若不能处理,则分配请求任务给PHP服务软件,PHP服务软件判断这一请求的合理性,若不合理则向Apache返回错误信息,若合法则由PHP服务软件处理后将结果返回给Apache,由Apache把处理结果返回给浏览器。
web服务器:一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以处理浏览器等Web客户端的请求并返回相应响应,也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。
PHP服务器:一般指装有apache&php&mysql这三种软件的服务器/电脑。
7.2 C/S结构
用户执行的操作和请求客户端可以自己处理,则不需要向数据库服务器发送请求,反之则需要向数据库服务器发送请求,待数据库软件在接收请求执行相应操作后,把结果返回给客户端。
7.3 B/S结构和C/S结构比较
- 标准:对于B/S架构来说,无论是浏览器还是服务器都有现成的软件供我们去使用,而C/S架构中的客户端一般都由开发者自定义开发完成,所以相对来说B/S开发要标准一些
- 效率:因为B/S架构当中,所有的数据处理操作都发生在服务器端,而C/S的客户端是可以来分担一些服务器数据处理工作的,因此相对来说C/S的处理效率会高一些
- 升级:B/S架构只需要将服务器进行更新,前台页面会自动刷新,而C/S架构升级就必须将两端都重新制作,下载安装才可以使用
- 安全性:相对于C/S架构来说,B/S的安全性相对会低一些
- 开发成本:因为浏览器不需要我们开发,所以成本相对更低一些
8 浏览器
浏览器本身是一款安装在操作系统上的软件,一般用于浏览网页。
目前来说,市面上存在五大浏览器生产厂商,分别是IE、Firefox、Chrome、Safari、opera。
而对于浏览器这款软件来说,最核心的技术是浏览器内核
浏览器内核:
- Trident:IE浏览器内核
- gecko:火狐浏览器内核
- blink:Chrome浏览器内核
- webkit:Safari内核
- presto:这个内核已停止更新,用于opera,现在这款浏览器使用bink内核
9 常见的图片格式
- jpg:颜色信息比较丰富的一种图片格式
- png:可以支持透明的一种图片格式
- gif:支持动图,占用体积小
- psd:分层的图片
10 域名、服务器和URL
10.1 域名
是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识(有时也指地理位置)。
是为了方便用户去记忆,而自己设计的一个名字,一般需要花钱购买。IP地址不方便记忆并且不能显示地址组织的名称和性质等等,通过网域名称系统(DNS)可以将域名和IP地址相互映射,使人更方便地访问互联网。
一般分为3个部分:
-
一级域名/顶级域名:最右边的字符组;顶级域名又分国家和地区顶级域名(例如中国是.cn)、通用顶级域名(表示工商企业的.com,表示网络提供商的 .net)、新顶级域名(如通用的.xyz、代表“高端”的.top)。
-
二级域名:倒数第二组,在国际顶级域名下,一般是指域名注册人选择使用的网上名称,如“yahoo.com”;上网的商业组织通常使用自己的商标、商号或其他商业标志作为自己的网上名称。国家顶级域名下,一般是指类似于国际顶级域名的表示注册人类别和功能的标志。例如,在“.com.cn”域名结构中,“.com”此时是置于国家顶级域名“.cn”下的二级域名,表示商业性组织,以此类推
-
三级域名:倒数第三组,当做是二级域名的子域名
域名服务器(DNS):是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。把域名翻译成IP地址的软件称为域名系统。
域名解析:域名到IP地址的转换过程。
域名和服务器一样都需要花钱购买,国内常见的服务商有:万网,新网。西部数据,美橙互联等。
10.2 服务器
一种管理计算资源的计算机,它比普通计算机运行更快、负载更高、价格更贵,在网络中为其它客户机(如PC机、智能手机、ATM等终端甚至是火车系统等大型设备)提供计算或者应用服务。一般来说服务器都具备承担响应服务请求、承担服务、保障服务的能力。
10.3 URL
即统一资源定位符,是用户写在浏览器地址栏的一长串字符,它由 协议://域名:端口号/路径/具体的文件名
组成
11 网站访问过程
step1: 在浏览器中输入URL
step2: URL通过解析找到相应的IP(查找IP首先会从本地hosts文件开始,如果找不到则去DNS服务器查找)
step3: 如果DNS找到了目标IP,浏览器先发向服务器发送一个测试请求,通过之后再发送正式请求
step4: 服务器接收到正式的请求之后,会进行验证,若验证通过,则帮我们找到当次请求想要的文件
step5:服务器开始处理我们想要的文件,在这个过程中可能会用到数据库中的数据
step6:当服务器将文件处理完毕之后,通过HTTP协议还给浏览器(此时浏览器就用自己的渲染引擎来进行渲染展示)
12 接口和功能测试关系
API接口:即应用程序编程接口(API),以HTTP协议形式提供,定义了输入、输出、功能描述的服务。
接口和客户端功能测试的关系:
- 客户端通过调用服务端提供的接口来获取数据
- 客户端功能测试过程中需要和接口交互场景
- 客户端测试过程中发现bug,需要排查是前端代码问题还是服务端代码问题
- 客户端测试过程中需要借助接口调用造一些返回数据,辅助客户端功能测试
- 跳过客户端代码的验证限制,直接访问服务端
- 仿真弱网环境,进行弱网测试
13 数据库和功能测试关系
- 通过SQL语句操作数据库中的表,为测试提供数据
- 做界面中的某些数据统计测试(预期结果就是通过SQL语句统计到的数据,实际结果就是界面显示数据)
- 有些BUG可以明确的测试到,但不能定位具体的模块,可以通过SQL语句查询数据表中数据具体的值来定位BUG具体模块
- 可以不删除表,不重建表,保留表中的数据,给表添加或者删除字段
标签:浏览器,模块,模型,域名,测试,软件,基础理论,软件测试 来源: https://blog.csdn.net/qq_38684868/article/details/122600695