一 按照项目流程阶段划分:单元测试 集成测试 系统测试 验收测试
单元测试(Unit Testing)
由开发人员进行。单元测试时针对软件测试的最小单位----程序模块进行正确性检验的测试工作,其目的在与发现每个程序模块内部可能存在的缺陷。单元测试基本不需要编写测试用例,开发人员自己调试 通过、符合设计要求就可以了。为测试时隔离模块,经常使用stubs、mock或fake等测试马甲程序。
包含:模块功能测试、部分接口测试、路径测试。
依据:源程序本身,包括代码和注释;还有就是项目的《详细设计》文档。
集成测试(Integration Testing)
一般由白盒测试工程师或是开发人员来完成集成测试。集成测试时将模块按照设计要求组装起来进行测试,主要目标是发现与接口有关的问题,主要测试模块之间数据传输是否正确、模块集成后功能是否实现、模块接口功能与设计需求是否一致。集成测试是最关键的一步,如果问题较多就把产品送到测试部,会造成反复测试,浪费人力物力。
包含:接口测试、路径测试、部分功能测试。
依据:单元测试的模块以及《概要设计》文档。
系统测试(System Testing)
主要由测试部门进行,是测试部门最大最重要的一个测试。系统测试主要目的是充分运行系统,验证各子系统是否都能正常工作并完成设计的要求。这个测试需要编写大量的测试用例,投入大量的资源来完成。
包含:功能测试、性能测试、健壮性测试、用户界面测试、安全性测试、压力测试、可靠性测试、安装/反安装测试。
依据:《系统需求规格说明书》文档。
验收测试(Acceptance Testing)
主要由测试和客户共同进行。验收测试需要根据需求阶段的《需求规格说明书》为验收标准,测试时要求模拟实际运行环境。测试内容为对功能模块的全面测试,尤其要进行文档测试。
包含的测试基本同“系统测试”,并包含文档测试。
依据:《系统需求规格说明书》文档,以及验收标准。
验收测试分为:alpha测试和beta测试。
- Alpha测试(Alpha testing)
在系统开发接近完成时对系统的测试。测试后,仍然会有少量的设计变更。
Alpha测试是由用户在开发环境下进行的测试,也可以 是开发机构内部的用户在模拟实际操作环境下进行的测试。
- Beta测试(Beta testing)
有软件的多个用户在一个或多个用户的实际使用环境下进行的测试。
可以被认为是外部用户接受性测试的一种。Beta版本也可以对外部公众开放,这样可以有更多的反馈。
二 按照代码可见度划分:白盒测试 灰盒测试 黑盒测试
白盒测试(White-Box Testing)
白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能。白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。
黑盒测试(Black-Box Testing)
黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地 接收输入数锯而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。
灰盒测试(Grey-Box Testing)
灰盒测试结合了白盒测试盒黑盒测试的要素。它考虑了用户端、特定的系统知识和操作环境。它在系统组件的协同性环境中评价应用软件的设计。
三 按照测试关注点:功能测试 性能测试
功能测试(Function Testing)
功能测试检查实际的功能是否符合用户的需求。测试的大部分工作也是围绕软件的功能进行,设计软件的目的也就是满足客户对其功能的需求。如果偏离的这个目的任何测试工作都是没有意义的。
功能测试又可可以细分为很多种:逻辑功能测试、界面测试、易用性测试、安装测试、兼容性测试等。
- 逻辑功能测试(Logic Function Testing)
- 界面测试( UI Testing )
- 易用性测试( Usability Testing ):指从软件使用的合理性和方便性等角度对软件系统进行检查,来发现软件中不方便用户使用的地方。
- 安装测试( Installation Testing):安装和卸载测试。
- 兼容性测试(Compatibility Testing):主要检查软件在不同的软/硬件平台上是否可以正常的允许,即软件可移植性。
性能测试(Performance Testing)
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
软件的性能包括很多方面,主要有时间性能和空间性能两种。
-
时间性能:主要是指软件的一个具体的响应时间。比如一个登录所需要的时间,一个交易所需要的时间等。当然,抛开具体的测试环境,来分析一次事务的响应时间是没有任何意义的。需要搭建一个具体且独立的测试环境。
-
空间性能:主要指软件运行时所消耗的系统资源,比如硬件资源,CPU、内存,网络带宽消耗等。
性能测试分为:一般性能测试、稳定性测试、负载测试和压力测试。
- 一般性能测试:让被测系统在正常的软硬件环境下和运行,不向其施加任何压力的性能测试。
- 稳定性测试:也叫可靠性测试(Reliability Testing),指连续运行被测系统,检查系统运行时的稳定程度。
- 负载测试(Load Testing):指让被测系统在其能忍受的压力的极限范围内连续运行,来测试系统的稳定性。
- 压力测试(Stress Testing): 指持续不断的给被测系统增加压力,直到将被测系统压垮为止,用来测试系统所能承受的最大压力。
四 按照测试实现方式划分:手动测试 自动测试
手动测试(Manual Testing)
由测试人员一步一步执行完成的测试。目前仍然是主流。
自动化测试(Automation Testing)
由测试人员编写测试脚本,然后让机器自动化执行的测试。
五 按照是否运行程序划分: 静态测试 动态测试
静态测试(Static Testing)
指不实际运行被测软件,而只是静态地检查程序代码、界面或文档中可能存在的错误的过程。
- 代码测试:主要测试代码是否符合相应的标准和规范。
- 界面测试:主要测试软件的实际界面与需求中的说明是否相符。
- 文档测试:主要测试用户手册和需求说明是否真正符合用户的实际需求。
动态测试(Dynamic Testing)
指实际运行被测程序,输入相应的测试数据,检查实际输出结果和预期结果是否相符的过程。
六 其他测试
回归测试(Regression Testing)
回归测试是指修改了旧代码后,重新实行测试以确认修改后没有引入新的错误或导致其他代码产生错误。
回归测试一般是在进行软件的第二轮测试开始的,验证第一轮中发现的问题是否得到修复。当然,回归也是一个循环的过程,如果回归的问题通不过,则需要开发人员修改后再次进行回归,直到通过为止。
冒烟测试(Smoking Testing)
是指在对一个新版本进行系统大规模的测试之前,先验证一下软件的基本功能是否实现,是否具备可测性。
引入到软件测试中,就是指测试小组在正规测试一个新版本之前,先投入较少的人力和时间验证一个软件 的主要功能,如果主要功能都没有实现,则打回开发组重新开发。这样做的好处是可以节省大量的时间成本和人力成本。
随机测试(Random Testing)
指测试中所有的输入数据都是随机生成的,其目的是模仿用户的真实操作,并发现一些边缘性的错误。
健全测试(Sanity testing)
一个初始化的测试工作,以决定一个新的软件版本测试是否足以执行下一步大的测试努力。
破坏性测试(Destructive testing)
破坏性测试尝试让软件或子系统出错。主要验证在接收到非法或意外的输入情况下,软件也可以正常工作,从而让输入验证以及错误管理更加鲁棒性。
安全性测试(Security testing)
测试系统在防止非授权的内部或外部用户的访问或故意破坏等情况时会怎样。
国际化和本地化测试(Internationalization and localization)
验证应用程序被翻译到一种新的语言,或一个新的环境,比如说一个不同的货币或时区,是否还可以正常工作。
并发测试(Concurrent testing)
主要指当测试多用户并发访问同一个应用、模块、数据时是否产生隐藏的并发问题,如内存泄露、线程锁等问题。
最后上一张 赵斌 的《软件测试技术经典教程》中的图:
PS: 书真心是很好,东西超级全的。适合刚入门的人看,也适合初级测试人员进阶整理看。