【软件测试】测试分类
1. 概念
软件测试是通过系统化的方法评估软件质量的过程,就像给产品做全方位体检。它贯穿软件开发的整个生命周期,目的是在用户发现问题前,提前发现并修复缺陷。举个例子:开发团队完成一个新功能后,测试人员会模拟用户操作,验证功能是否符合需求文档描述,同时检查是否存在崩溃、数据错误等问题。
2. 按测试目标分类
2.1 界面测试
- 核心目标:验证用户界面(UI)的视觉效果和交互是否符合设计规范。
- 测试内容:
- 按钮、图标的位置和大小是否准确
- 字体颜色、间距是否与设计稿一致
- 页面在不同分辨率下的显示效果
- 实例:
某电商App的购物车页面中,测试人员发现“结算”按钮在iOS设备上被截断,导致部分文字无法显示,需调整布局。
2.2 功能测试
- 核心目标:确保软件功能按需求正常运行。
- 测试方法:
- 正向测试:验证功能正常使用场景(如登录成功)
- 反向测试:验证异常输入时的处理(如密码错误提示)
- 实例:
测试银行转账功能时,输入金额为负数,系统应提示“金额无效”而非执行转账。
2.3 性能测试
- 核心目标:评估系统在高负载下的稳定性。
- 测试类型:
类型 场景示例 指标参考 负载测试 模拟1000用户同时在线支付 响应时间≤3秒,CPU使用率<80% 压力测试 逐步增加用户直到系统崩溃 找出最大承载用户量 疲劳测试 持续运行72小时处理交易 内存泄漏检测 - 实例:
某社交平台在明星官宣时服务器宕机,事后通过压力测试优化数据库分表策略。
2.4 可靠性测试
- 核心目标:验证系统长期运行的稳定性。
- 重点检查项:
- 内存泄漏(如连续操作后内存占用持续上升)
- 数据持久化(重启后数据不丢失)
- 实例:
智能家居App连续执行100次开关灯操作,第87次时出现指令延迟,排查为线程阻塞问题。
2.5 安全性测试
- 核心目标:防止数据泄露和恶意攻击。
- 常见测试项:
- SQL注入:输入
' OR 1=1 --
尝试绕过登录 - XSS攻击:在输入框插入
<script>alert(1)</script>
- 权限越权:普通用户尝试访问管理员接口
- SQL注入:输入
- 实例:
某论坛系统未过滤特殊字符,导致用户昵称可嵌入恶意脚本,攻击他人浏览器。
2.6 易用性测试
- 核心目标:降低用户学习成本,提升操作流畅度。
- 评估维度:
- 新手引导是否清晰(如首次使用时的浮层提示)
- 功能入口是否直观(如“设置”按钮放在右上角)
- 错误提示是否友好(如“密码错误”改为“账号或密码不正确,还可尝试3次”)
- 实例:
测试发现某医疗App的预约流程需要点击6次才能完成,优化后缩短至3步。
3. 按执行方式分类
3.1 静态测试
- 特点:不运行程序,通过检查文档或代码发现问题。
- 实施方式:
- 代码评审:开发团队互相审查代码逻辑
- 需求评审:测试人员参与确认需求可测试性
- 实例:
评审时发现需求文档中“用户年龄范围为18-60岁”未说明包含60岁,需明确边界条件。
3.2 动态测试
- 特点:通过运行程序并输入数据验证结果。
- 典型流程:
- 准备测试数据(如测试账号、模拟文件)
- 执行测试用例(如点击按钮、提交表单)
- 比对实际结果与预期结果
- 实例:
测试文件上传功能时,上传10GB视频文件,系统提示“文件大小超过限制”而非卡死。
4. 按测试方法分类
4.1 白盒测试
- 适用对象:开发人员和测试工程师(需懂代码)
- 覆盖标准详解:
标准 描述 示例代码片段 语句覆盖 每行代码至少执行一次 if(a>0) { x=1; } else { x=2; }
需测试a>0和a≤0两种情况条件覆盖 每个逻辑条件取真/假各一次 if(a>0 && b<5)
需覆盖4种组合路径覆盖 覆盖所有可能的代码执行路径 循环和嵌套分支需全路径测试 - 实例:
测试支付接口时,覆盖正常支付、余额不足、网络超时等所有异常分支。
4.2 黑盒测试
- 适用对象:测试人员和最终用户
- 常用技术:
- 等价类划分:将输入数据分为有效类和无效类(如年龄输入分为0-17、18-60、61-120)
- 边界值分析:测试边界值(如允许最大文件大小99.99MB和100MB时的处理)
- 实例:
测试注册功能时,输入手机号“1881234567”(10位)触发“号码格式错误”提示。
4.3 灰盒测试
- 适用场景:API测试、性能优化分析
- 实施方式:
- 结合代码日志定位性能瓶颈
- 根据接口文档设计测试用例,同时监控数据库变更
- 实例:
测试订单查询接口时,发现响应时间长,通过SQL执行计划分析优化索引。
5. 按测试阶段分类
5.1 单元测试
- 执行者:开发人员
- 工具:JUnit(Java)、Pytest(Python)
- 重点:
- 函数/方法的输入输出验证
- 隔离测试(使用Mock对象模拟依赖)
- 实例:
测试计算税率的函数:输入收入10万元,验证输出税额是否符合税法规则。
5.2 集成测试
- 执行者:测试工程师 + 开发人员
- 策略:
- 自顶向下:先测高层模块,逐步集成底层
- 自底向上:先测底层模块,逐步组装
- 实例:
测试用户注册模块与邮件服务集成:注册成功后检查收件箱是否收到验证邮件。
5.3 系统测试
- 关键测试类型:
- 冒烟测试:开发提交版本后立即执行,确认基础功能正常(如App能正常启动)
- 回归测试:修复Bug后重新执行全量用例,避免引入新问题
- 兼容性测试:跨浏览器(Chrome/Firefox)、跨设备(iOS/Android)验证
- 实例:
iOS 17系统升级后,某金融App的指纹登录功能失效,回归测试发现是系统API变更导致。
5.4 验收测试
- 用户验收测试(UAT):
- 真实用户验证功能是否符合业务需求
- 签署验收报告作为项目结项依据
- 实例:
医院管理系统上线前,护士长验证排班功能能否满足三班倒的实际需求。
6. 按是否手工测试
6.1 手工测试
- 优势:灵活应对探索性测试(如随机操作发现隐藏Bug)
- 适用场景:
- 用户体验评估(如页面流畅度)
- 复杂业务场景验证(如保险理赔流程)
- 实例:
游戏测试员手动体验剧情任务,发现某关卡NPC对话出现逻辑矛盾。
6.2 自动化测试
- 工具:Selenium(Web)、Appium(移动端)、LoadRunner(性能)
- 实施步骤:
- 筛选适合自动化的用例(重复执行、核心流程)
- 编写和维护脚本
- 集成到CI/CD流水线(如Jenkins定时执行)
- 实例:
电商平台每日凌晨自动执行500个核心用例,邮件发送测试报告。
7. 按实施组织划分
7.1 α测试(内测)
- 参与人员:公司内部员工
- 测试重点:
- 发现严重功能缺陷
- 收集内部反馈优化流程
- 实例:
钉钉新版本发布前,阿里全体员工测试“文档协同编辑”功能。
7.2 β测试(公测)
- 参与人员:真实用户自愿申请
- 价值:
- 获取真实场景下的使用反馈
- 测试服务器压力承载能力
- 实例:
微信“小程序”功能上线前,开放10万用户公测,收集性能数据。
7.3 第三方测试
- 执行机构:国家质检中心、专业测评实验室
- 认证类型:
- 安全认证(等保2.0)
- 性能认证(TPC-C基准测试)
- 实例:
某银行核心系统通过中国银联安全认证,获准接入央行结算系统。
8. 按测试地域划分
8.1 国际化测试
- 重点:
- 多语言支持(如阿拉伯语从右向左排版)
- 时区与日期格式(美国:MM/DD/YYYY vs 中国:YYYY-MM-DD)
- 货币与单位转换(如英镑符号£显示异常)
- 实例:
某国际会议系统未适配希伯来语,导致文字重叠,需调整UI布局。
8.2 本地化测试
- 重点:
- 符合当地法律法规(如中国《网络安全法》)
- 文化习俗适配(如伊斯兰国家App去除酒精相关内容)
- 实例:
某短视频App在印度上线前,移除涉及宗教敏感的内容。