目前,软件测试已经形成一个完整的、体系庞大的学科,不同的测试领域都有不同的测试方法、技术与名称,软件测试按照所做工作的不同,可以分为很多的方面,一些常见的分类如下:
按照测试阶段可以将软件测试分为单元测试、冒烟测试、集成测试、系统测试与验收测试。这种分类方式与软件开发过程相契合,是为了检验软件开发各个阶段是否符合要求。
(1)单元测试
单元测试也可以称为模块测试——对软件的组成单位进行测试,目的是检验软件基本组成单位的正确性。测试的对象是软件测试的最小单位:模块。单元测试一般都是开发人员或者专业的白盒测试人员(这些需要对代码有很深的研究)来测试的。
(2)冒烟测试
对一个硬件或硬件组件进行更改或修复后,直接给设备加电。如果没有冒烟,则该组件就通过了测试。在软件中,“冒烟测试”这一术语描述的是在将代码更改嵌入到产品的源树之前对这些更改进行验证的过程。在检查了代码后,冒烟测试是确定和修复软件缺陷的最经济有效的方法。冒烟测试设计用于确认代码中的更改会按预期运行,且不会破坏整个版本的稳定性。
冒烟测试是在软件开发过程中的一种针对软件版本包的快速基本功能验证策略,是对软件基本功能进行确认验证的手段,并非对软件版本包的深入测试。冒烟测试也是针对软件版本包进行详细测试之前的预测试,执行冒烟测试的主要目的是快速验证软件基本功能是否有缺陷。如果冒烟测试的测试用例不能通过,则不必做进一步的测试。进行冒烟测试之前需要确定冒烟测试的用例集,对用例集要求覆盖软件的基本功能。这种版本包出包之后的验证方法通常称为软件版本包的门槛用例验证。
(3)集成测试
单元测试是一个模块内部的测试,当有多个单独的模块测试完成后,需要把这些模块放到一起进行整体的测试,这个测试称为集成测试。集成测试也称联调测试、组装测试,即将程序模块采用适当的集成策略组装起来,对系统的接口及集成后的功能进行正确性检测的测试工作。集成测试主要关注的是关联处比较复杂,容易发生错误的模块。集成测试是在模块之间进行测试(至少两个),将两个或者两个以上的模块进行组装。
(4)系统测试
系统测试指的是在真实或模拟系统运行的环境下,验证完整的程序系统是否可以正确运行,并满足用户的功能需求,这里完整的程序系统可以理解为把整个软件系统看作一个整体,包括软件和硬件。举个例子,当下公司正在开发一个新的支付系统,要求测试团队对它做系统测试。测试的目的就是要把各种功能模块全部搭建并运行起来,对它进行整体的功能测试、安全测试、性能测试等,以验证它的功能、安全性、性能等各方面表现是否满足用户需求。
(5)验收测试
验收测试是技术测试的最后一个阶段,也称为交付测试。验收测试是部署软件之前的最后一个测试阶段。验收测试的目的是确保软件准备就绪,向软件购买者展示该软件系统能够满足用户的需求,一般是以用户为主的测试。验收测试的常用策略有两种,正式验收和非正式验收。
按照使用的测试技术可以将软件测试分为黑盒测试与白盒测试。
(1)黑盒测试
我们不需要去关心被测试软件里面的结构及实现逻辑如何,只需要关注测试软件的输入数据是什么,以及输出结果是否符合预期就可以了,这样的测试就称为黑盒测试。黑盒测试又称为数据驱动测试,它只检查程序是否能接收输入数据并产生正确的输出信息。
(2)白盒测试
白盒测试与黑盒测试正好相反,不关注外面只关注里面,也就是说盒子是透明的,我们可以清楚地看到盒子内部的东西以及内部的运作逻辑,针对内部逻辑进行的测试。
相对于黑盒测试,白盒测试对测试人员的要求会更高一些,它要求测试人员具有一定编程能力,而且要熟悉各种脚本语言。但是在软件公司里,黑盒测试与白盒测试并不是界限分明的,在测试一款软件时往往是黑盒测试与白盒测试相结合对软件进行完整全面的测试。
按照软件质量特性可以将软件测试分为功能测试与性能测试。
(1)功能测试
功能测试是测试软件的功能是否满足客户的需求,包括准确性、易用性、适合性、互操作性等。
(2)性能测试
性能测试是测试软件的性能是否满足客户的需求,性能测试包括负载测试、压力测试、兼容性测试、可移植性测试和健壮性测试等。
按照自动化程度可以将软件测试分为手工测试与自动化测试。
(1)手工测试
手工测试是测试人员一条一条地执行代码完成测试工作。
(2)自动化测试
自动化测试是借助脚本、自动化测试工具等完成相应的测试工作,需要人工的参与,但是它也可以将要执行的测试代码或流程写成脚本,执行脚本完成整个测试工作。
软件测试类型有多种,包括界面类测试、功能测试、性能测试、安全性测试、文档测试等,其中功能测试和性能测试前面已经介绍,下面介绍其他几种测试。
(1)界面类测试
界面类测试是验证软件界面是否符合客户需求,包括界面布局是否美观、按钮是否齐全等。
(2)安全性测试
安全性测试是测试软件在没有授权的内部或外部用户的攻击或恶意破坏时如何进行处理,是否能保证软件与数据的安全。
(3)文档测试
文档测试以需求分析、软件设计、用户手册、安装手册为主,主要验证文档说明与实际软件之间是否存在差异。
还有一些软件测试无法具体归到哪一类,但在测试行业中也会经常进行这些测试,如α测试、β测试、回归测试等。
(1)α测试
α测试主要可以由一个用户在开发环境进行的测试,也可以由公司内部的用户在模拟实际操作环境下进行的测试。
主要的目的是:评价软件产品的FLURPS(即功能、局域化、可使用性、可靠性、性能和支持)。
(2)β测试
β测试:由软件的最终的用户们在一个或者多个客户场所进行的测试。
α测试和β测试的区别:
测试的场所是不同的:α测试是把用户请到开发方的场所进行的测试,β测试值的是就是在一个用户或者多个用户场所所进行的测试。
α测试的测试场所是由开发方进行控制的,用户的数量是相对比较少的,时间也是相对比较集中的。β测试的测试场所不是由开发方进行控制的,相对来说用户的数量是相对比较多的,但是时间也不是很集中的。
α测试是先于β测试的,通用的软件产品时需要大规模的β测试,测试周期是相对比较长的。
(3)回归测试
回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。自动回归测试将大幅降低系统测试、维护升级等阶段的成本。