概述

软件测试是产品项目中的最后一个环节,只有通过了软件测试检验,才算的上一个合格的产品。常见的软件测试方法有几十种,下面按照他们之间的共性进行归类整理。

软件测试方法分类

1.内部结构

按照是否关注内部结构代码进行分类,分为黑盒测试、白盒测试、灰盒测试。

  • 黑盒测试:也称为数据驱动测试,把测试对象当作看不见的黑盒,在完全不考虑内部结构和处理过程的情况下,测试人员仅依据程序功能的需求规范考虑,确定测试用例和推断测试结果的正确性,是站在使用软件或者程序的角度,从输入数据与输出数据的对应关系出发进行的测试。
  • 白盒测试:也称为结构测试或者逻辑驱动测试,是一种按照程序内部逻辑结构和编码结构,设计测试数据并完成测试的一种测试方法。
  • 灰盒测试:介于黑盒测试和白盒测试之间,是一种综合测试法,它将黑盒测试与白盒测试结合在一起,基于程序运行时的外部表现又结合内部逻辑结构来设计用例,执行程序并采集路径执行信息和外部用户接口结果的测试。

2.运行程序

按照是否运行被测程序分类,分为动态测试和静态测试。

  • 动态测试:是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等性能指标。大多数的软件测试方法都属于动态测试。
  • 静态测试:指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来验证程序的正确性。通常是对需求规格说明书、软件设计说明书、源程序的结构分析、流程图分析、符号执行等来查找错误。

3.测试级别

按照开发过程的测试级别分,可分为单元测试、集成测试和系统测试。

  • 单元测试:也叫模块测试,是为了检验软件组成单位的正确性。通常是针对软件设计的最小单位——程序模块或者功能模块进行测试验证,检验程序各模块是否存在差错,功能实现是否正确,性能和接口是否满足要求等。

1

测试对象

单独模块测试,属于静态测试

2

测试阶段

编码后或者编码前(TDD)

3

测试人员

白盒测试工程师或者开发工程师(测源码)

4

测试依据

代码、注释、详细设计文档

5

测试方法

白盒测试(测源码)

6

测试内容

模块接口测试、局部数据结构测试、路径测试、错误处理测试、边界测试

  • 集成测试:也叫组装测试或联合测试,在单元测试之后进行,旨在验证软件单元之间的接口关系,通过模块之间的数据传输、功能冲突、组装功能正确性、全局数据结构、单个模块缺陷对系统的影响,发现各软件单元接口之间存在的问题,最终把经过测试的单元组成符合设计要求的软件。

1

测试阶段

单元测试之后

2

测试对象

模块之间的接口

3

测试人员

白盒测试工程师或者开发工程师

4

测试依据

单元测试的模块+概要设计文档

5

测试方法

黑盒测试+白盒测试

6

测试内容

模块之间的数据传输、功能冲突、组装功能正确性、全局数据结构、单个模块缺陷对系统的影响

  • 系统测试:为判断系统是否符合要求而对集成的软、硬件系统进行的测试,在集成测试之后进行。系统测试是将已经集成好的软件系统,作为基于整个计算机系统的一个元素,与计算机硬件、外设、某些支持软件、人员、数据等其他系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的组装测试和确认测试。

1

测试阶段

集成测试通过之后

2

测试对象

整个系统(软件+硬件)

3

测试人员

黑盒测试工程师(功能测试)

4

测试依据

需求规格说明文档

5

测试方法

黑盒测试

6

测试内容

功能、界面、可靠性、易用性、性能、兼容性、安全性等

4.人工干预

从执行过程是否需要人工干预来看,分为手工测试和自动化测试。

  • 手工测试:指由人手动输入测试用例,观察结果,属于原始但不可缺少的一个步骤。手工测试的优点是有自动化无法替代的探索性、发散性测试,缺点是执行效率慢,量大时易出错。
  • 自动化测试:使用自动化测试工具来模拟手动测试步骤,将大量的重复性测试工作交给计算机去完成。自动化测试通常在功能测试完成,版本稳定后开展。

5.测试人员

按照测试实施人员分,可分为开发测试、用户测试、第三方测试。

  • 开发测试:由开发人员进行的测试,这里的开发人员通常包括开发、测试、产品等。
  • 用户测试:由用户方或者需求方进行的测试
  • 三方测试:有别于开发人员或者用户进行的测试,一般由专业的第三方测试公司承担,目的是为了保证测试工作的客观性。

6.测试环境

从测试所处的环境区分,分为阿尔法测试和贝塔测试。

  • 阿尔法测试(alpha测试):是由用户在开发环境下进行的测试,也可以是开发机构内部的用户在模拟实际操作环境下进行的测试。开发者坐在用户旁边,这是在开发者受控的环境下进行的测试。由开发者随时记录下错误情况和使用中的问题。
  • 贝塔测试:又称Beta测试,用户验收测试(UAT),是由软件的多个用户在一个或多个用户的实际使用环境下进行的测试。开发者通常不在测试现场,这是在开发者无法控制的环境下进行的测试。由用户记录下遇到的所有问题,定期向开发者报告。Beta测试是一模拟真实的使用环境从而发现缺陷的一种测试。

7.其他测试分类

  • 冒烟测试:概念源于硬件行业,指对一个硬件或者硬件组件进行更改或者修复后,直接给设备加电,如果没有冒烟,则冒烟测试通过。

1

测试阶段

开发提测版本后

2

测试对象

新编译的需要正式测试的软件版本

3

测试目的

确保软件基本功能正常,可进行后续的正式测试工作

4

测试人员

版本编译人员(一般为测试人员)

5

测试范围

挑选优先级别高的,主流程的测试用例

6

测试作用

判断是否满足提测标准,若主流程都不同,则要打回

  • 业务测试:业务测试是把系统的各个模块串联起来与逆行,模拟用户实际的工作过程。业务测试要求测试人员必须对项目的需求特别了解。

      举例:以查看邮件业务来看,分为登录网站→输入用户名→密码登录成功→进入收件箱→查看邮件列表→打开邮件→查阅内容→关闭邮件→退出邮箱→关闭网站这几个步骤。

  • 界面测试:也称UI测试,主要测试用户界面功能模块的布局是否合理、整体风格是否一致,各个空间的摆放位置是否符合客户的使用习惯。此外,还包括界面操作便捷性、导航简单易懂性、页面元素可用性、界面是否有错别字、命名是否统一、页面是否美观等等。
  • 兼容性测试:是非功能测试的一部分,包括软件、硬件、网络、移动等的兼容。一旦应用程序稳定,在实际的生产环境,可能会被不同平台上的多个用户使用,可能面临一些兼容性问题,为了避免这些问题,有必要做兼容性测试。通常,兼容性测试需要在应用程序或软件功能稳定时启动。
  • 易用性测试:是交互的适应性、功能性和有效性的集中体现。举个例子:手机拨号功能不放在首页,而是放在一个下移N多层才能找到一个目录里面,这就不符合易用性。
  • 用户体验测试:属于人体工程学的范畴,指的是设计日常使用的东西以实用、方便用户为出发点。
  • 回归测试:修改旧代码后,需要重新测试以确认修改无误。软件开发的各个阶段都会进行多次的回归测试,项目系统越大,回归测试的成本越大。
  • 性能测试:检查系统是否满足需求规格说明书中规定的性能指标。考量范围通常包括:对资源利用的精确度量、执行间隔、日志事件(中断、报错等)、响应时间、TPS、辅助存储区、处理精度等参数。
  • 安全测试:软件测试中很重要的一种测试,用于发现软件应用程序中的弱点、风险或威胁,阻止外部人员对软件的GJ,确保软件应用程序的安全性。安全测试的类型包括:安全扫描、风险评估、漏洞扫描、ST测试、安全审计、道德黑客GJ、姿势评估等。
  • 安装测试:指的是测试程序的安装、卸载。
  • 探索性测试:可以说是一种测试思维技术。不是指具体实际的测试方法、技术和工具,但却是所有测试人员都应该掌握的一种测试思维方式。探索性测试强调测试人员的主观能动性,摒弃复杂的测试计划和测试用例设计过程,强调在碰到问题时及时改变测试策略。
  • 内存泄漏测试:内存泄漏是指程序运行期间动态分配了内存,但是在程序结束时没有释放这部分内存,从而造成那一部分内存不可用的情况。造成内存泄漏的主要原因有:分配完内存后未回收;程序写法有问题,无法回收;API函数的使用不正确;未及时释放等。
  • 验收测试:验收测试是以用户为主的测试,软件开发和QA人员也应该参加,测试一般在用户所在地进行,由用户验证软件产品是否满足了所有的需求的一系列的验收测试工作。仅限于做项目的公司,部门内部测试稳定后,根据合同中需求由发包商进行验收测试。验收测试的目的是为了以发现”未实现的需求”为目的,以评估”适合使用”为目标,该类测试不是以发现缺陷为主要目的。