系分/架构——软件测试
我们将以“在线购物网站”作为例子贯穿全文,帮助大家理解测试的目的、过程、方法、类型以及部署的相关知识。
1. 软件测试的目的
专业性描述软件测试是通过人工或自动化的手段,对软件系统进行验证和确认的过程,目的是评估软件质量,发现软件中的缺陷,确保软件满足需求规格说明,并尽可能在软件发布前发现和修复问题。
大白话类比就像汽车出厂前的质量检查:
-
检查发动机能否正常启动(功能测试) -
检查刹车是否灵敏(性能测试) -
检查安全气囊是否在碰撞时弹出(安全测试) -
检查座椅是否舒适(用户体验测试)
目的是确保汽车安全可靠,不会在行驶中出问题。
“在线购物网站”测试目的示例
- 验证功能正确性:确保用户能成功下单、支付、查看订单
- 发现潜在缺陷:找出可能导致订单丢失、支付失败的bug
- 保障系统稳定:确保”双十一”大促时系统不会崩溃
- 提升用户体验:确保页面加载快、操作流畅、界面友好
- 满足合规要求:确保用户数据安全,符合隐私保护法规
2. 测试过程
软件测试是一个系统化的过程,通常包括以下阶段:
“在线购物网站”测试过程示例
- 测试计划阶段:
确定测试范围:用户注册、商品浏览、下单、支付、物流跟踪等核心功能 分配资源:3名功能测试工程师,1名性能测试工程师,1名安全测试工程师 安排进度:2周完成功能测试,1周完成性能测试,3天完成安全测试 - 测试设计阶段:
设计测试用例:设计100个功能测试用例,20个性能测试场景,10个安全测试用例 准备测试数据:准备1000个测试商品,100个测试用户,各种测试订单状态 搭建测试环境:搭建与生产环境相似的测试服务器、数据库、网络环境 - 测试执行阶段:
执行测试用例:按计划执行所有测试用例 记录测试结果:记录每个测试用例的执行结果(通过/失败) 报告缺陷:发现bug时,详细记录复现步骤,提交缺陷管理系统 - 缺陷管理阶段:
跟踪缺陷:跟踪每个bug的状态(新建、修复中、已修复、已验证) 验证修复:开发修复bug后,测试人员验证修复是否有效 回归测试:修复重要bug后,进行回归测试,确保没有引入新问题 - 测试报告阶段:
总结结果:共执行130个测试用例,通过125个,失败5个 评估质量:核心功能稳定,性能满足要求,存在2个中等级别安全漏洞 发布建议:建议修复安全漏洞后发布,当前版本质量可接受
3. 测试方法
3.1 按是否可见
3.1.1 黑盒测试的方法
专业性描述黑盒测试也称为功能测试或数据驱动测试,测试人员不关心程序内部结构和实现,只根据输入和输出来验证功能是否正确。
“在线购物网站”黑盒测试方法示例
3.1.2 白盒测试的覆盖标准
专业性描述白盒测试也称为结构测试或逻辑驱动测试,测试人员了解程序内部结构和实现,根据代码逻辑设计测试用例,确保代码的每一部分都被测试到。
“在线购物网站”白盒测试覆盖标准示例
假设有一个计算订单总价的函数:function calculateTotal(products, isVip) {let total = 0;for (let product of products) {if (product.stock > 0) { // 条件1:有库存total += product.price * product.quantity;}}if (isVip) { // 条件2:是VIPtotal = total * 0.9; // VIP打9折}if (total > 1000) { // 条件3:总价超过1000total = total - 100; // 满1000减100}return total;}
覆盖标准:
- 语句覆盖:确保每行代码都至少执行一次
测试用例:有库存的商品,非VIP,总价不超过1000 覆盖:执行了所有代码行 - 判定覆盖(分支覆盖):确保每个判断的真假都至少执行一次
测试用例1:有库存,是VIP,总价超过1000(所有条件为真) 测试用例2:无库存,非VIP,总价不超过1000(所有条件为假) - 条件覆盖:确保每个条件的真假都至少执行一次
测试用例1:有库存(真),是VIP(真),总价超过1000(真) 测试用例2:无库存(假),非VIP(假),总价不超过1000(假) - 判定-条件覆盖:同时满足判定覆盖和条件覆盖
测试用例1:有库存,是VIP,总价超过1000 测试用例2:无库存,非VIP,总价不超过1000 - 条件组合覆盖:每个判定中所有条件的可能组合都至少执行一次
组合1:有库存,是VIP,总价>1000 组合2:有库存,是VIP,总价≤1000 组合3:有库存,非VIP,总价>1000 组合4:有库存,非VIP,总价≤1000 组合5:无库存,是VIP,总价>1000 组合6:无库存,是VIP,总价≤1000 组合7:无库存,非VIP,总价>1000 组合8:无库存,非VIP,总价≤1000 - 路径覆盖:确保程序中所有可能的执行路径都至少执行一次
路径1:有库存→是VIP→总价>1000 路径2:有库存→是VIP→总价≤1000 路径3:有库存→非VIP→总价>1000 路径4:有库存→非VIP→总价≤1000 路径5:无库存→是VIP→总价>1000 路径6:无库存→是VIP→总价≤1000 路径7:无库存→非VIP→总价>1000 路径8:无库存→非VIP→总价≤1000
黑盒测试 vs 白盒测试对比
|
|
|
|
|---|---|---|
| 测试视角 |
|
|
| 测试依据 |
|
|
| 测试人员 |
|
|
| 测试方法 |
|
|
| 优点 |
|
|
| 缺点 |
|
|
| 适用阶段 |
|
|
3.2 按是否执行
专业性描述按测试时是否实际执行程序,测试可分为静态测试和动态测试。
“在线购物网站”静态测试和动态测试示例
静态测试(不执行程序):
- 代码审查:开发人员互相审查下单功能的代码
检查:是否考虑了并发下单问题;检查:是否正确处理了库存不足的情况;检查:是否有安全漏洞(如SQL注入) - 文档审查:审查需求文档、设计文档
检查:需求是否完整、清晰、无矛盾;检查:设计是否符合需求 - 静态分析工具:使用工具检查代码质量
检查:代码复杂度是否过高;检查:是否有未使用的变量;检查:是否符合编码规范
动态测试(执行程序):
- 功能测试:实际执行下单功能
操作:选择商品,点击下单 验证:订单是否成功创建 - 性能测试:模拟多用户同时下单
操作:模拟1000个用户同时下单 验证:系统响应时间是否在可接受范围内 - 安全测试:尝试各种攻击手段
操作:尝试SQL注入攻击 验证:系统是否能防御攻击
4. 测试类型
4.1 按测试对象划分
- 功能测试:验证软件功能是否符合需求
示例:测试在线购物网站的下单、支付、退货功能是否正常
- 性能测试:验证软件性能指标是否满足要求
示例:测试网站在1000人同时访问时的响应速度、吞吐量
- 安全测试:验证软件安全性,发现安全漏洞
示例:测试网站能否防御SQL注入、XSS攻击、CSRF攻击
- 兼容性测试:验证软件在不同环境下的兼容性
示例:测试网站在Chrome、Firefox、Safari、Edge等浏览器中的表现
- 易用性测试:验证软件是否易用、易学
示例:测试网站导航是否清晰,操作是否简单,界面是否美观
- 可靠性测试:验证软件在异常情况下的稳定性
示例:测试网站在网络中断、服务器宕机后的恢复能力
4.2 按测试阶段划分
- 单元测试:测试最小可测试单元(函数、方法)
示例:测试计算订单总价的函数,测试用户验证的函数
- 集成测试:测试模块之间的接口和交互
示例:测试用户模块和订单模块的集成,测试支付模块和订单模块的集成
- 系统测试:测试整个系统是否符合需求
示例:测试整个在线购物网站的功能、性能、安全等
- 验收测试:用户验证系统是否满足业务需求
示例:业务人员测试网站是否满足业务需求,是否可以使用
4.3 按被测软件划分
- Web应用测试:测试基于浏览器的应用
示例:测试在线购物网站的Web版
- 移动应用测试:测试手机App
示例:测试在线购物网站的iOS和Android App
- 桌面应用测试:测试Windows、Mac等桌面应用
示例:测试商家的后台管理桌面应用
- 嵌入式系统测试:测试嵌入式设备中的软件
示例:测试智能快递柜的控制软件
4.4 其他测试
- 回归测试:修改软件后,重新测试以确保没有引入新问题
示例:修复支付bug后,重新测试支付功能及相关功能
- 冒烟测试:快速验证软件基本功能是否正常
示例:每次版本发布前,快速测试注册、登录、浏览、下单等核心功能
- 探索性测试:无预定测试用例,边探索边测试
示例:测试人员随意使用网站,尝试各种操作,发现潜在问题
- Alpha测试:内部测试,由开发组织内部人员进行
示例:公司内部员工测试在线购物网站,提供反馈
- Beta测试:外部测试,由真实用户在实际环境中进行
示例:邀请部分真实用户测试网站,收集使用反馈
- A/B测试:同时发布两个版本,比较哪个更好
示例:A版本按钮是红色,B版本按钮是蓝色,看哪个点击率更高
5. 软件部署
专业性描述软件部署是将开发完成的软件发布到生产环境,供最终用户使用的过程。包括部署计划、环境准备、部署执行、验证测试、监控维护等步骤。
“在线购物网站”部署流程示例
- 部署计划:
确定部署时间:选择凌晨1-3点,用户最少的时间段 制定回滚计划:如果部署失败,如何快速回退到上一版本 通知相关人员:通知运维、测试、客服、业务等部门 - 环境准备:
准备生产服务器:配置服务器硬件、网络、安全设置 安装运行环境:安装操作系统、数据库、Web服务器、运行环境 准备数据库:创建数据库,导入基础数据 - 部署执行:
备份当前版本:备份当前运行的程序、配置文件、数据库 停止服务:优雅停止当前服务,避免数据丢失 部署新版本:上传新版本程序,更新配置文件 启动服务:启动新版本服务 - 验证测试:
冒烟测试:快速测试核心功能是否正常 监控检查:检查系统监控指标是否正常(CPU、内存、磁盘、网络) 日志检查:检查错误日志是否有异常 - 监控维护:
持续监控:监控系统运行状态,及时发现和解决问题 收集反馈:收集用户反馈,了解部署后的问题 性能优化:根据监控数据,优化系统性能
总结
软件测试是确保软件质量的重要手段,贯穿软件开发的整个生命周期。从测试目的到测试过程,从测试方法到测试类型,从测试执行到软件部署,每一个环节都至关重要。全面的测试能够有效发现和修复问题,确保系统稳定、安全、可靠地运行。通过掌握测试的基本概念、方法和流程,我们能够更好地规划和组织测试工作,提高软件质量,降低项目风险。
夜雨聆风