背景
我经常被问及测试都有哪些类型,有的是因为在面试中被问到,有的是因为自己在学习中被各种名词所困扰,也有的是因为在与同行交流时所用的叫法不同而迷惑。
我认为,问题本身所想了解的东西其实不重要,比如,对于每个提测版本所进行的快速验证测试,到底是应该叫冒烟测试,还是叫 BVT 测试,重要吗?我们应该关注的或者说应该明白的是在不同的阶段或者针对不同的目的,应该进行哪种类型的测试,知道该类型的测试应该怎么做。
不过,我们仍然需要对测试进行分类,这样才易于沟通和学习。我先按照自己的理解和认知进行了分类,后续再一一展开探究。
你问
在不同的维度划分下到底有多少种测试分类?
我答
1.按软件开发流程的不同阶段划分
(1)需求阶段。
需求测试:对产品需求进行的测试,包括逻辑错误、需求合理性、需求缺失、需求建议等。
(2)编码阶段。
单元测试:对软件的最小组成单元(比如某个函数、方法)进行的测试。
集成测试:通常也叫联合测试,指的是在完成单元测试的基础上,将所有模块按业务需求组装起来进行测试。
(3)测试阶段。
系统测试:将已经完成集成测试的软件和硬件、网络等其他元素结合在一起,进行系统的各种组装测试和确认测试。系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义。
(4)发布阶段。
验收测试(Acceptance Testing):是指在产品完成系统测试之后、产品发布上线之前所进行的测试活动。在合同类的项目中,验收测试也被称作交付测试。
2.按测试视角划分
(1)外部视角。
黑盒测试:指的是在测试过程中只关注程序的输入和输出,一般用于系统测试阶段。
(2)内部视角。
白盒测试:指的是在测试过程中不仅关注程序的输入和输出,还关注程序内部的处理逻辑,一般用于单元测试阶段。
(3)内外兼顾。
灰盒测试:顾名思义,就是在测试过程中黑白兼顾的测试方法,一般用于集成测试阶段。
3.按测试对象的属性划分
(1)GUI(图形用户界面)测试:指的是对软件的 GUI 进行测试。我认为,在现如今的 APP 测试里,GUI 测试包含了 UI 测试和适配测试。
(2)功能测试(Function Testing):这是我们最常见的测试,是为了验证产品是否符合产品需求规格说明书而进行的最基本的测试。
(3)易用性测试(Usability Testing):对现在的 APP 来说,易用性测试指的是检查系统的交互和界面对用户来说是否友好且易用的测试活动。
(4)接口测试:指的是测试系统组件间接口的测试活动,用于检查模块之间的参数传递是否符合设计文档要求。
(5)性能测试:指的是通过工具模拟多种正常、峰值及异常负载条件来对系统的各项性能指标进行测试,包括负载测试、压力测试、稳定性测试等。
(6)安全测试:指的是验证系统的安全等级和识别潜在的安全性缺陷的过程,目的是找出系统里的安全隐患和漏洞。
(7)兼容性测试:指的是验证软件在不同的硬件、操作系统、浏览器、数据库下是否都能正常运行的测试活动。对 C/S(客户端/服务器端)结构的产品来说,还包括服务器端和客户端的兼容性测试。
(8)国际化测试:指的是验证系统是否支持国际化特性的测试活动,包括多字节字符集的支持、区域设置、时区设置、界面定制性及字符串编码等。
(9)本地化测试:指的是验证翻译后的系统,其语言、格式、内容和用户界面是否都正确的测试活动。
4.按测试对象是否处于运行状态划分
(1)静态测试:指在不需要被测试系统运行时所采用的一种测试方法,比如代码静态扫描、代码评审、文档评审等。
(2)动态测试:指在需要被测试系统运行时所采用的单元测试方法或者系统测试方法。
5.按执行测试的角色划分
(1)手工测试:指由软件测试工程师手工执行完成的软件测试活动。
(2)自动化测试:指由测试工具或测试脚本来执行完成的软件测试活动。
6.按测试的行为划分
(1)计划性测试:顾名思义,指的是在测试执行之前,需要进行详尽的测试计划、测试分析、测试用例设计,并按照计划通过执行测试用例来完成的测试活动。
(2)随机测试:又叫 Ad-Hoc Testing,顾名思义,就是没有计划的、不按测试用例的、即兴发挥的自由测试。
7.按测试原因划分
(1)新功能测试:指的是针对产品新功能的验证所进行的测试。
(2)回归测试:指的是因为产品增加了新功能或修复了 Bug(缺陷)而进行的确保原有功能不会受到影响的检查测试。
8.按测试范围划分
(1)冒烟测试:我认为也可以等同于 BVT (Build Validation Testing),指的是对测试包所进行的快速可用性验证测试,一般只会覆盖系统核心功能或者所有功能的核心测试点。
(2)全面测试:指的是对系统所有功能的所有测试点进行的测试活动。