软件测试方法

00:00
3 min Intermediate 2026/6/14

测试金字塔、TDD、BDD、测试类型与测试策略。

1. 测试金字塔

1.1 金字塔模型

        ╱  E2E测试  ╲         少量,慢,脆弱
       ╱─────────────╲
      ╱   集成测试     ╲       适量,中速
     ╱───────────────────╲
    ╱     单元测试         ╲    大量,快速,稳定
   ╱─────────────────────────╲
层级数量速度范围目的
单元测试70%毫秒单个函数/类验证逻辑正确性
集成测试20%模块交互验证组件协作
E2E测试10%分钟完整流程验证用户场景

2. 测试类型

2.1 按范围分类

类型说明示例
单元测试测试最小可测试单元函数、方法
集成测试测试模块间交互API调用、数据库操作
系统测试测试完整系统端到端流程
验收测试用户确认需求满足UAT

2.2 按目的分类

类型说明
功能测试验证功能是否正确
性能测试验证响应时间和吞吐量
安全测试验证安全漏洞
兼容性测试验证不同环境下的表现
回归测试验证修改未引入新缺陷

2.3 按方法分类

类型说明特点
白盒测试基于代码结构路径覆盖、条件覆盖
黑盒测试基于功能规格等价类、边界值
灰盒测试部分了解内部结构结合黑白盒

3. TDD(测试驱动开发)

3.1 红-绿-重构循环

1.  红:写一个失败的测试
2.  绿:写最少的代码使测试通过
3.  重构:优化代码,保持测试通过
4. 重复1-3

3.2 TDD示例

# 第1步:红 - 写失败测试
def test_add():
    assert add(2, 3) == 5  # NameError: add未定义

# 第2步:绿 - 最少代码通过
def add(a, b):
    return a + b

# 第3步:重构 - 优化(此处已足够简洁)

# 继续添加测试
def test_add_negative():
    assert add(-1, 1) == 0

def test_add_zero():
    assert add(0, 0) == 0

3.3 TDD原则

原则说明
测试先行先写测试再写代码
小步前进每次只添加一个测试
最少代码只写让测试通过的最少代码
持续重构每次通过后立即重构

4. BDD(行为驱动开发)

4.1 BDD与TDD

维度TDDBDD
关注代码正确性业务行为
语言编程语言自然语言
参与者开发者开发者+QA+业务
规格形式测试函数场景描述

4.2 Gherkin语法

Feature: 用户登录
  作为注册用户
  我希望登录系统
  以便访问我的账户

  Scenario: 成功登录
    Given 用户在登录页面
    And 用户输入正确的用户名和密码
    When 用户点击登录按钮
    Then 用户跳转到首页
    And 显示欢迎消息

  Scenario: 密码错误
    Given 用户在登录页面
    And 用户输入正确的用户名和错误的密码
    When 用户点击登录按钮
    Then 显示"密码错误"提示
    And 用户仍在登录页面

4.3 BDD工具

语言工具
JavaCucumber-JVM
PythonBehave
JavaScriptCucumber.js
.NETSpecFlow

5. 测试覆盖率

5.1 覆盖率类型

类型说明
语句覆盖每条语句至少执行一次
分支覆盖每个分支至少执行一次
路径覆盖每条可能路径至少执行一次
条件覆盖每个条件的真假至少一次
MC/DC每个条件独立影响结果

5.2 覆盖率目标

场景建议覆盖
业务逻辑90%+
通用工具80%+
UI层50%~70%
遗留代码逐步提升

5.3 Mock与Stub

类型说明
Stub返回预设简单,不验证交互
Mock验证交互行为验证方法是否被调用
Spy记录调用信息部分模拟
Fake简化实现如内存数据库
from unittest.mock import Mock, patch

# Mock
db = Mock()
db.save.return_value = True
assert db.save({"name": "test"}) == True
db.save.assert_called_once()

# Patch
with patch('module.external_api') as mock_api:
    mock_api.return_value = {"status": "ok"}
    result = my_function()

知识检测

学习进度

-- 已学文档
--% 知识覆盖率

学习推荐

专注模式