软件测试基础

在这里插入图片描述
在这里插入图片描述

1.什么是软件测试?

定义:软件测试是通过人工或自动化的方式,验证软件是否满足规定需求,并且发现缺陷的过程

核心目的:

  • 验证软件功能是否符号需求
  • 确认软件满足用户期望
  • 尽早发现缺陷,降低修复成本
  • 提供软件质量信息,帮助决策

重要认知:测试不是为了证明软件没有bug,而且为了发现缺陷,并且评估软件质量


2.测试vs调试

对比项 测试 调试
目的 发现缺陷 定位并修复缺陷
执行者 测试人员 开发人员
阶段 贯穿整个开发周期 开发阶段
方法 设计用例,执行测试 分析代码,单步调试

3.软件开发的生命周期(SDLC)

3.1软件开发周期

需求分析==>概要设计==>详细设计==>编码==>测试==>上线==>维护

3.2软件常用开发模型

3.2.1瀑布模型(Waterfall Model)

特点:线性顺序,阶段分明,像瀑布一样逐级流下

需求分析 → 系统设计 → 编码实现 → 测试验证 → 部署上线 → 运维维护
   ↑___________________________________________________________|
                        发现问题需回溯

优点

  • 阶段清晰,易于管理
  • 文档完整,适合大型项目
  • 适合需求明确、变更少的项目

缺点

  • 灵活性差,难以应对需求变更
  • 测试阶段靠后,发现问题修复成本高
  • 用户要到后期才能看到成果

适用场景:需求明确、稳定的项目(如银行核心系统、军工项目)

3.2.2敏捷开发模型(Agile)

特点:迭代快速,小步快跑,拥抱变化

迭代1(2周)    迭代2(2周)    迭代3(2周)    迭代N...
├─ 需求        ├─ 需求        ├─ 需求
├─ 设计        ├─ 设计        ├─ 设计
├─ 开发        ├─ 开发        ├─ 开发
├─ 测试        ├─ 测试        ├─ 测试
└─ 交付        └─ 交付        └─ 交付
   ↑可工作的软件   ↑可工作的软件   ↑可工作的软件

核心原则(敏捷宣言):

  • 个体和互动 高于 流程和工具
  • 工作的软件 高于 详尽的文档
  • 客户合作 高于 合同谈判
  • 响应变化 高于 遵循计划

优点

  • 快速响应需求变化
  • 持续交付可用软件
  • 客户参与度高

缺点

  • 对团队自驱力要求高
  • 文档可能不足
  • 大型团队协作挑战大
3.2.3迭代模型(Iterative Model)

特点:先整体后细化,多次迭代完善

第1次迭代:实现核心框架(粗糙但可用)
第2次迭代:完善主要功能
第3次迭代:优化细节、性能
第N次迭代:最终产品

与敏捷的区别:迭代周期通常更长,不一定是固定时间盒

3.2.4 螺旋模型(Spiral Model)

特点:风险驱动,循环迭代,每圈都包含风险评估

  计划
          ↑
   风险评估 ← 工程实施
          ↓
        客户评估

四个象限

  1. 目标设定(需求)
  2. 风险评估(识别风险)
  3. 开发和验证(实现)
  4. 规划下一阶段

优点:强调风险控制,适合大型复杂项目

缺点:成本高,不适合小项目

3.2.5 V模型(验证与确认模型)

特点:开发与测试对应,强调验证

需求分析 ←────────→ 验收测试
    ↓                  ↑
概要设计 ←────────→ 系统测试
    ↓                  ↑
详细设计 ←────────→ 集成测试
    ↓                  ↑
编码实现 ←────────→ 单元测试

左边:开发活动(自顶向下细化)
右边:测试活动(自底向上验证)

3.2.6 DevOps模型

特点:打破开发与运维壁垒,持续交付

开发 → 构建 → 测试 → 部署 → 监控 → 反馈 → 开发
  ↑___________________________________________|
              自动化循环

核心理念

  • 持续集成(CI):频繁合并代码,自动构建
  • 持续交付(CD):自动部署到生产环境
  • 基础设施即代码(IaC)
  • 监控与反馈

3.3 开发模型对比

模型 灵活性 文档要求 适合项目 测试介入时机
瀑布 需求稳定的大型项目 后期
敏捷 需求变化快的项目 持续
螺旋 高风险大型项目 各阶段
V模型 传统软件项目 对应阶段
DevOps 云原生、互联网项目 持续自动化

4.测试生命周期

4.1软件测试生命周期

需求分析==>测试计划==>测试设计==>环境搭建==>测试执行==>测试报告

阶段 主要工作 产出物
需求分析 理解需求,识别可测试点 需求疑问清单
测试计划 确定范围、资源、进度 测试计划文档
测试设计 编写测试用例 测试用例
环境搭建 准备测试数据、环境 可用测试环境
测试执行 执行用例,记录缺陷 缺陷报告、测试日志
测试报告 统计结果,评估质量 测试报告

4.2软件测试常用模型

4.2.1 V模型(测试对应模型)
开发阶段 测试阶段 测试对象
需求分析 验收测试 用户需求
概要设计 系统测试 整体系统
详细设计 集成测试 模块接口
编码 单元测试 代码单元
4.2.2 W模型(双V模型)

特点:测试与开发同步进行,强调测试早期介入

 需求分析
       /        \
    测试设计    开发活动
       \        /
        系统设计
       /        \
    测试设计    开发活动
       \        /
        编码实现
       /        \
    测试执行    开发活动
       \        /
        验收交付

优点

  • 测试从需求阶段就开始
  • 发现缺陷更早,成本更低
  • 测试准备更充分
4.2.3 H模型

特点:测试是独立的流程,与开发并行

 测试准备
           ↓
    ┌─────测试执行─────┐
    ↓                  ↓
  测试就绪点 ←──────→ 测试完成点
    ↓                  ↓
    └─────测试执行─────┘
           ↓
        测试结束

核心思想

  • 测试是一个独立的过程
  • 只要测试准备完成,就可以开始测试
  • 不依赖于开发完成度
4.2.4 X模型

特点:强调探索性测试和测试技术

 程序片段1 ←──────→ 测试1
            ↓
        程序片段2 ←──────→ 测试2
            ↓
        程序片段N ←──────→ 测试N
            ↓
        集成测试 ←──────→ 系统测试

特点

  • 支持单元测试到系统测试的迭代
  • 强调探索性测试
  • 支持测试技术的多样化
4.2.5 敏捷测试模型

特点:适应敏捷开发,测试与开发深度融合

迭代周期(如2周)
├─ Day 1-2: 需求澄清、测试计划
├─ Day 3-8: 开发与测试并行(TDD/BDD)
├─ Day 9-10: 探索性测试、回归测试、验收
└─ 迭代评审、回顾

敏捷测试原则

  • 测试与开发同步进行
  • 自动化测试优先
  • 全员质量负责(不仅是测试人员)
  • 快速反馈,持续改进

敏捷测试四象限(Brian Marick):

面向业务 面向技术
支持团队 Q1: 单元测试、组件测试 Q2: 集成测试、性能测试
评价产品 Q3: 探索性测试、可用性测试 Q4: 压力测试、安全测试

4.3 测试模型对比

模型 核心理念 优点 缺点
V模型 测试与开发对应 结构清晰 测试介入较晚
W模型 测试早期介入 发现缺陷早 需要更多资源
H模型 测试独立流程 灵活性高 协调复杂
敏捷测试 测试与开发融合 快速反馈 对自动化要求高

5.测试类型

5.1按测试阶段分类

测试类型 说明 关注点
单元测试 测试最小代码单元(函数/方法) 代码逻辑正确性
集成测试 测试模块之间的接口 模块间数据传递
系统测试 测试完整系统 端到端业务流程
验收测试 用户确认是否接受系统 业务需求满足度

5.2按测试技术分类

测试类型 说明 示例
功能测试 验证功能是否符合需求 登录、注册、下单
性能测试 测试系统性能指标 并发1000用户,响应时间<2s
安全测试 发现安全漏洞 SQL注入、XSS攻击
兼容性测试 不同环境的表现 Chrome/Firefox/Edge
易用性测试 用户体验 界面友好、操作便捷
可靠性测试 系统稳定性 7×24小时运行不崩溃

5.3其他重要测试类型

类型 说明
回归测试 修改代码后,验证原有功能是否正常
冒烟测试 版本接收前的快速验证,判断能否进入详细测试
探索性测试 不依赖用例,自由探索发现缺陷
压力测试 超出正常负载,测试系统极限

6.测试方法详解

6.1 黑盒测试

特点:不关心内部代码结构,只关注输入和输出

适用场景:功能测试、系统测试、验收测试

常用技术

  • 等价类划分
  • 边界值分析
  • 决策表
  • 状态转换
  • 场景法
输入 --> [黑盒子]-->输出
			↑ 内部实现不可见

6.2白盒测试

特点:基于代码内部逻辑结构进行测试

适用场景:单元测试、代码审查

覆盖标准

  • 语句覆盖:每行代码至少执行一次
  • 分支覆盖:每个判断的 true/false 都执行
  • 路径覆盖:所有可能的执行路径都覆盖
# 示例代码
def check_age(age):
    if age >= 18:      # 分支1
        return "成年"
    else:              # 分支2
        return "未成年"

# 白盒测试需要覆盖两个分支
# 测试数据:age=20(成年分支), age=15(未成年分支)

6.3.灰盒测试

特点:结合黑盒和白盒,了解部分内部结构

适用场景:集成测试、API测试


7.软件质量与测试原则

7.1软件质量特征(ISO 25010)

特性 说明
功能性 功能完整、正确
性能效率 响应快、资源占用少
兼容性 与其他系统共存
可用性 易学、易用
可靠性 稳定、容错
安全性 防止未授权访问
可维护性 易修改、易分析
可移植性 易迁移到不同环境

7.2测试基本原则

  • 测试只能证明缺陷存在,不能证明缺陷不存在
  • 穷尽测试是不可能的–>需要设计有效的测试用例
  • 缺陷集群性–>80%的缺陷集中在20%的模块中
  • 杀虫剂悖论–>同样用例反复执行测试,发现缺陷的能力下降
  • 测试活动尽早介入–>越早发现缺陷,修复成本越低
  • 测试依赖于上下文–>安全软件vs游戏软件,测试重点不同

8.测试用例编写格式

8.1什么是测试用例?

定义:测试用例是为特定目的而设计的一组测试输入,执行条件和预期结果,用于验证被测软件的某个特定功能或特征

作用:

  • 指导测试执行(按步骤操作)
  • 保证测试覆盖(不遗漏功能点)
  • 便于回归测试(重复执行)
  • 知识传承(新人快速上手)

8.2标准测试用例模板

字段 说明 示例
用例编号 唯一标识,便于管理 TC_Login_001
用例标题 简明描述测试内容 使用正确账号密码登录成功
所属模块 功能模块分类 用户管理-登录
优先级 P0/P1/P2/P3 P0(核心功能)
前置条件 执行前必须满足的条件 用户已注册,账号状态正常
测试步骤 详细的操作步骤 1.打开登录页
2.输入用户名
3.输入密码
4.点击登录按钮
测试数据 具体输入值 用户名:test01
密码:Test@123
预期结果 应该出现的结果 登录成功,跳转到首页
实际结果 执行后的真实结果 (执行时填写)
执行状态
备注

8.3优先级定义

优先级 定义 执行策略
P0 核心功能,阻塞性缺陷 必须100%执行,冒烟测试用例
P1 重要功能,影响主要业务流程 必须执行,回归测试必测
P2 一般功能,有替代方案 时间允许时执行
P3 边缘功能,影响较小 可选执行,低优先级

8.4.好的测试用例满足原则

  • 独立性:每个用例独立,不依赖其他用例执行结果
  • 可重复性:任何人按步骤执行,结果一致
  • 清晰明确:步骤具体,预期结果可判定
  • 原子性:一个用例验证一个功能点
  • 可追溯:与需求对应,能追溯到需求编号

8.5常见测试用例设计方法

  • 等价类划分
  • 边界值分析
  • 场景法
  • 因果图/判定表法
  • 正交试验法
  • 错误推测法

8.6常见的测试用例管理工具

工具 特点 适用场景
Excel 简单、灵活 小型项目、个人练习
TestLink 开源、免费 中小团队
禅道 国产、集成项目管理 国内团队常用
Jira + X射线/Zephyr 功能强大 大型团队、敏捷开发
腾讯TAPD/阿里云效 国内云产品 使用对应云服务的团队
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐