一、测试分类依据
1.按开发阶段分
按照开发阶段主要分为以下5个阶段,刚好对应的是软件测试V模型 (1)单元测试:
单元测试就是对组成软件的最小单元进行测试 。目的是检验构成整个软件的基本单元是否完成相应的功能,它又被叫做莫魁岸测试。形象理解:现在要组成一辆汽车,那么组成汽车的每一个螺丝就相当于软件中的一个单元。
- 测试阶段:编码前或者编码后
- 测试对象:组成整个软件中的最小模块
- 测试人员:开发人员或白盒测试工程师
- 测试依据:代码注释 + 详细设计文档
- 测试方法:白盒测试
- 测试内容:模块接口,内部逻辑、数据结构、边界测试、路径测试等
(2)集成测试:
集成测试是在单元测试完成之后 进行测试的,主要是将程序的模块再用适当的集成策略组装起来,对系统的接口 和集成后的功能进行测试,测试软件单元之间的接口是否正确。形象的理解:就是造汽车的每一个螺丝都要安装到哈市自己的位置。螺丝本身和螺口之间的匹配就相当于是一个接口,看造的螺丝是否能套到文档规定的螺口中,看看组装好的物体是否符合要求。
- 测试阶段:单元测试之后进行
- 测试对象:模块间的接口
- 测试人员:白盒测试工程师或开发人员
- 测试依据:单元测试模块 + 概要设计文档
- 测试方法:白盒测试 + 黑盒测试
- 测试内容:模块之间数据的交互、模块之间冲突性,单个模块对系统的影响等。
(3)系统测试:
将软件看成一个系统,对根据需求文档整个系统进行完整的测试 。不仅包含软件还包含硬件测试 ,将实际运行环境搭建出来进行测试的,包含对实现的功能、性能、安全性、环境等方面的测试。系统测试里边包含冒烟测试和回归测试。形象理解:就是汽车已经造好了,下边厂家先要自己对自己汽车的性能。功能、安全性等做一个全方位的检测。
- 测试阶段:集成测试通过之后
- 测试对象:整个完整的体系
- 测试人员:黑盒测试工程师
- 测试依据:需求规格说明文档
- 测试方法:黑盒测试
- 测试内容:软件要实现的所有功能,如:功能、性能、界面、可靠性、安全性、兼容性、易用性等
(4)验收测试:
软件测试的最后一个阶段 ,为了确保软件准备就绪,按照双方规定的文档完成了客户提出的需求。它决定了客户是否接受这个软件。
- 测试阶段:体统测试通过后
- 测试对象:整个系统,包含软硬件
- 测试人员:需求方或最终用户
- 测试依据:用户需求,验收标准
- 测试方法:黑盒测试
- 测试内容:软件的所有功能,性能、固定的文档
(5)回归测试:
在软件进行更新,迭代之后 ,新增加的内容和原来旧的功能进行测试。
(6)冒烟测试:
在测试硬件的时候最基本的操作就是,硬件插电之后会不会烧掉,冒不冒烟。要是冒烟了就没必要在详细测下去了。对应的软件中就是测试最基本的功能 ,通过之后在看其他的所有功能是否正确。
2.按测试实施组织分
(1)α测试
属于验收测试,就是把用户请到公司内部来,在开发者的环境下进行 。α测试是由用户测试的,测试和开发人员不得参与 。
(2)β测试
属于回归测试,指的是在不同场所下的测试。 将好多用户,在一个或者多个场所中进行测试。
(3)第三方测试
介于开发方和用户方间组织的测试。
3.按测试执行方式分
(1)静态测试
结合字面意思理解:静态就是不动,就是不运行程序本身, 根据需求文档,对代码的逻辑、结构、语法等进行检查、分析、找错。
(2)动态测试
就是动的,指的是程序运行起来,检查运行后的结果和预期记过是否有差别 ,并分析程序执行效率、正确性、健壮性分析。它由三部分组成:编写测试用例、执行程序、分析结果、
4.按是否查看代码分
(1)白盒测试
白盒测试:白色的盒子,就是能看见里边的东西。因此就是要分析代码的实现过程,分析内部执行顺序、逻辑功能、结构设计等
白盒测试方法: 语句覆盖法、逻辑覆盖法、分支覆盖法、循环覆盖法、路径覆盖法等
(2)黑盒测试
黑盒测试:将代码放在一个黑色的盒子里边进行测试。就是不关心代码内部实现过程 ,不用分析代码内部具体机构。只需要把代码看成是一个黑色的盒子。只关心代码运行的最终结果
黑盒测试方法: 等价类、边界值、因果图、正交法、场景设计法、错误猜测法
(3)灰盒测试
介于白盒和黑盒测试之间,不仅要关心输入输出结果。还要关心代码内部实现过程。多用于集成测试
5.按是否手动执行
(1)手工测试
以人为本 ,人按照要求的文档规范,对测试用例进行设计,手动一个一个输入测试用例,观察结果。
(2)自动化测试
简单的讲:就是将人进行手工测试的过程转换成一种代码,直接让机器去执行。这样大大的提高了效率,解放了人。
6.按测试对象分
(1)业务测试
测试人员把系统的所有模块组合起来,模拟用户实际运行过程,对满足用户需求的程序的所有功能进行测试。
(2)界面测试
又叫做UI测试,完成的操作是:对页面布局,颜色搭配,整体色调,风格的测试。
(3)容错性测试
主要包含两个方面:应对小错误的测试和应对灾难性错误的测试。
- 应对小错误的测试:叫做出入异常数据或进行异常操作。比如输入内容的类型不对,格式不符,范围有误,网络卡顿状态下等等。
- 应对灾难性问题的测试:让软件直接崩溃,或者服务器直接停止运行。检查里边的数据是否还在,是否能在最短时间内恢复好。
(4)文档测试
主要测试文档的术语、格式、完整性、一致性、易用性等
(5)兼容性测试
在每次迭代、更新、修改bug之后都要进行。最常见的就是浏览器的兼容性测试,因为不同的浏览器在解析css和js时会导致页面的显示不同。
(6)易用性测试
简单的理解就是,看方不方便用户使用。比如在登录的时候,就不能把登录按钮放在一个很偏,很小的地方。虽然能用,但是用户体验感太差。
(7)安装测试
测试一个软件的安装和卸载过程。
(8)安全测试
测试软件应对所有恶心攻击的操作,入SQL注入等。
(9)性能测试
还是看软件所具备的性能是否满足需求规格说明里边的所有性能,通常表现为以下几点:
(10)内存泄露测试
在讲JVM中有提到,就是没有对无用的数据进行释放,导致可用的内存空间越来越少,持续下去一点会产生OOM。
7.按测试地域分
分为:国际化测试和本地测试 前者是不同软件在不同国家上线完成的功能是否和本地上线完成的功能相同。刚写的所有的测试都是基于后者的。
二、常见面试题
重在理解,别硬背!!! 重在理解,别硬背!!! 重在理解,别硬背!!!
1.谈一下白盒测试和黑盒测试的区别,两者的测试方法有哪些?了解灰盒测试吗?
(1)先看图(图片来源于作者: ruthy_wei) 由图我们能清楚的了解到白盒测试和黑盒测试的区别 (2)白盒测试
- 理解:就像图中展示的一样,中间有一个盒子,盒子里边装的是代码。因为它是透明的,测试人员能看见里边的代码。这样的测试叫白盒测试。
- 是什么:
白盒测试指测试人员不光要关心输入和输出还要关心代码的内部实现过程,对内部的结构也要进行测试。 - 白盒测试方法:(
总体分为静态测试和动态测试 )。动态测试下边又分为:条件覆盖法、语句覆盖法、循环覆盖法、逻辑覆盖法、路径覆盖法。
(3)黑盒测试
- 理解:代码在盒子里边,但是盒子是黑的。因此测试人员不用关心代码的内部实现过程。只需要看输入和输出即可。
- 是什么:黑盒测试人员不用关心程序内部代码的实现过程,颞部结构。只需要关心输入和输出是否符合需求文档规范即可。
- 黑盒测试方法:等价类、边界值、因果图、正交法、场景设计法、错误猜测法。
(4)灰盒测试 - 含义:介于白盒测试和黑盒测试之前的一种测试方法。既要关心输入和输出,又要关心内部的逻辑结构。
2.软件测试按开发阶段划分为哪几类?你认为这几类中最重要的是哪个?
(1)根据开发阶段分为5类:
分别为:单元测试、集成测试、系统测试、验收测试、回归测试
(2)系统测试最重要
首先在进行系统测试的时候,单元测试和集成测试已经完成了 。这就能保证构成软件的最小功能正确,并且能够保证模块与模块之间的接口也都OK。其次我认为:开发软件就是为了能满足用户提出的需求文档的所有功能,提供一个可交付的软件。那么系统测试就是对软件的全部功能进行测试,里边覆盖系统的所有联合部件,是针对整个软件系统进行完成整的、全面的测试的。除此之外它还能验证软件实现的功能是否能满足需求文档规范的功能。 由此看来它的作用很大,因此我认为在这几个测试中,系统测试很重要。
3.谈谈α和β测试是什么,两者区别是什么?
(1)α测试:
首先α测试是用户来进行测试的,不能有开发人员或者测试人员完成 。在测试的时候,用户会被邀请到公司中,在开发环境中进行测试
(2)β测试:
β测试是一种验收测试 ,它要求的软件的最终用户们,在一个或者多个场所下对软件进行测试。
(3)两者区别
4.请谈一谈自动化测试和非自动化测试的优缺点。
(1)自动化测试
自动化测试就是把将人手工测试的全过程,通过代码的编写,让机器去执行。进而解放了人的双手,提高了效率
(2)非自动化测试
就是手工测试,编写测试用例,一个一个去进行测试,并观察最终的结果。
(3)自动化测试优点
- 最大的优点就是
提升了工作测试效率: 试想,用一个机器设定好测试的结构让机器去执行远远比人的效率更高。只要脚本设计可靠信高,机器在执行的时候不管是运算、输入都比人快的多。 让回归测试更方便: 产品在发布之后,并不是一成不变的。它会根据用户的使用,改进或者增添新的功能,新功能的引入势必会牵扯到回归测试。因为自动化在回归测试的上一次已经对大部分功能测试编写好了脚本,后边回归测试时只需要简单的改一下脚本就好,让回归变得更方便。能腾出更多的资源: 说白了还是提升了效率。只要自动化测试脚本编写好了之后,测试人员直接启动机器,机器自己测试即可。此时就腾出了人,可以让人去做别的事情,提高工作效率。抗错误能力好 :手工测试,只要是人来进行的事情就有可能出错。但是机器执行就避开了这一点,只要你测试脚本写的没问题,机器从来不会因为工作时间长或者工作疲惫而造成错误。
(4)自动化测试缺点
- 最大的缺点就是
没有探索性,一根筋: 由于是机器执行,根本不会对测试进行改进。人们设置啥,他就执行啥,在实际测试过程中,可能人在测试的时候突然想到了更好的测试方法,或者出现了新的测试点。但是自动化测试时完全做不到。 永远不能替代手动测试: 这点毋庸置疑,因为它就是因为人才能存在的,永远代替不了人。会制约软件开发 对测试质量的依懒性很大: 依赖人编写的脚本,因此脚本的质量直接决定这测试的最终结果。
(5)手工测试优点
- 主要是
能进行探索性测试: 能够在测试的过程中发现新的测试垫子。 能及时止损: 一旦在刚开始发现错误就会进行处理,不想自动化那样,,一股脑的进行- (6)手工测试
缺点 执行效率低: 用人去手动的做一件事情,效率会比较慢。不能模拟大数据测试: 人手动输入的数据量是有限制的,不能模拟大数据的输入进行压力测试。出错性高: 还是那句话:“凡是人做的事情,都有可能出错” 。在循环的做一件事情的时候,对人的生理还是心理都是一个挑战,总有出错的可能
5.集成测试和系统测试的区别是什么,两者分别适用于那些场景?
(1)区别 先给大家来一张图,方便后边讲解:
-
测试用例的个数不同: 集成测试:要求测的相比于系统测试,测试点更细,所以集成测试的测试用例要多于系统测试。 -
测试用例的编写顺序不同: 由上边的软件测试V模型能看出,左边和右边都是意义对应关系。在左边是先进行需求分析与系统再进行概要设计的。因此对应右边在编写用例的时候就要先进行集成测试用例的设计,在进行系统测试用例的编写。 -
用例的粒度不同: 集成测试比系统测试的测试点要更多,所以集成测试的用例设计更详细 -
执行的顺序不同: 还是由软件测试V模型可知,先进行集成测试,再进行系统测试。
(2)应用场景
- 集成测试:在单元测试完成之后,主要做的事情是
对各个模块直接接口的测试 ,它可以是整个产品的集成测试,也可以是大规模的集成测试。一般采用黑盒测试和白盒测试相结合 的手段来进行 - 系统测试:在
单元测试和集成测试都通过之后 。指的是对软件的整个功能模块进行测试,要模拟用户用户实际场景 。看开发的软件是否符合需求文档规定。
6.说一说什么是静态测试,什么是动态测试?
(1)静态测试
这里的静和动就是不运行和运行代码。静态测试就是在不运行代码的情况下,让人分析代码的语法结构、代码质量、文档测试等。
(2)动态测试
在程序运行起来后,分析运行结果、性能、接口、内存、覆盖率等
三、总结
今天我们主要学习了,软件测试在不同场景下的划分。并且讲解了基于软件测试的划分衍生出的常见面试题。希望今天的分享能对大家有帮助,未来的路我们一起加油!
|