相信接触过测试的同学都听说过,黑盒测试、白盒测试、功能测试、性能测试、安全测试、单元测试、集成测试、接口测试等等。但是这样记忆起来就比较混乱,如果进行划分类别,那么就会比较清晰,也比较好理解,便于大家记忆。
1.就从软件内部结构和具体实现来划分,软件测试可以分为:
白盒测试、黑盒测试、灰盒测试
(1)白盒测试:又称结构测试或逻辑测试,是按照程序内部逻辑结构和编码结构,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。 这一方法是把测试对象看作一个打开的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例并完成测试的一种测试方法。这种类型的测试需要从代码语句发现内部代码在算法,溢出,路径,条件等等中的缺点或者错误,进而加以修正。
常见的白盒测试的方法有:语句覆盖,条件覆盖,判定覆盖,条件组合覆盖,基本路径覆盖等等。
白盒测试的目的:
①保证程序中所有关键路径的测试,防止由于没有执行的路径在实际投入运行后执行到意外情况
②衡量测试完整性
③程序内部所有的逻辑值真、假两个分支的覆盖
④检查内存泄漏
⑤异常处理的分支语句的执行
⑥解决实验条件下很难搭建真实测试环境的问题
⑦检查代码符合一定的编码规范,减少由于编码不规范而引入的错误
通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。
(2)黑盒测试:又称为功能测试,不考虑程序内部结构和逻辑结构,主要是用来测试系统的功能是否满足需求规格说明书,它是站在使用软件或程序的角度,从输入数据与输出数据的对应关系出发进行的测试。
常见黑盒测试的方法:等价类划分法、边界值分析法、错误推测法、因果图法、正交试验法、判定表驱动法、功能图法
黑盒测试目的:
①检查程序功能是否按照需求规格说明书的要求正常使用,测试每个功能是否有遗漏,测试性能特性是否满足要求。
②测试人机交互是否错误,检测数据结构或外部数据库访问是否错误,程序是否能适当的输入数据而产生正确的输出结果,保持外部信息(如数据库或文件)的完整性。
③检测程序初始化和终止方面的错误。
(3)灰盒测试:介于白盒测试和黑盒测试之间,不仅关注输出、输入的正确性,同时也关注程序内部的情况。灰盒测试不像白盒那样详细、完整,但又比黑盒测试更关注程序的内部逻辑,常常是通过一些表征性 的现象、事件、标志来判断内部的运行状态。
灰盒测试相对于其他黑白盒有什么特点:
①灰盒测试比白盒测试效率高,从程序的整体出发,而非细节.
②灰盒测试健壮性好,相对于白盒测试降低了程序代码改变而导致用例失效的风险。
③灰盒测试更细致。灰盒测试要求测试人员关注程序的代码逻辑,根据代码逻辑扩充用例,更加细致
2.根据软件测试的阶段来划分:
单元测试—>集成测试—>系统测试—>验收测试
(1)单元测试:单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作,是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义。
(2)集成测试:也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。一些模块虽然能够单独地工作,但并不能保证连接起来也能正常的工作,在全局上很可能暴露出来。一般由开发小组采用白盒加黑盒的方式来测试,既验证“设计”,又验证“需求”。 旨在检验软件单元之间的接口关系,以期望通过测试发现各软件单元接口之间存在的问题,最终把经过测试的单元组成符合设计要求的软件。
(3)系统测试:为判断系统是否符合要求而对集成的软、硬件系统进行的测试活动、它是将已经集成好的软件系统,作为基于整个计算机系统的一个元素,与计算机硬件、外设、某些支持软件、人员、数据等其他系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的组装测试和确认测试。
(4)验收测试:以用户为主的测试,在软件产品完成了单元测试、集成测试和系统测试之后,产品发布之前所进行的软件测试活动。它是技术测试的最后一个阶段,也称为交付测试。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务。验收测试是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是验收测试的任务,即软件的功能和性能如同用户所合理期待的那样。
3.性能测试又可以分为压力测试与负载测试
性能测试:性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
(1)压力测试:逐步增加系统负载,测试系统性能的变化,并最终确定在什么负载下系统性能处于失效状态,并以此来获得系统能提供的最大服务级别。
(2)负载测试:模拟实际软件系统所承受负载调教的系统负荷,通过不断加载(例如增加模拟用户的数量)或其他加载方式来观察不同负载下系统响应时间和数据吞吐量、系统占用的资源(如CPU、内存等),来检验系统的行为和特性。
相同点:都属于性能测试,负载测试强调系统正常工作情况下的性能指标;压力测试的目的是发现在什么条件下系统的性能变得不可接受,发现应用程序性能下降的拐点。
4.其他测试
(1)回归测试:回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。自动回归测试将大幅降低系统测试、维护升级等阶段的成本。
(2)冒烟测试:完成一个新版本的开发后,对该版本的基本功能进行测试,保证基本功能和流程可以走通如果通不过,那么需要开发重新开发,如果通过测试,才会进行下一步的测试(功能测试,集成测试,系统测试等等),优点是节省测试时间,防止build失败,缺点是覆盖率较低。