乐于分享
好东西不私藏

系分/架构——软件测试

系分/架构——软件测试

我们将以“在线购物网站”作为例子贯穿全文,帮助大家理解测试的目的、过程、方法、类型以及部署的相关知识。

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 黑盒测试的方法

专业性描述黑盒测试也称为功能测试或数据驱动测试,测试人员不关心程序内部结构和实现,只根据输入和输出来验证功能是否正确。

“在线购物网站”黑盒测试方法示例

等价类划分:将输入数据划分为有效等价类和无效等价类
有效等价类:用户名长度6-20位,包含字母和数字
无效等价类:用户名长度小于6位,大于20位,包含特殊字符
测试:用有效用户名测试注册成功,用无效用户名测试注册失败
边界值分析:测试输入边界值
边界:商品数量最小1,最大999
测试:输入0、1、2、998、999、1000
预期:0和1000应报错,其他应成功
因果图:分析输入条件之间的关系
条件:用户已登录、商品有库存、用户有足够余额
结果:允许下单
测试:测试各种条件组合下的下单结果
错误推测法:凭经验推测可能出错的场景
推测:网络中断时下单、重复提交订单、特殊字符搜索
测试:模拟这些场景,验证系统处理是否正确
场景法:模拟用户实际使用场景
场景:用户浏览商品→加入购物车→填写地址→选择支付→下单成功
测试:按这个流程走一遍,验证整个流程是否顺畅

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:是VIP        total = total * 0.9;  // VIP打9折    }    if (total > 1000) {  // 条件3:总价超过1000        total = total - 100;  // 满1000减100    }    return total;}

覆盖标准:

  1. 语句覆盖:确保每行代码都至少执行一次
    测试用例:有库存的商品,非VIP,总价不超过1000
    覆盖:执行了所有代码行
  2. 判定覆盖(分支覆盖):确保每个判断的真假都至少执行一次
    测试用例1:有库存,是VIP,总价超过1000(所有条件为真)
    测试用例2:无库存,非VIP,总价不超过1000(所有条件为假)
  3. 条件覆盖:确保每个条件的真假都至少执行一次
    测试用例1:有库存(真),是VIP(真),总价超过1000(真)
    测试用例2:无库存(假),非VIP(假),总价不超过1000(假)
  4. 判定-条件覆盖:同时满足判定覆盖和条件覆盖
    测试用例1:有库存,是VIP,总价超过1000
    测试用例2:无库存,非VIP,总价不超过1000
  5. 条件组合覆盖:每个判定中所有条件的可能组合都至少执行一次
    组合1:有库存,是VIP,总价>1000
    组合2:有库存,是VIP,总价≤1000
    组合3:有库存,非VIP,总价>1000
    组合4:有库存,非VIP,总价≤1000
    组合5:无库存,是VIP,总价>1000
    组合6:无库存,是VIP,总价≤1000
    组合7:无库存,非VIP,总价>1000
    组合8:无库存,非VIP,总价≤1000
  6. 路径覆盖:确保程序中所有可能的执行路径都至少执行一次
    路径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 按测试对象划分

  1. 功能测试:验证软件功能是否符合需求

    示例:测试在线购物网站的下单、支付、退货功能是否正常

  2. 性能测试:验证软件性能指标是否满足要求

    示例:测试网站在1000人同时访问时的响应速度、吞吐量

  3. 安全测试:验证软件安全性,发现安全漏洞

    示例:测试网站能否防御SQL注入、XSS攻击、CSRF攻击

  4. 兼容性测试:验证软件在不同环境下的兼容性

    示例:测试网站在Chrome、Firefox、Safari、Edge等浏览器中的表现

  5. 易用性测试:验证软件是否易用、易学

    示例:测试网站导航是否清晰,操作是否简单,界面是否美观

  6. 可靠性测试:验证软件在异常情况下的稳定性

    示例:测试网站在网络中断、服务器宕机后的恢复能力

4.2 按测试阶段划分

  1. 单元测试:测试最小可测试单元(函数、方法)

    示例:测试计算订单总价的函数,测试用户验证的函数

  2. 集成测试:测试模块之间的接口和交互

    示例:测试用户模块和订单模块的集成,测试支付模块和订单模块的集成

  3. 系统测试:测试整个系统是否符合需求

    示例:测试整个在线购物网站的功能、性能、安全等

  4. 验收测试:用户验证系统是否满足业务需求

    示例:业务人员测试网站是否满足业务需求,是否可以使用

4.3 按被测软件划分

  1. Web应用测试:测试基于浏览器的应用

    示例:测试在线购物网站的Web版

  2. 移动应用测试:测试手机App

    示例:测试在线购物网站的iOS和Android App

  3. 桌面应用测试:测试Windows、Mac等桌面应用

    示例:测试商家的后台管理桌面应用

  4. 嵌入式系统测试:测试嵌入式设备中的软件

    示例:测试智能快递柜的控制软件

4.4 其他测试

  1. 回归测试:修改软件后,重新测试以确保没有引入新问题

    示例:修复支付bug后,重新测试支付功能及相关功能

  2. 冒烟测试:快速验证软件基本功能是否正常

    示例:每次版本发布前,快速测试注册、登录、浏览、下单等核心功能

  3. 探索性测试:无预定测试用例,边探索边测试

    示例:测试人员随意使用网站,尝试各种操作,发现潜在问题

  4. Alpha测试:内部测试,由开发组织内部人员进行

    示例:公司内部员工测试在线购物网站,提供反馈

  5. Beta测试:外部测试,由真实用户在实际环境中进行

    示例:邀请部分真实用户测试网站,收集使用反馈

  6. A/B测试:同时发布两个版本,比较哪个更好

    示例:A版本按钮是红色,B版本按钮是蓝色,看哪个点击率更高

5. 软件部署

专业性描述软件部署是将开发完成的软件发布到生产环境,供最终用户使用的过程。包括部署计划、环境准备、部署执行、验证测试、监控维护等步骤。

“在线购物网站”部署流程示例

  1. 部署计划:
    确定部署时间:选择凌晨1-3点,用户最少的时间段
    制定回滚计划:如果部署失败,如何快速回退到上一版本
    通知相关人员:通知运维、测试、客服、业务等部门
  2. 环境准备:
    准备生产服务器:配置服务器硬件、网络、安全设置
    安装运行环境:安装操作系统、数据库、Web服务器、运行环境
    准备数据库:创建数据库,导入基础数据
  3. 部署执行:
    备份当前版本:备份当前运行的程序、配置文件、数据库
    停止服务:优雅停止当前服务,避免数据丢失
    部署新版本:上传新版本程序,更新配置文件
    启动服务:启动新版本服务
  4. 验证测试:
    冒烟测试:快速测试核心功能是否正常
    监控检查:检查系统监控指标是否正常(CPU、内存、磁盘、网络)
    日志检查:检查错误日志是否有异常
  5. 监控维护:
    持续监控:监控系统运行状态,及时发现和解决问题
    收集反馈:收集用户反馈,了解部署后的问题
    性能优化:根据监控数据,优化系统性能

总结

软件测试是确保软件质量的重要手段,贯穿软件开发的整个生命周期。从测试目的到测试过程,从测试方法到测试类型,从测试执行到软件部署,每一个环节都至关重要。全面的测试能够有效发现和修复问题,确保系统稳定、安全、可靠地运行。通过掌握测试的基本概念、方法和流程,我们能够更好地规划和组织测试工作,提高软件质量,降低项目风险。

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 系分/架构——软件测试

猜你喜欢

  • 暂无文章