软件测试知识体系

一、测试基础概念

1.1 软件测试定义

什么是软件测试?软件测试是指在规定条件下通过执行软件来发现缺陷,验证软件是否满足需求和预期的过程

这个过程既可以是动态执行软件程序来观察行为,也可以是静态检查文档、代码和设计

1.2 软件测试的目的

核心目的并非单纯“证明软件没问题”,而是:

  • 发现缺陷:尽早找出代码、逻辑、设计中的错误。

  • 验证与确认:验证是否正确地做了产品(符合需求规格),确认是否做了正确的产品(满足用户实际场景)。

  • 降低风险:评估质量状况,为产品发布决策提供数据支撑。

  • 预防缺陷:通过对测试结果的分析,反馈到开发过程,防止同类问题再次发生。

  • 建立信心:确保软件在关键业务场景下稳定可靠。

1.3 软件测试原则

  1. 测试尽早介入 - 越早发现bug,修复成本越低

  2. 缺陷群集现象 - 缺陷往往集中在某些模块

  3. 完全测试不可能 - 无法穷尽所有测试用例

  4. Pareto原则 - 80%的缺陷来自20%的模块

  5. 杀虫剂悖论 - 反复使用同一测试用例会失效

  6. 测试依赖环境 - 测试结果与环境相关

  7. 无错误谬误 - 没发现错误不等于系统可接受


二、测试方法分类

2.1 按测试方式划分

方法

说明

例子

黑盒测试

不关注内部结构,只验证输入输出

功能测试、UI测试

白盒测试

关注代码内部逻辑和结构

单元测试、代码覆盖

灰盒测试

介于黑盒和白盒之间

集成测试

2.2 按测试阶段划分

阶段

说明

单元测试

对最小可测单元进行测试(开发自己做)

集成测试

模块间的接口和交互测试

系统测试

对完整系统进行功能和非功能测试

验收测试

用户确认是否接受(Alpha内测/Beta公测)

2.3 按测试方向划分

类型

说明

功能测试

验证功能是否符合需求

性能测试

验证系统在负载下的表现

安全测试

验证系统安全性

兼容性测试

验证在不同环境下的表现(浏览器、操作系统、分辨率)

易用性测试

验证用户体验

可靠性测试

验证系统在长时间运行的稳定性

恢复测试

验证系统的故障恢复能力

2.4 其他测试名词

回归测试:验证新改的代码没有破坏旧的功能。每次修复 Bug 或版本迭代后必做,以确保系统原有的稳定部分未受影响。

冒烟测试:对核心基本功能进行“提测前摸底”。目的是快速确认软件主体流程是否跑得通,决定是否值得投入全面测试。


三、测试用例设计方法

3.1 等价类划分法

将输入域划分为有效等价类和无效等价类,每个等价类选取代表性值测试。

示例:

输入条件:1 ≤ 年龄 ≤ 150
- 有效等价类:1-150之间的整数
- 无效等价类:< 1, > 150, 非整数

3.2 边界值分析法

对边界值进行测试,通常与等价类结合使用。

示例:

输入条件:1 ≤ 年龄 ≤ 150
边界值:0, 1, 150, 151

3.3 判定表法

适用于多条件组合的情况,列出所有条件组合和对应的结果。

示例:

条件:功率<50W, 电压<220V
结果:正常工作、告警、停止

3.4 因果图法

用图形化方式表示输入条件(因)和输出结果(果)之间的关系。

3.5 场景法

用业务流程来设计测试用例,关注主流程、备选流程、异常流程。

示例(ATM取款):

  • 主流程:插卡→输入密码→输入金额→取卡→出钞

  • 异常流程:密码错误3次、余额不足、超过当日限额

3.6 错误推测法

基于测试累积的经验和直觉,推测可能存在缺陷的地方设计用例。

测试用例编写要素

结合我工作经验来说,这个需要分开讨论,如果是excel表格编写测试用例的话,那么用例要素相对会比较全面,如下所示:

用例编号、用例标题、前置条件、操作步骤、重要级别、测试数据、所属模块、预期结果、实际结果、执行人、备注

| 用例编号 | 用例标题 | 前置条件 | 操作步骤 | 重要级别 | 测试数据 | 所属模块 | 预期结果 | 实际结果 | 执行人 | 备注 |
| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- |
| TC_LOGIN_001 | 验证已注册用户使用正确账号密码登录成功 | 1. 账号 `test01` 已注册且状态正常<br>2. 密码为 `Pass@123`<br>3. 系统处于登录页 | 1. 访问登录页面<br>2. 输入用户名 `test01`<br>3. 输入密码 `Pass@123`<br>4. 点击“登录”按钮 | 高 | 用户名:`test01`<br>密码:`Pass@123` | 用户登录模块 | 1. 页面提示“登录成功”<br>2. 页面跳转至系统首页<br>3. 右上角显示用户昵称 | Pass | 张三 | 正向核心流程 |
| TC_LOGIN_003 | 验证密码输入错误超过5次后账号被锁定 | 1. 账号 `test02` 状态正常<br>2. 连续输错密码已达 4 次 | 1. 访问登录页<br>2. 输入用户名 `test02`<br>3. 输入**错误密码** `WrongPwd`<br>4. 点击“登录”<br>5. 再次输入正确密码 `Right@123` 尝试登录 | 高 | 用户名:`test02`<br>第5次错误密码:`WrongPwd`<br>正确密码:`Right@123` | 用户安全中心 | 1. 第5次登录时提示“密码错误,您还有0次尝试机会”<br>2. 再次使用正确密码登录时提示“账号已被锁定,请15分钟后再试” | Pass | 李四 | 安全策略,需等待15分钟后回归 |
| TC_SEARCH_005 | 验证搜索框对SQL注入特殊字符的过滤处理 | 网络正常,已登录系统 | 1. 定位到顶部全局搜索框<br>2. 输入测试数据中的特殊字符串<br>3. 点击“搜索”图标 | 中 | 搜索关键字:`' OR '1'='1` | 全局搜索模块 | 1. 系统不报错、不返回异常数据库信息<br>2. 无搜索结果时展示“未找到相关内容”<br>3. 后台无500错误日志 | Pass | 王五 | 错误推断法用例,安全测试 |

excel表格属于二维表格、线性罗列的布局,更倾向于用例的记录与执行

如果是x-mind思维导图编写测试用例的话,那么用例要素相对会比excel少一些,如下所示:

功能大模块 > 功能子模块 > 测试类型(功能测试、非功能测试) > 用例标题 > 测试数据 > 预期结果

用户管理(大模块)
├── 登录认证(子模块)
│   ├── 功能测试
│   │   ├── 用例标题:正确账号密码登录成功
│   │   │   ├── 测试数据:用户名=admin,密码=123456
│   │   │   └── 预期结果:登录成功,跳转首页,展示用户名
│   │   ├── 用例标题:密码错误登录失败
│   │   │   ├── 测试数据:用户名=admin,密码=error
│   │   │   └── 预期结果:提示“用户名或密码错误”,停留在登录页
│   │   └── 用例标题:空账号直接点击登录
│   │       ├── 测试数据:用户名=空,密码=空
│   │       └── 预期结果:按钮置灰不可点,或提示“请输入账号”
│   └── 非功能测试
│       ├── 用例标题:连续错误5次触发锁定
│       │   ├── 测试数据:同一账号连续输入错误密码5次
│       │   └── 预期结果:第6次尝试时提示“账号已锁定,请15分钟后再试”
│       └── 用例标题:弱网环境下登录响应时间
│           ├── 测试数据:模拟3G弱网(上行100kbps,下行200kbps)
│           └── 预期结果:请求未超时,登录接口响应时间≤3秒
│
└── 个人信息维护(子模块)
    ├── 功能测试
    │   ├── 用例标题:上传合规格式头像
    │   │   ├── 测试数据:文件名为avatar.jpg,大小=200KB
    │   │   └── 预期结果:上传成功,头像预览图更新为新图片
    │   └── 用例标题:修改昵称含特殊字符
    │       ├── 测试数据:昵称="测试_User-123"
    │       └── 预期结果:保存成功,个人主页显示新昵称
    └── 非功能测试
        └── 用例标题:上传超大体积头像
            ├── 测试数据:文件名为big.png,大小=15MB
            └── 预期结果:前端提示“文件大小不能超过5MB”,不上传至服务器

x-mind思维导图属于节点层级、树状发散的布局,更倾向于用例的分析与设计


四、测试流程

4.1 常规测试流程

需求分析与评审 → 制定测试计划 → 编写用例与用例评审 → 测试环境搭建与冒烟测试 →
用例执行与缺陷管理 → 测试报告与发布评估
  • 需求分析与评审

    • 任务:熟悉需求文档,参与需求评审会

    • 目标:确保需求可测试、无歧义,例如需求写明”页面加载要快“,就要具体问多快,否则无法测试

    • 产出:发现需求逻辑漏洞,整理测试范围清单

  • 制定测试计划

    • 任务:制定测试计划。明确测试范围、测试策略、测试人员等

    • 产出:测试计划书

  • 编写用例与用例评审

    • 任务:设计测试用例、准备测试数据、测试用例评审

    • 产出:用例评审通过的测试用例

  • 测试环境搭建与冒烟测试

    • 任务:部署测试版本,配置基础数据。执行冒烟测试

    • 思路:搭建好环境后,执行一两条高频核心用例,确保主体流程跑得通;若冒烟测试不通过,直接打回开发,不必浪费时间去测细节

  • 用例执行与缺陷管理

    • 第一轮(功能测试):按照用例执行,把发现的问题通过Jira、禅道等项目管理工具提交给开发

    • 第二轮(回归验证):开发修复好缺陷后,验证缺陷是否修复完毕。若修复完毕则关闭缺陷;若仍存在缺陷则打回给开发重新修复

    • 第三轮(全量回归):确认修复好缺陷的代码没有把原本的功能改出缺陷来

    • 非功能测试穿插进行:在功能基本稳定后,开展性能测试、兼容性测试等

  • 测试报告与发布评估

    • 任务:汇总用例执行率、通过率、遗留缺陷密度、严重Bug趋势图

    • 评估:对照测试计划里的发布标准。例如:核心功能100%通过。且无致命遗留Bug,则建议发布;否则建议延期

    • 产出:测试报告

4.2 测试计划内容

测试计划的核心思想就是为了解决”测什么、怎么测、谁来测、什么时候测、测到什么程度才算完“的问题的

  • 测试目标

    • 本次测试要达到什么目的?例如:验证核心流程畅通、确保支付接口性能满足1000TPS、无严重遗留Bug

  • 测试范围

    • 测什么 和 不测什么?明确指出被测模块,并重点标识不测的范围,防止范围蔓延

  • 测试策略

    • 测试类型/级别:做不做单元测试?做几轮集成测试?性能测试只做压力测试还是包括稳定性?

    • 测试方法:哪些使用自动化(接口)、哪些使用手工测试(新需求)、哪些需要检查数据库(灰盒)

    • 测试轮次:冒烟 > 第一轮全量 > 第二轮回归 > 第三轮收敛

  • 资源调度

    • 人力:测试经理、执行测试人员、自动化开发人员

    • 环境:服务器配置(IP、内存)、操作系统、浏览器版本、第三方依赖

    • 工具:缺陷管理工具、用例管理工具、抓包工具、压测工具

  • 时间安排

    • 什么时候写用例、什么时候执行、什么时候出报告

    • 需要和开发计划强关联(如:开发提测延迟,测试顺延)

  • 风险评估

    • 预测可能阻碍测试的事件及预案,举例:

      • 需求变更太晚 —— 申请封闭开发窗口,或预留缓冲时间

      • 提测质量太差(冒烟不过) —— 直接打回,记录延迟

      • 第三方接口未提供 —— 搭建Mock Server

  • 准入准出标准

    • 防止扯皮

    • 准入(开始测的前提):

      • 冒烟测试通过率100%、代码已静态扫描、开发自测报告已提交

    • 准出(可以上线的前提):

      • 核心功能用例执行率100%、遗留Bug中无“致命/严重”级别、性能指标达标

  • 交付物

    • 测试计划

    • 测试用例

    • 缺陷报告

    • 性能测试报告

    • 测试总结报告

4.3 测试策略与测试计划的区别

| 对比维度 | 测试策略 | 测试计划 |

| :--- | :--- | :--- |

| 定义 | 高层次的指导方针,描述测试的**整体方法和架构** | 具体的执行文档,描述测试的**范围、进度、资源和交付物** |

| 核心关注 | “为什么”和“做什么” (Why & What) | “谁来做、什么时候做、怎么做” (Who, When & How) |

| 回答的问题 | 哪些模块需重点测?用什么方法测?测试类型怎么分层? | 谁负责哪个模块?哪天写用例,哪天执行?环境 IP 是多少?用什么工具提 Bug? |

| 稳定性 | 相对稳定,不会频繁变动(如:支付模块必须做安全测试) | 动态滚动,随项目进度不断调整(如:开发延期,计划顺延两天) |

| 受众 | 技术负责人、架构师、项目经理 | 全体测试人员、开发代表、PMO |

| 产出形式 | 《测试计划》中的核心章节,或独立的《测试策略文档》 | 一份完整的《测试计划书》,包含策略、进度、人力和环境 |

五、缺陷管理(Bug)

5.1 Bug生命周期

新建 → 确认 → 指派 → 修复 → 验证 → 关闭
          ↓
        重新打开(验证失败)

5.2 Bug严重程度

等级

说明

示例

Blocker

系统无法运行

登录崩溃

Critical

功能严重受损

核心功能失效

Major

功能未按预期工作

次要功能失效

Minor

小问题

界面显示问题

Trivial

微小问题

拼写错误

5.3 Bug优先级

优先级

说明

P0

立即修复,影响发布

P1

高优先级,24小时内修复

P2

中优先级,版本内修复

P3

低优先级,下个版本修复

5.4 优秀Bug描述

  • 标题简洁明了

  • 复现步骤清晰(1、2、3...)

  • 预期结果 vs 实际结果

  • 环境信息(操作系统、浏览器、版本等)

  • 截图/日志附件


六、常用测试工具

7.1 缺陷管理工具

工具

说明

Jira

通用项目管理工具

禅道

国产开源项目管理工具

Bugzilla

开源缺陷跟踪工具

Redmine

开源项目管理工具

7.2 接口测试工具

工具

说明

Postman

API调试和测试

JMeter

可用于接口测试

SoapUI

SOAP/REST接口测试

Apifox

国产接口管理工具

7.3 性能测试工具

工具

说明

JMeter

开源性能测试工具

LoadRunner

商业性能测试工具

Gatling

基于Scala的性能测试

7.4 自动化测试工具

工具

说明

Selenium

Web自动化测试

Appium

移动端自动化测试

Pytest

Python单元测试框架

Unittest

Python单元测试框架

7.5 其他工具

工具

说明

Fiddler

抓包工具

Charles

抓包工具

Xshell

远程连接工具

Navicat

数据库管理工具


七、数据库基础(SQL)

8.1 基础查询

SELECT * FROM users WHERE age > 18;
SELECT name, age FROM users ORDER BY age DESC;
SELECT COUNT(*) FROM orders WHERE status = 'completed';

8.2 关联查询

-- 内连接
SELECT u.name, o.order_no
FROM users u
INNER JOIN orders o ON u.id = o.user_id;
​
-- 左连接
SELECT u.name, o.order_no
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;

8.3 聚合函数

SELECT COUNT(*), SUM(amount), AVG(amount), MAX(amount), MIN(amount)
FROM orders
GROUP BY user_id
HAVING COUNT(*) > 5;

九、Linux基础命令

9.1 文件操作

ls -la          # 列出文件
cd /path        # 切换目录
mkdir dir       # 创建目录
rm -rf dir      # 删除目录
cp file1 file2  # 复制文件
mv file1 file2  # 移动/重命名

9.2 文本查看

cat file        # 查看文件内容
head -n 10      # 查看前10行
tail -n 10      # 查看后10行
grep "关键词"   # 搜索关键词

9.3 权限管理

chmod 755 file  # 修改权限
chown user:group file  # 修改所有者

9.4 进程和网络

ps -ef         # 查看进程
kill -9 pid    # 强制终止进程
netstat -tlnp  # 查看端口监听
curl -I url    # 检查接口

十、网络基础知识

10.1 HTTP协议

  • 请求方法:GET(获取)、POST(创建)、PUT(更新)、DELETE(删除)

  • 状态码

    • 2xx:成功(200 OK, 201 Created)

    • 3xx:重定向(301, 302)

    • 4xx:客户端错误(400 Bad Request, 404 Not Found, 401 Unauthorized)

    • 5xx:服务端错误(500 Internal Server Error, 502 Bad Gateway)

  • Cookie:存储在客户端,文本文件

  • Session:存储在服务端,会话数据

10.3 TCP/UDP

  • TCP:面向连接,可靠传输(三次握手)

  • UDP:无连接,不可靠传输(更快)


十一、常见面试题

11.1 测试基础题

  1. 软件测试的目的是什么?

    发现软件中的缺陷,验证软件满足需求,确保软件质量。

  2. 测试用例设计方法有哪些?

    等价类划分、边界值分析、判定表、因果图、场景法、错误推测法。

  3. 如何判断测试完成?

    测试用例全部执行完毕;缺陷修复率达到标准;达到准入准出标准。

  4. 如何判断测试覆盖度?

    用例覆盖率、需求覆盖率、代码覆盖率(白盒)、路径覆盖率。

11.2 实际场景题

  1. 发现一个bug,但开发说不是bug怎么办?

    • 确认需求是否明确

    • 提供复现步骤和证据

    • 组织评审讨论

    • 如有分歧上报项目经理

  2. 项目上线前时间紧迫,如何处理?

    • 优先级排序,优先测试核心功能

    • 进行风险评估

    • 申请加班或增援

    • 向上级汇报风险

  3. 如何保证测试质量?

    • 用例评审

    • 执行复核

    • 缺陷分析

    • 总结复盘

11.3 技术题

  1. GET和POST的区别?

    • GET参数在URL中,POST在请求体中

    • GET长度受限,POST不受限

    • GET相对不安全,POST较安全

  2. 如何测试一个登录功能?

    • 功能:正常登录、错误密码、用户不存在、空密码

    • 边界:超长输入、特殊字符、SQL注入

    • 安全:暴力破解、SQL注入、XSS

    • 性能:并发登录、响应时间

  3. 如何进行接口测试?

    • 使用Postman或JMeter

    • 验证请求参数和响应

    • 检查状态码和业务码

    • 关联测试(依赖接口)


十二、自我介绍模板

面试官你好,我叫XXX,有4年多的软件测试经验。
我主要在厦门,之前的工作经历集中在B端和SaaS产品。上一份工作是在根号叁科技,做了三年多的测试组长,平时除了带小团队、做测试计划,大部分精力还是扑在一线测试上。
在技术这块,我比较熟悉接口自动化和UI自动化,像Pytest和Playwright都用得比较多。最近这一年,我也在尝试用AI来辅助写用例和自动化脚本,确实帮团队把回归测试的效率提了不少。
我性格比较沉稳,做事细致,之前的项目线上质量一直控制得比较稳,没有出过测试原因导致的线上事故。这是我的一个简单介绍,谢谢。

十三、面试反问环节常见问题

  1. 团队规模和测试流程是怎样的?

  2. 使用的测试工具和技术栈?

  3. 有没有自动化测试,比例如何?

  4. 是否有转岗或晋升机会?

  5. 绩效考核标准是什么?


提示:面试前请根据目标公司的业务特点,针对性地复习相关行业知识(如电商、金融、物流等)。

评论