今天小编来介绍下测试分类。

那么为什么要有这个测试分类呢?

软件测试是软件生命周期中的一个重要环节,具有较高的复杂性,对于软件测试,可以从不同的角度/维度加以分类,使开发者在软件开发过程中的不同层次,不同阶段对测试工作进行更好的执行和管理测试的分类方法

按照测试目标进行分类

这个是值根据测试所要验证的软件质量特性(如功能正确性、界面友好性、性能稳定性等)来划分测试类型

具体类别如下:

测试类型

对应质量属性

核心目标

典型方法/工具

1. 功能测试

功能适合性、准确性

验证系统是否按需求正确实现业务逻辑

黑盒测试、判定表、等价类

2. 界面测试(UI/UX)

易用性、美观性

验证界面是否符合设计规范,操作是否直观

人工走查、视觉回归工具(Applitools)

3. 性能测试

性能效率(响应时间、吞吐量、资源利用)

验证系统在负载下的速度、稳定性和可伸缩性

JMeter、LoadRunner、Gatling

4. 兼容性测试

兼容性

验证系统在不同环境(OS/浏览器/设备)下表现一致

云测平台(BrowserStack、Testin)

5. 易用性测试

易用性(可学习性、可操作性)

验证用户能否高效、无挫败感地完成任务

用户访谈、A/B测试、眼动追踪

6. 安全测试

安全性(保密性、完整性、抗攻击性)

验证系统能否抵御恶意攻击和数据泄露

OWASP ZAP、Burp Suite、渗透测试

7. 可靠性测试

可靠性(容错性、可用性)

验证系统在异常或长时间运行下的稳定性

故障注入、7×24 小时稳定性测试

8. 可维护性 & 可移植性测试

可维护性、可移植性

验证代码可读性、模块解耦、部署便捷性

代码扫描(SonarQube)、部署演练

注意:有些情况下,会把弱网测试纳入性能测试,安装卸载测试纳入兼容性测试

具体内容如下:

1. 功能测试(Functional Testing)

  • 目标:验证“系统是否做了它该做的事”

  • 内容:

    • 业务流程(注册 → 登录 → 下单)

    • 输入验证(边界值、非法字符)

    • 数据处理(计算、存储、同步)

    • 错误处理(提示、回滚)

  • 示例:

  • 用户输入优惠券码,系统正确抵扣金额,且不可重复使用。


2. 界面测试(UI/UX Testing)

  • 目标:验证“界面是否好看、好用”

  • 内容:

    • 布局、字体、颜色、图标一致性

    • 控件状态(禁用/启用/悬停)

    • 提示文案清晰无错别字

    • 响应式适配(PC/Pad/手机)

  • 示例:

  • 在 iPhone 14 上,“提交订单”按钮完整显示,无遮挡。


3. 性能测试(Performance Testing)

  • 目标:验证“系统是否快、稳、省”

  • 子类型:

    • 负载测试:模拟预期用户量

    • 压力测试:突破系统极限

    • 稳定性测试:长时间运行是否泄漏

  • 示例:

  • 1000 用户并发下单,平均响应时间 ≤ 1.5s,错误率 < 0.1%。


4. 兼容性测试(Compatibility Testing)

  • 目标:验证“系统是否在各种环境下正常工作”

  • 维度:

    • 操作系统(Windows 10/11, macOS, Android 12/13)

    • 浏览器(Chrome, Firefox, Safari, Edge)

    • 设备(iPhone, 华为, 小米, iPad)

    • 分辨率 & 屏幕方向

  • 示例:

  • 在 Safari 16 上,支付页面 JavaScript 不报错。


5. 易用性测试(Usability Testing)

  • 目标:验证“用户是否愿意用、能轻松用”

  • 关注点:

    • 学习成本(新用户能否自助完成)

    • 操作效率(完成任务步骤是否最少)

    • 容错能力(误操作能否撤销)

  • 示例:

  • 90% 的测试用户能在 2 分钟内完成首次发布内容。


6. 安全测试(Security Testing)

  • 目标:验证“系统是否防得住攻击”

  • 常见攻击面:

    • 注入(SQL、XSS)

    • 越权(普通用户访问管理员接口)

    • 敏感信息泄露(日志、URL、缓存)

    • 会话劫持(Token 未加密/未过期)

  • 示例:

  • 输入 ' OR '1'='1 到登录框,系统返回“用户名或密码错误”,而非数据库报错。


7. 可靠性测试(Reliability Testing)

  • 目标:验证“系统是否扛得住意外”

  • 场景:

    • 网络中断后自动重连

    • 服务宕机后自动恢复

    • 长时间运行无内存泄漏

  • 示例:

  • APP 在后台运行 72 小时,内存占用无持续增长。


8. 可维护性 & 可移植性测试(Maintainability & Portability)

  • 目标:验证“系统是否易于修改和迁移”

  • 内容:

    • 代码模块化程度

    • 配置与代码分离

    • 部署脚本是否一键完成

    • 是否依赖特定硬件/OS

  • 示例:

  • 将服务从 CentOS 迁移到 Ubuntu,仅需修改 1 个配置文件

按照执行方式分类:

核心分类:两大执行方式

分类

是否运行程序

主要目的

典型阶段

静态测试(Static Testing)

不运行代码

预防缺陷:在代码/文档编写阶段发现错误

需求、设计、编码早期

动态测试(Dynamic Testing)

运行程序

发现缺陷:通过执行程序观察行为是否符合预期

编码完成后(单元测试起

静态测试:

不执行被测软件,而是通过人工或工具对文档、代码、设计等制品进行检查,以发现潜在缺陷

主要方法:

方法

说明

责任人

1. 评审(Review)

有组织的文档检查活动

- 非正式评审:结对编程、走查(Walkthrough)
- 正式评审:技术评审(Technical Review)、审计(Inspection)

2. 静态分析(Static Analysis)

用工具自动分析源代码/字节码

- 代码规范检查(缩进、命名)
- 潜在缺陷检测(空指针、资源泄漏)
- 安全漏洞扫描(硬编码密码)

动态测试:

通过实际运行被测程序,输入测试数据、观察输出结果、行为、性能等是否符合预期

主要方法(按技术视角):

方法

说明

典型场景

1. 黑盒测试

不关心内部结构,只测输入-输出

功能测试、验收测试

2. 白盒测试

基于代码逻辑设计用例(如覆盖所有分支)

单元测试、集成测试

3. 灰盒测试

介于两者之间,了解部分内部结构

API 测试、数据库验证

主要方法(按自动化程度):

类型

说明

手工测试

人工操作界面或命令行执行

自动化测试

用脚本/工具自动执行(如 Selenium、JUnit)

按照测试方法分类:

常用的测试方法有:白盒测试、灰盒测试、黑盒测试

方法概览:

方法

是否需要代码知识

测试视角

主要目标

典型阶段

白盒测试(White-box)

需要

内部结构视角
(像开发一样看代码)

验证代码逻辑是否被充分执行

单元测试、集成测试

黑盒测试(Black-box)

不需要

用户视角
(只关心输入→输出)

验证功能是否符合需求

系统测试、验收测试

灰盒测试(Gray-box)

部分需要

混合视角
(知道部分内部结构)

结合功能与结构,提高测试效率

API测试、集成测试

白盒测试(动态)中的常见六种测试方法

覆盖类型

定义

覆盖目标

示例(代码片段)

是否覆盖所有路径?

1. 语句覆盖(Statement Coverage)

每条可执行语句至少执行一次

行覆盖率

if (a>0) print("A"); else print("B");
→ 输入 a=1(只覆盖 print("A"))

否(else 分支未覆盖)

2. 判定覆盖(Decision Coverage)
(又叫分支覆盖)

每个判定(if/while)的真假分支都至少执行一次

分支覆盖率

同上 → 需 a=1(真)和 a=-1(假)

否(复合条件可能漏)

3. 条件覆盖(Condition Coverage)

每个原子条件(如 a>0, b==1)的真假值都至少出现一次

条件取值覆盖率

if (a>0 && b<5)
→ 需 a>0为真/假,b<5为真/假

否(未覆盖组合)

4. 判定-条件覆盖(Decision/Condition Coverage)

同时满足判定覆盖 + 条件覆盖

分支 + 条件取值

同上 → 需覆盖所有条件取值 + 整个 if 的真假

仍可能漏组合

5. 条件组合覆盖(Multiple Condition Coverage)

每个判定中所有条件的真假组合都至少执行一次

条件组合覆盖率

if (a>0 && b<5)
→ 需4种组合:
(T,T), (T,F), (F,T), (F,F)

对单个判定是,但跨判定不一定

6. 路径覆盖(Path Coverage)

程序中所有可能的执行路径都至少走一遍

全路径覆盖率

含多个 if 的嵌套 → 路径数 = 2ⁿ(n=独立判定数)

是(理论上最全)

覆盖强度关系:

语句覆盖 < 判定覆盖 ≤ 条件覆盖 < 判定-条件覆盖 < 条件组合覆盖 ≤ 路径覆盖

黑盒测试中常用方法:

方法

适用场景

说明

等价类划分

输入有范围/类型

将输入划分为有效/无效类

边界值分析

数值型输入

测试边界及邻近值(min-1, min, min+1)

判定表法

多条件组合逻辑

用表格覆盖规则组合

状态迁移测试

有状态系统(如订单状态)

验证状态转换是否合法

场景法/用例法

业务流程长

模拟用户真实操作路径

错误推测法

基于经验猜缺陷

如“空输入”“超长字符串”

灰盒测试常用方法:

场景

说明

API 测试

知道请求/响应结构,但不关心服务端 if-else 逻辑

数据库验证

知道表字段,验证增删改查后数据是否正确

集成测试

知道模块A调用模块B,验证接口契约是否满足

安全测试(部分)

知道登录流程,测试越权访问

按照测试阶段分类

通常可以分为以下这5个阶段:

阶段

英文

测试对象

主要目标

责任人

1. 单元测试

Unit Testing

单个函数/类/模块

验证最小代码单元逻辑正确性

开发人员

2. 集成测试

Integration Testing

多个模块/服务间交互

验证接口、数据流、依赖是否正常

开发 / 测试

3. 系统测试

System Testing

整个集成后的系统

验证系统是否满足需求规格(功能+非功能)

测试人员

4. 验收测试

Acceptance Testing

可交付的完整产品

验证是否满足用户/业务方真实需求

产品 / 用户 / 测试

5. 回归测试

Regression Testing

修改后的系统

验证新代码是否破坏已有功能

自动化 + 测试

各阶段详解:

1. 单元测试(Unit Testing)

  • 目标:验证最小可测试单元(如一个函数、一个类)的行为是否正确。

  • 特点:

    • 隔离外部依赖(用 Mock/Stub)

    • 执行速度快(毫秒级)

    • 覆盖率高(通常要求分支覆盖 ≥ 80%)

  • 方法:白盒测试(语句/分支覆盖)

  • 工具:

    • Java: JUnit + Mockito

    • Python: pytest + unittest.mock

    • JS: Jest, Mocha

  • 示例:

  • Java

  • 编辑

// 测试 calculateDiscount(100, true) → 应返回 80
@Test
public void testVipDiscount() {
    assertEquals(80, DiscountService.calculateDiscount(100, true));
}
  • 责任人:开发人员(TDD/BDD 实践中甚至先写测试)


2. 集成测试(Integration Testing)

  • 目标:验证多个模块或服务在集成后能否协同工作。

  • 常见策略:

    • 自底向上:先测底层模块,逐步集成

    • 自顶向下:先测高层调用,用 Stub 模拟底层

    • 大爆炸集成:所有模块一次性集成(风险高,不推荐)

  • 测试重点:

    • API 接口契约(请求/响应格式)

    • 数据库读写一致性

    • 第三方服务调用(如支付、短信)

  • 方法:灰盒测试(知道接口,不深究内部逻辑)

  • 工具:

    • Postman(手动)

    • RestAssured, Karate(自动化)

    • TestContainers(集成数据库/中间件)

  • 示例:

  • 调用“创建订单”API → 验证订单服务是否正确调用库存服务扣减库存

  • 责任人:开发(模块间) / 测试(服务间)


3. 系统测试(System Testing)

  • 目标:对完整、集成后的系统进行全面验证,包括功能与非功能需求。

  • 测试类型覆盖(即提到的“万能公式”):

    • 功能测试

    • 界面测试

    • 性能测试

    • 兼容性测试

    • 安全测试

    • 易用性测试

    • 弱网测试

  • 方法:黑盒测试为主

  • 工具:

    • UI 自动化:Selenium, Cypress, Appium

    • 性能:JMeter, Locust

    • 安全:OWASP ZAP

  • 示例:

  • 用户从注册 → 登录 → 下单 → 支付 → 查看订单,全流程验证

  • 责任人:专职测试人员


4. 验收测试(Acceptance Testing)

  • 目标:确认系统是否满足业务方或最终用户的真实需求,决定是否可上线。

  • 类型:

    • UAT(User Acceptance Testing):由真实用户或产品经理执行

    • 合同验收测试:按合同条款验证

    • Alpha 测试:内部用户试用(开发环境)

    • Beta 测试:外部用户试用(生产环境灰度)

  • 特点:

    • 基于真实业务场景

    • 不关注技术细节

    • 通常手工执行

  • 示例:

  • 财务人员验证“月度报表导出”数据是否与线下账目一致

  • 责任人:产品经理、业务方、最终用户


5. 回归测试(Regression Testing)

  • 目标:确保新代码修改没有破坏已有功能。

  • 触发时机:

    • 修复 Bug 后

    • 新增功能后

    • 重构代码后

  • 策略:

    • 全量回归:成本高,适用于重大版本

    • 选择性回归:基于影响分析(Impact Analysis)

    • 自动化回归:核心主干流程必须自动化

  • 工具:所有自动化测试框架(Selenium, pytest, JUnit 等)

  • 示例:

  • 修改了登录逻辑后,重新执行“注册、登录、找回密码”相关用例

  • 责任人:测试 + 自动化脚本

按照是否手工测试分类

手工测试:

就是由人去一个个的输入用例,观察结果,和机器测试相对应,属于比较原始但是必须的一个步骤

自动化测试:

就是在预设条件下运行系统或应用程序,评估运行结果,预先条件应包括正常条件和异常条件。简单说

自动化测试是把以为驱动的测试行为转化为机器执行的一种过程。自动化测试比如功能测试自动化、

性能测试自动化、安全测试自动化。自动化测试按照测试对象来分的话,还可以分为接口测试、UI测试等

.接口测试的ROI(产出投入比)要比UI测试高

自动化测试优点

  • 节省成本

  • 提高测试人员执行工作效率

  • 保障软件的质量

自动化测试缺点

  • 对测试人员技术要求较高

  • 不能发散性测试

手工测试优点

  • 对测试人员技术要求没有自动化技术要求高

  • 可以进行发散性测试

手工测试缺点

  • 效率低

  • 人员,时间成本比起自动化测试都比较高

按照实施组织划分

核心分类如下:

维度

α测试(Alpha Testing)

β测试(Beta Testing)

中文名

内部测试 / 封闭测试

外部测试 / 公开测试

实施组织

公司内部人员
(开发、测试、产品、非项目员工)

真实外部用户
(客户、种子用户、公众)

测试环境

受控的内部环境
(开发/预生产环境)

真实用户环境
(用户自己的设备、网络、操作系统)

测试目标

验证核心功能稳定性,发现严重缺陷

验证真实场景下的可用性、兼容性、用户接受度

反馈机制

直接、快速、结构化(如 Jira)

间接、延迟、非结构化(如问卷、应用商店评论)

是否公开

不对外公开

可公开(Open Beta)或邀请制(Closed Beta)

典型阶段

系统测试之后,正式发布之前

α测试通过后,正式发布前(或作为灰度发布一环)

那么还有其他的一些测试分类,小编就在这里不再做过多介绍了,本次分享就到这里。

文章作者: 南汐
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 www.phblog.cloud
测试 测试
喜欢就支持一下吧