软件测试知识体系
一、测试基础概念
1.1 软件测试定义
什么是软件测试?软件测试是指在规定条件下通过执行软件来发现缺陷,验证软件是否满足需求和预期的过程
这个过程既可以是动态执行软件程序来观察行为,也可以是静态检查文档、代码和设计
1.2 软件测试的目的
核心目的并非单纯“证明软件没问题”,而是:
发现缺陷:尽早找出代码、逻辑、设计中的错误。
验证与确认:验证是否正确地做了产品(符合需求规格),确认是否做了正确的产品(满足用户实际场景)。
降低风险:评估质量状况,为产品发布决策提供数据支撑。
预防缺陷:通过对测试结果的分析,反馈到开发过程,防止同类问题再次发生。
建立信心:确保软件在关键业务场景下稳定可靠。
1.3 软件测试原则
测试尽早介入 - 越早发现bug,修复成本越低
缺陷群集现象 - 缺陷往往集中在某些模块
完全测试不可能 - 无法穷尽所有测试用例
Pareto原则 - 80%的缺陷来自20%的模块
杀虫剂悖论 - 反复使用同一测试用例会失效
测试依赖环境 - 测试结果与环境相关
无错误谬误 - 没发现错误不等于系统可接受
二、测试方法分类
2.1 按测试方式划分
2.2 按测试阶段划分
2.3 按测试方向划分
2.4 其他测试名词
回归测试:验证新改的代码没有破坏旧的功能。每次修复 Bug 或版本迭代后必做,以确保系统原有的稳定部分未受影响。
冒烟测试:对核心基本功能进行“提测前摸底”。目的是快速确认软件主体流程是否跑得通,决定是否值得投入全面测试。
三、测试用例设计方法
3.1 等价类划分法
将输入域划分为有效等价类和无效等价类,每个等价类选取代表性值测试。
示例:
输入条件:1 ≤ 年龄 ≤ 150
- 有效等价类:1-150之间的整数
- 无效等价类:< 1, > 150, 非整数3.2 边界值分析法
对边界值进行测试,通常与等价类结合使用。
示例:
输入条件:1 ≤ 年龄 ≤ 150
边界值:0, 1, 150, 1513.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严重程度
5.3 Bug优先级
5.4 优秀Bug描述
标题简洁明了
复现步骤清晰(1、2、3...)
预期结果 vs 实际结果
环境信息(操作系统、浏览器、版本等)
截图/日志附件
六、常用测试工具
7.1 缺陷管理工具
7.2 接口测试工具
7.3 性能测试工具
7.4 自动化测试工具
7.5 其他工具
七、数据库基础(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)
10.2 Cookie vs Session
Cookie:存储在客户端,文本文件
Session:存储在服务端,会话数据
10.3 TCP/UDP
TCP:面向连接,可靠传输(三次握手)
UDP:无连接,不可靠传输(更快)
十一、常见面试题
11.1 测试基础题
软件测试的目的是什么?
发现软件中的缺陷,验证软件满足需求,确保软件质量。
测试用例设计方法有哪些?
等价类划分、边界值分析、判定表、因果图、场景法、错误推测法。
如何判断测试完成?
测试用例全部执行完毕;缺陷修复率达到标准;达到准入准出标准。
如何判断测试覆盖度?
用例覆盖率、需求覆盖率、代码覆盖率(白盒)、路径覆盖率。
11.2 实际场景题
发现一个bug,但开发说不是bug怎么办?
确认需求是否明确
提供复现步骤和证据
组织评审讨论
如有分歧上报项目经理
项目上线前时间紧迫,如何处理?
优先级排序,优先测试核心功能
进行风险评估
申请加班或增援
向上级汇报风险
如何保证测试质量?
用例评审
执行复核
缺陷分析
总结复盘
11.3 技术题
GET和POST的区别?
GET参数在URL中,POST在请求体中
GET长度受限,POST不受限
GET相对不安全,POST较安全
如何测试一个登录功能?
功能:正常登录、错误密码、用户不存在、空密码
边界:超长输入、特殊字符、SQL注入
安全:暴力破解、SQL注入、XSS
性能:并发登录、响应时间
如何进行接口测试?
使用Postman或JMeter
验证请求参数和响应
检查状态码和业务码
关联测试(依赖接口)
十二、自我介绍模板
面试官你好,我叫XXX,有4年多的软件测试经验。
我主要在厦门,之前的工作经历集中在B端和SaaS产品。上一份工作是在根号叁科技,做了三年多的测试组长,平时除了带小团队、做测试计划,大部分精力还是扑在一线测试上。
在技术这块,我比较熟悉接口自动化和UI自动化,像Pytest和Playwright都用得比较多。最近这一年,我也在尝试用AI来辅助写用例和自动化脚本,确实帮团队把回归测试的效率提了不少。
我性格比较沉稳,做事细致,之前的项目线上质量一直控制得比较稳,没有出过测试原因导致的线上事故。这是我的一个简单介绍,谢谢。十三、面试反问环节常见问题
团队规模和测试流程是怎样的?
使用的测试工具和技术栈?
有没有自动化测试,比例如何?
是否有转岗或晋升机会?
绩效考核标准是什么?
提示:面试前请根据目标公司的业务特点,针对性地复习相关行业知识(如电商、金融、物流等)。
评论