一、软件测试分类的意义
软件测试复杂度较高,分类可帮助开发者在不同开发阶段、层次中更好地执行与管理测试工作。
二、按测试目标分类:
1.界面测试(UI 测试)
- 核心作用:界面是软件与用户交互的直接载体,影响用户第一印象与使用体验。
- 测试内容 :
- 界面内容的完整性、一致性、适配性(如屏幕自适应、内容显示清晰度)
- 布局排版合理性(字体、图片等符合设计需求)
- 控件功能有效性(对话框、文本框等的可用状态)
- 布局色调的时效性

- 案例分析:对比设计稿与实际页面,可发现实际页面的 "按钮文字(设计稿为'回味一下',实际为'试读')""按钮位置" 存在差异,属于界面内容不一致的问题。

界面测试是软件测试的基础环节之一,其核心是验证 "实际界面与设计标准的一致性",常见问题包括控件失效、内容错位、适配异常等,这类问题会直接降低用户对软件的信任度与使用意愿。
2.功能测试
- 定义:验证软件功能是否符合用户需求,通过黑盒用例(如等价类、边界值等方法)逐项测试。
- 核心目标:确保软件 "能完成需求规定的操作"。
3.性能测试
- 定义:解决软件运行缓慢、响应延迟等问题,需先分析性能需求,再设计测试并持续优化。
- 典型场景:网页加载速度、数据查询耗时等。
4. 可靠性测试
- 定义:衡量系统正常运行的能力,用 "正常运行时间占总时间的百分比" 表示(公式:可靠性 = 正常运行时间 /(正常运行时间 + 非正常运行时间)×100%)。
- 行业标准:关键系统需达到 "4 个 9"(99.99%,全年故障时间≤52 分钟)或 "5 个 9"(99.999%,全年故障时间≤5 分钟),不同系统要求差异较大(如军事系统要求极高)。
5.安全性测试
- 定义:保护用户数据隐私、抵御攻击的能力,属于非功能测试的核心部分。
- 常见风险:输入域攻击、代码注入、数据泄露、权限失控等。
- 测试方法 / 工具:代码评审、渗透测试;静态工具(如 Coverity)、动态工具(如 OWASP ZAP)。

6.易用性测试
- 定义:基于 ISO25020 标准,确保软件 "易发现、易学习、易使用",包含 7 个要素(标准规范、直观性、一致性等)。
- 核心维度 :
- 标准规范:符合用户习惯的 UI / 交互规则(如安装界面样式);
- 直观性:功能易理解、结果展示清晰(如图表化数据);
- 灵活性:支持不同用户习惯(如手机键盘的多种输入方式);
- 舒适性:界面友好、操作顺畅(如左手鼠标适配)。


三、按照执⾏⽅式分类:
| 测试类型 | 定义 | 常见方式 |
|---|---|---|
| 静态测试 | 不运行软件,仅检查代码、界面、文档中的错误(如代码风格、逻辑漏洞) | 代码走查、代码扫描工具 |
| 动态测试 | 运行软件,输入测试数据,验证实际输出与预期是否一致 | 功能测试、性能测试等(多数软件测试属于此类) |

四、按照测试⽅法
白盒测试(结构 / 逻辑测试):针对软件内部逻辑结构设计用例,分为静态、动态两类,核心是覆盖代码逻辑路径,常见动态覆盖方法及说明如下:
- 语句覆盖:确保每个代码语句至少执行 1 次(覆盖度最低)。
- 判定覆盖 :确保每个判定(如
if条件)的 "真 / 假" 分支都执行。 - 条件覆盖 :确保判定中每个子条件(如
A and B中的A/B)的 "真 / 假" 情况都覆盖。 - 判定条件覆盖:同时满足 "判定覆盖" 和 "条件覆盖"。
- 条件组合覆盖:覆盖判定中所有子条件的组合情况(覆盖度较高)。
- 路径覆盖:覆盖代码中所有可能的执行路径(覆盖度最高)。

白盒测试需结合代码内部逻辑设计用例,不同覆盖方法的严谨性依次提升,实际测试中需根据项目要求选择合适的覆盖策略。
| 覆盖方法 | 核心目标 | 覆盖度 | 优点 | 缺点 |
|---|---|---|---|---|
| 语句覆盖 | 每个代码语句至少执行 1 次 | 低 | 实现简单、效率高 | 无法检测分支逻辑错误 |
| 判定覆盖 | 每个判定的 "真 / 假" 分支都执行 | 中 | 覆盖判定逻辑,比语句覆盖更全面 | 可能遗漏子条件的组合情况 |
| 条件覆盖 | 每个子条件的 "真 / 假" 情况都覆盖 | 中 | 覆盖子条件的所有取值 | 可能未覆盖判定的所有分支 |
| 判定条件覆盖 | 同时满足判定、条件覆盖 | 中高 | 兼顾判定与子条件覆盖 | 可能遗漏条件组合情况 |
| 条件组合覆盖 | 覆盖子条件的所有组合情况 | 高 | 覆盖判定内的所有条件组合 | 用例数量较多,成本较高 |
| 路径覆盖 | 覆盖所有可能的执行路径 | 最高 | 覆盖最全面,减少逻辑漏洞 | 用例数量极多,执行成本高 |
案例:

| 覆盖方法 | 核心逻辑 | 用例设计 |
|---|---|---|
| 语句覆盖 | 确保action1、action2都执行 |
用例:A=T、B=T、C=T、D=F(触发action1和action2) |
| 判定覆盖 | 覆盖每个if的 "真 / 假" 分支 |
用例 1:A=T、B=T、C=T、D=F(A and B为真,C or D为真) 用例 2:A=T、B=F、C=F、D=F(A and B为假,C or D为假) |
| 条件覆盖 | 覆盖每个子条件(A/B/C/D)的 "真 / 假" | 用例 1:A=T、B=T、C=T、D=T(A/B/C/D 均为真) 用例 2:A=F、B=F、C=F、D=F(A/B/C/D 均为假) |
| 判定条件覆盖 | 同时满足判定覆盖 + 条件覆盖 | 用例 1:A=T、B=T、C=T、D=T(覆盖A and B真、C or D真,且所有子条件为真) 用例 2:A=F、B=F、C=F、D=F(覆盖A and B假、C or D假,且所有子条件为假) |
| 条件组合覆盖 | 覆盖子条件的所有组合 | 用例: 1. A=T、B=T、C=T、D=T 2. A=T、B=F、C=T、D=T 3. A=F、B=T、C=T、D=T 4. A=F、B=F、C=T、D=T (覆盖A and B的所有组合,C or D固定为真) |
路径覆盖:


一、测试对象(冒泡排序代码)
代码功能:对数组进行升序排序.
二、路径覆盖的核心设计
通过代码流程图,设计测试用例:
| 路径编号 | 路径描述(对应流程图节点) | 测试用例(数组) | 执行结果 |
|---|---|---|---|
| 1 | 3→12 | 空数组 / 长度为 1 的数组(如[5]) |
无循环执行,直接结束 |
| 2 | 3→4→12 | 长度为 2 且已升序的数组(如[2,5]) |
外层循环执行 1 次,内层循环不触发交换 |
| 3 | 3→4→5→4→12 | 长度为 3 且部分有序的数组(如[3,2,5]) |
外层循环执行 1 次,内层循环执行 1 次(触发 1 次交换) |
| 4 | 3→4→5→6-8→4→12 | 长度为 3 且逆序的数组(如[5,3,2]) |
外层循环执行 1 次,内层循环执行 2 次(触发 2 次交换) |
白盒测试的总结要点
- 适用阶段:主要用于单元测试(验证代码逻辑);
- 设计步骤:先静态分析代码结构,再动态设计用例;
- 策略选择:一般用路径覆盖,重点模块可叠加逻辑覆盖方法。
一、黑盒测试
- 核心定义:不考虑代码内部逻辑,仅验证软件功能是否符合需求(又称 "数据驱动测试")。
- 优点 :
- 无需了解代码实现,门槛低;
- 从用户角度设计用例,贴合实际使用场景;
- 基于需求文档设计用例,不易遗漏功能点。
- 缺点:无法覆盖所有代码逻辑,可能遗漏内部漏洞。
- 常用方法:等价类、边界值、因果图、场景法等。
二、灰盒测试
- 核心定义:介于白盒与黑盒之间,既验证功能(输入 / 输出),也关注部分内部逻辑,多用于集成测试阶段。
- 特点 :
- 没有白盒测试的深度,也没有黑盒测试的广度;
- 无法替代黑盒测试(否则需设计大量用例,成本极高)。
三、测试方法的应用场景
| 角色 | 常用测试方法 |
|---|---|
| 开发人员 | 白盒测试、灰盒测试 |
| 测试人员 | 黑盒测试(用得更多)、白盒测试 |
五、按照测试阶段分类
1.单元测试的核心定义与要素
单元测试是针对软件 "最小组成单元"(如一个方法、类)的测试,与编码同步进行,核心要素:
| 要素 | 说明 |
|---|---|
| 测试阶段 | 编码中 / 编码前(TDD 模式) |
| 测试对象 | 最小模块(方法、类) |
| 测试人员 | 白盒测试工程师 / 开发工程师 |
| 测试依据 | 代码、注释、详细设计文档 |
| 测试方法 | 白盒测试 |
| 测试内容 | 模块接口、局部数据结构、路径、错误处理、边界等 |
2.单元测试案例(冒泡排序)
以冒泡排序方法为例,设计多场景的单元测试用例,覆盖不同输入情况:
| 测试用例场景 | 输入示例 | 预期输出 |
|---|---|---|
| 正常无序数组 | [64,34,25,12,22,11,90] |
[11,12,22,25,34,64,90] |
| 已有序数组 | [1,2,3,4,5] |
[1,2,3,4,5] |
| 空数组 | [] |
[] |
| 含重复元素数组 | [1,1,29,12,12,9,9] |
[1,1,9,9,12,12,29] |
| 测试类型 | 阶段位置 | 测试对象 | 测试人员 | 测试方法 | 核心目标 |
|---|---|---|---|---|---|
| 集成测试 | 单元测试后 | 模块间接口 | 白盒 / 开发工程师 | 黑盒 + 白盒 | 验证模块衔接的正确性 |
| 系统测试 | 集成测试后 | 整个系统(软 / 硬件) | 黑盒测试工程师 | 黑盒测试 | 验证系统功能 / 非功能需求 |
| 冒烟测试 | 系统测试前 | 新编译版本 | 开发 / 测试人员 | 黑盒测试 | 验证核心功能是否可运行 |
| 回归测试 | 代码修改后 | 已有功能 | 测试人员(多自动化) | 黑盒测试 | 确保修改未引入新错误 |
| 验收测试 | 系统测试后 | 整个系统 | 最终用户 / 需求方 | 黑盒测试 | 确认系统是否满足验收标准 |
六、按照是否⼿⼯测试
两类测试的定义
| 测试类型 | 定义 |
|---|---|
| 手工测试 | 由测试人员手动输入用例、观察结果,是基础且必要的测试步骤 |
| 自动化测试 | 将人工执行的测试转为机器执行(如功能 / 性能 / 安全自动化),可分为接口测试、UI 测试等,其中接口测试的投入产出比更高 |
手工测试与自动化测试的优缺点对比
| 维度 | 自动化测试 | 手工测试 |
|---|---|---|
| 优点 | 节省成本、提升效率、保障质量稳定性 | 技术要求低、可进行发散性测试(如探索性测试) |
| 缺点 | 对人员技术要求高、无法完成发散性测试 | 效率低、时间 / 人力成本高 |
实际项目中通常 "手工 + 自动化" 结合:手工测试适用于探索性、需求频繁变更的场景;自动化测试适用于回归测试、重复执行的场景,以平衡效率与成本。
七、按照实施组织划分
1. α 测试(Alpha 测试)
- 定义:公司内部用户在模拟环境下进行的测试,需评估功能、可用性、可靠性等维度(FLURPS);
- 特点:环境由开发方控制,用户数量少、时间集中,不能由程序 / 测试员执行。
2. β 测试(Beta 测试)
- 定义:最终用户在实际环境下进行的测试,通常通过邀请码招募用户;
- 特点:环境不受开发方控制,用户数量多、时间分散,目的是发现真实场景下的问题。

3. α 与 β 测试的区别
| 维度 | α 测试 | β 测试 |
|---|---|---|
| 测试场所 | 公司内部模拟环境 | 用户实际环境 |
| 执行时机 | 先于 β 测试执行 | α 测试通过后执行 |
| 持续时间 | 时间较短 | 时间较长 |
4. 第三方测试
- 定义:由独立第三方公司执行的测试;
- 作用:保障测试客观性,同时节省成本、加速软件上线。
八、按照测试地域划分
1.两类测试的定义
| 测试类型 | 定义 |
|---|---|
| 国际化测试 | 验证软件在不同语言、地区环境下能否正常工作(如案例中滴滴外卖适配墨西哥西班牙语、中国中文) |
| 本地测试 | 针对特定区域的需求进行的测试(此前介绍的多数测试类型都属于本地测试) |


2.国际化测试的核心关注项
需验证软件在不同地域下的适配性,包括:
- 布局:文字(如不同语言的排版、字符长度)是否适配界面;
- 时间 / 日期:不同地区的格式(如中国 "年 - 月 - 日"、美国 "月 / 日 / 年");
- 数字格式:数值、计量单位的地域差异;
- 货币:不同地区的货币符号、汇率适配;
- 设备型号:不同地区主流设备的兼容性。
国际化测试是软件全球化部署的必要环节,需覆盖地域差异带来的功能、体验适配问题,确保软件在不同市场的可用性。