【软件系统架构】系列十:软件工程——软件测试阶段

目录

1.单元测试(Unit Testing)

1.1 定义

1.2 特点

1.3 测试方法

1.4 常用工具/框架

1.5 测试流程

1.6 最佳实践

1.7 单元测试流程图

2. 集成测试(Integration Testing)

2.1 定义

2.2 特点

2. 测试策略

(1) 自底向上集成(Bottom-up)

(2) 自顶向下集成(Top-down)

(3) 大爆炸集成(Big Bang)

(4) 增量集成(Incremental Integration)

2.4 常用工具

2.5 测试内容

2.6 与单元测试区别

2.7 集成测试流程图

3.系统测试(System Testing)

3.1 定义

3.1 特点

3.3 测试类型

3.4 测试流程

3.5 常用工具

3.6 与单元测试/集成测试区别

3.7 系统测试流程图

4.性能测试(Performance Testing)

4.1 定义

4.2 测试指标

4.3 测试类型

4.4 测试流程

4.5 常用工具

4.6 与功能测试/系统测试区别

4.7 性能测试流程图

5.验收测试(Acceptance Testing)

5.1 定义

5.2 特点

5.3 类型

5.4 测试流程

5.5 PlantUML 流程图示例

6.回归测试(Regression Testing)

6.1 定义

6.2 特点

6.3 场景

6.4 测试流程

6.5 回归测试流程图

7.七阶段动态测试全流程

8.补充:其他专项测试


1.单元测试(Unit Testing)

1.1 定义

单元测试是指对软件中的最小可测试单元(通常是函数、方法或类)进行验证,确保其按预期功能工作。

  • 目标:验证每个单元的功能正确性、边界条件处理以及异常处理能力。

  • 范围:通常是代码级别的测试,不依赖外部系统或数据库(可通过 Mock 对象模拟依赖)。

  • 依据:软件详细设计说明书(DDD)。

  • 方法

    • 静态测试:静态分析、代码审查(Code Review)

    • 动态测试:黑盒测试(基本用例)、白盒测试(逻辑验证)

    • 覆盖标准:语句覆盖、分支覆盖、路径覆盖、组合覆盖等(按模块质量要求确定)

  • 关键点

    • 先静态分析再动态验证

    • 若黑盒用例覆盖率不足,用白盒补充

    • 高可靠模块建议做到路径覆盖


1.2 特点

  • 粒度小:测试单个函数、方法或类。

  • 快速执行:测试覆盖率高,运行速度快。

  • 可自动化:适合集成到 CI/CD 流程。

  • 可复现:保证代码修改后仍然保持原功能正确性。


1.3 测试方法

  • 正向测试:验证正常输入下的正确输出。

  • 边界值测试:验证输入在临界值或极值下的表现。

  • 异常处理测试:验证输入非法值或异常情况的处理能力。

  • 依赖隔离:通过 Mock、Stub 或 Fake 隔离外部依赖(如数据库、网络接口)。


1.4 常用工具/框架

语言 测试框架
Java JUnit, TestNG, Mockito
Python pytest, unittest, mock
JavaScript Jest, Mocha, Jasmine
C# NUnit, MSTest
C/C++ Google Test (gtest)
Go testing 包, testify

1.5 测试流程

  1. 确定测试单元:函数、方法或类。

  2. 编写测试用例:覆盖正常、边界和异常情况。

  3. 执行测试:运行单元测试框架。

  4. 检查结果:与预期输出比对。

  5. 修复缺陷:根据测试结果修正代码。

  6. 回归测试:保证修改未引入新问题。


1.6 最佳实践

  • 每个单元只做一件事,便于测试。

  • 尽量保证测试独立性,不依赖其他单元。

  • 使用 Mock / Stub 来隔离外部依赖。

  • 测试用例命名清晰,描述测试目的。

  • 将单元测试集成到 CI/CD 流程,保证持续验证。


1.7 单元测试流程图

单元测试流程的 PlantUML 图示例,展示典型流程,包括被测单元、输入、输出、Mock 对象和测试执行。

下面是示例:

@startuml
title 单元测试流程示意图

actor "测试人员" as Tester
participant "测试框架\n(JUnit/pytest等)" as Framework
participant "被测单元\n(函数/类/方法)" as Unit
participant "依赖对象\n(Mock/Stub/Fake)" as Dependency

Tester -> Framework : 编写测试用例
Framework -> Dependency : 初始化 Mock / Stub
Framework -> Unit : 调用被测单元
Unit -> Dependency : 调用依赖(被 Mock/Stub 替代)
Unit --> Framework : 返回结果
Framework --> Tester : 输出测试结果
Tester -> Framework : 根据结果修复代码并回归测试

note right of Framework
  测试用例类型:
  - 正向测试
  - 边界值测试
  - 异常处理测试
end note

@enduml

单元测试的核心流程:

  1. 测试人员编写测试用例。

  2. 测试框架初始化 Mock / Stub 对象,隔离外部依赖。

  3. 调用被测单元执行逻辑。

  4. 单元调用依赖对象(被 Mock/Stub 替代)。

  5. 单元返回结果给测试框架。

  6. 测试结果反馈给测试人员,必要时修复代码并进行回归测试。


2. 集成测试(Integration Testing)

2.1 定义

集成测试是指将多个单元或模块组合在一起进行测试,验证它们之间的接口、数据传递和交互是否正确。

  • 目标:发现模块集成后产生的问题,如接口不匹配、数据格式错误、调用顺序问题等。

  • 范围:超出单元范围,关注模块间的协作,而不是单个模块内部逻辑。

  • 依据:软件概要设计文档(SDD)。

  • 方法

    • 白盒 + 黑盒结合

    • 接口调用、数据流、控制流验证

  • 关键点

    • 验证接口数据格式、调用顺序、异常处理

    • 确保模块组装的正确性


2.2 特点

  • 测试范围比单元大:覆盖多个模块间的交互。

  • 发现接口和依赖问题:如 API 参数错误、数据类型不一致、模块调用异常。

  • 依赖环境:通常需要部分或全部系统组件可用,可能使用 Mock 对象模拟部分依赖。

  • 执行顺序重要:模块组合方式不同可能导致不同问题。


2. 测试策略

(1) 自底向上集成(Bottom-up)

  • 先测试底层模块,再逐步向上测试组合模块。

  • 优点:底层模块先稳定,上层模块测试更可靠。

  • 缺点:需要开发临时驱动(Driver)来调用未完成的高层模块。

(2) 自顶向下集成(Top-down)

  • 先测试高层模块,再逐步集成低层模块。

  • 优点:早期可以测试系统主流程。

  • 缺点:需要创建 Stub 模拟低层模块,增加工作量。

(3) 大爆炸集成(Big Bang)

  • 一次性将所有模块集成,再整体测试。

  • 优点:实现简单,适合小型系统。

  • 缺点:难以定位缺陷来源,问题排查困难。

(4) 增量集成(Incremental Integration)

  • 模块逐步集成,每次只增加少量模块,测试交互正确性。

  • 优点:缺陷容易定位,可控制测试风险。

  • 缺点:测试周期可能较长。


2.4 常用工具

类型 工具
自动化测试框架 JUnit, TestNG, pytest, NUnit
API 测试 Postman, RestAssured, SoapUI
Mock / Stub Mockito, WireMock, EasyMock
持续集成 Jenkins, GitLab CI/CD, GitHub Actions

2.5 测试内容

  1. 接口测试:函数或模块之间调用是否正确,参数和返回值是否符合预期。

  2. 数据流测试:数据在模块之间传递是否正确,是否丢失或格式错误。

  3. 模块协作测试:多个模块协作完成业务流程是否正确。

  4. 异常处理测试:接口调用异常或依赖模块异常时,系统是否能正确处理。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

34号树洞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值