跳转至

22 软件测试策略

说明

本文档由 AI 生成

这一章(Chapter 22: Software Testing Strategies)非常关键,它详细讲解了**软件测试策略 (Software Testing Strategies)**。这是软件工程中最核心的实践环节之一。

这一章的逻辑非常清晰:首先定义了**测试的本质 (What is Testing),区分了验证与确认(Verification & Validation),并探讨了开发者与独立测试人员的不同视角;接着提出了一个从“小处测试”到“大处测试”的**战略路径 (Strategic Approach),涵盖了单元测试、集成测试(包括自顶向下、自底向上、三明治和回归测试)以及针对不同软件类型(如OO、WebApp、MobileApp)的策略;最后,章节深入讨论了**调试 (Debugging)** 这一诊断过程,分析了错误症状与成因的关系及调试技术。

以下是为你整理的详细笔记(Markdown格式),专有名词后均已附上英文对照,非常适合用来复习备考。


🧪 软件工程 Chapter 22: 软件测试策略 (Software Testing Strategies)

1. 测试的定义与目的 (What Testing Shows)

  • 测试的定义 (Definition): 测试是**执行 (Exercising)** 一个程序的过程,其特定意图是在交付给最终用户**之前**发现错误。
  • 测试能展示什么 (What Testing Shows):
    • 错误 (Errors)
    • 符合需求 (Requirements conformance)
    • 性能 (Performance)
    • 质量指标 (An indication of quality)

2. 验证 vs. 确认 (Verification & Validation, V&V)

这是两个极易混淆但必须区分的概念:

  • 验证 (Verification): "Are we building the product right?"(我们是否在正确地构建产品?)
    • 确保软件正确实现了特定的功能(符合规格说明)。
  • 确认 (Validation): "Are we building the right product?"(我们是否在构建正确的产品?)
    • 确保构建的软件可以追溯到客户的需求(符合用户期望)。

3. 测试策略:从小处到大处 (Strategic Approach)

  • 核心流程 (Process): 测试从**组件级 (Component level)** 开始,逐步向外集成,直到整个基于计算机的系统。
  • 开发者 vs. 独立测试人员 (Who Tests):
    • 开发者 (Developer): 理解系统,但可能测试得“很温柔” (Test gently),受“交付”驱动。
    • 独立测试人员 (Independent tester): 必须学习系统,但会试图“破坏”它 (Break it),受“质量”驱动。
  • 测试与调试 (Testing & Debugging): 这是不同的活动,但调试必须包含在任何测试策略中。

4. 测试模型 (Testing Model)

  • V模型 (V-Model): 展示了开发阶段与测试阶段的对应关系。
    • 系统工程 -> 系统测试 (System test)
    • 分析建模 -> 验收测试 (Validation test)
    • 设计建模 -> 集成测试 (Integration test)
    • 代码生成 -> 单元测试 (Unit test)

5. 单元测试 (Unit Testing)

  • 目标: 测试最小的可测试单元(通常是模块或类)。
  • 测试内容:
    • 接口 (Interface)
    • 局部数据结构 (Local data structures)
    • 边界条件 (Boundary conditions)
    • 独立路径 (Independent paths)
    • 错误处理路径 (Error handling paths)
  • 测试环境: 使用**驱动程序 (Driver)** 和 桩 (Stub) 来模拟上下文环境。

6. 集成测试策略 (Integration Testing Strategies)

  • 大爆炸集成 (Big Bang): 一次性集成所有模块(风险高)。
  • 自顶向下集成 (Top-Down):
    • 从顶层模块开始,使用 桩 (Stubs) 替代下层模块。
    • 逐步替换桩,按“深度优先”或“广度优先”进行。
  • 自底向上集成 (Bottom-Up):
    • 从底层模块开始,使用 驱动程序 (Drivers) 调用它们。
    • 逐步向上集成,直到顶层。
  • 三明治测试 (Sandwich Testing): 结合了自顶向下和自底向上,中间汇合。
  • 回归测试 (Regression Testing):
    • 重新执行部分已进行过的测试,以确保修改没有引发**副作用 (Side effects)**。
  • 冒烟测试 (Smoke Testing):
    • 针对“每日构建 (Daily builds)”的常见方法。
    • 目的是发现那些会导致项目进度落后的“致命错误 (Show stopper errors)”。

7. 面向对象测试 (Object-Oriented Testing)

  • 单元测试的变化: “单元”的概念扩大了,从单个模块变为**类 (Class)**,包含属性、操作、通信和协作。
  • 集成策略:
    • 基于线程的测试 (Thread-based): 集成响应一个输入或事件所需的一组类。
    • 基于使用的测试 (Use-based): 集成响应一个用例 (Use case) 所需的一组类。
    • 集群测试 (Cluster testing): 集成演示一次协作所需的一组类。
  • 模型测试: 测试 CRC 模型,检查责任分配是否合理,连接是否可逆等。

8. 特定应用测试策略

  • WebApp 测试:
    • 内容模型审查、界面模型审查、导航测试、兼容性测试、安全性测试、性能测试及最终用户评估。
  • MobileApp 测试:
    • 用户体验测试 (UX)、设备兼容性测试 (多设备)、性能测试、连接性测试、安全性测试、野外测试 (Testing-in-the-wild) 及认证测试 (Certification)。

9. 高阶测试 (High Order Testing)

  • 验收测试 (Validation testing): 关注软件需求。
  • 系统测试 (System testing): 关注系统集成。
  • Alpha/Beta 测试: 关注客户使用。
  • 恢复测试 (Recovery testing): 强制软件以各种方式失败,并验证恢复是否正确执行。
  • 安全测试 (Security testing): 验证保护机制能否防止非法入侵。
  • 压力测试 (Stress testing): 以异常的数量、频率或体积来执行系统,考验其极限。
  • 性能测试 (Performance Testing): 在集成系统的上下文中测试软件的运行时性能。

10. 调试:一种诊断过程 (Debugging: A Diagnostic Process)

  • 调试努力 (Debugging Effort): 包括诊断症状/确定原因的时间,以及纠正错误/回归测试的时间。
  • 症状与成因 (Symptoms & Causes):
    • 症状和成因在地理位置上可能相距甚远。
    • 症状可能因修复了另一个问题而消失。
    • 成因可能是非错误的组合,甚至是系统或编译器错误。
  • 调试技术 (Debugging Techniques):
    • 蛮力法 (Brute force/ Testing): 输出所有数据,最简单但效率低。 urn:uuid:9e5f9d0e-9c6f-4f4c-9a6d-2b6e8c8c1b1d * 回溯法 (Backtracking): 人工沿程序控制流往回追踪。
    • 归纳法 (Induction): 从特殊到一般,寻找模式。
  • 纠正错误 (Correcting the Error):
    • 思考:这个错误的成因是否在程序其他部分重现?
    • 思考:我的修复会不会引入新的错误?
    • 思考:我们本可以做些什么来防止这个错误?(改进过程)。

💡 复习重点总结 (Key Takeaways for Exam)

  1. V&V 区别 (Verification vs. Validation): 必须能准确区分这两个定义(Right vs. Right product)。
  2. 集成策略 (Integration Strategies): 重点掌握 Top-down (Stubs) 和 Bottom-up (Drivers) 的区别,以及 SandwichRegression 的定义。
  3. 测试类型定义 (Test Types): 理解 Smoke testing (Daily build, show stopper) 和 Sanity testing (Quick check) 的区别(虽然PPT主要讲了Smoke)。
  4. OO 测试 (OO Testing): 知道单元测试在OO中变成了**类测试 (Class testing)**,以及 Thread-based, Use-based, Cluster testing 的含义。
  5. 调试技术 (Debugging Techniques): 能够区分 Brute force, BacktrackingInduction
  6. 高阶测试 (High Order Testing): 能够区分 Stress testing (异常负载) 和 Performance testing (正常性能指标)。
  7. MobileApp 测试: 记住 Testing-in-the-wild 这个概念(在真实用户环境中测试)。

评论区

欢迎在评论区指出文档错误,为文档提供宝贵意见,或写下你的疑问