1. 课程定位:我们在哪里?(Where Are We Now?)

  • 背景:在软件开发生命周期(SDLC)中,测试并不仅仅发生在编码之后,而是贯穿全程。
  • 本章核心:从“黑盒”到“白盒”,从“功能”到“非功能”,全面覆盖软件质量保证的各个维度。

2. 静态黑盒测试 (Static Black-Box Testing)

核心概念: 在不执行代码的情况下,对软件的规格说明书(Specification)或需求文档进行检查。

  • 测试对象:需求文档、设计文档、产品说明书。

  • 核心方法

    • 审查(Review):正式的检查过程。
    • 走查(Walkthrough):作者主导的讲解与模拟。
  • 助教解释

    你可以把它理解为“找茬”。在房子盖起来之前,先看图纸有没有问题。如果在需求阶段发现逻辑矛盾(例如:要求由“红色”但在下一页写了“蓝色”),修复成本是最低的。

  • 🎯 考试重点

    • 由谁做? 通常是需求分析师、产品经理和测试人员。
    • 目的? 尽早发现“需求缺陷”,降低修复成本(这是静态测试最大的价值)。

3. 动态黑盒测试 (Dynamic Black-Box Testing)

核心概念: 在运行程序的情况下,把程序看作一个黑盒子,只关注输入输出,不考虑内部代码实现。

3.1 核心测试方法

  1. 等价类划分 (Equivalence Partitioning)
    • 把无限的输入数据划分为若干个“等价”的区域,从每个区域选一个代表值进行测试。
    • 分类:有效等价类(合法的输入)、无效等价类(非法的输入,如输入字母到数字框)。
  2. 边界值分析 (Boundary Value Analysis)
    • 🎯 核心原理:错误往往发生在输入范围的边界上,而不是中间。
    • 例子:如果输入范围是 [1, 100],重点测试 0, 1, 2 和 99, 100, 101。
  3. 决策表/判定表:用于处理复杂的逻辑组合(如果A且B,则C…)。

3.2 高级方法(PPT提及)

  • 情景测试 (Scenario Testing):基于用户实际使用场景的故事流。
  • 漫游测试 (Exploratory/Tour Testing):测试人员凭经验和直觉在软件中“漫游”,寻找由于思维定势遗漏的Bug。

4. 白盒测试 (White-Box Testing) —— 🔴 重难点章节

核心概念: 也被称为结构测试。测试人员完全了解程序的内部结构、算法和代码逻辑,通过检查代码路径来发现错误。

4.1 静态白盒测试

  • 代码审查 (Code Review):程序员之间互相检查代码规范和逻辑。
  • 静态分析工具:使用工具自动扫描代码中的内存泄漏、未初始化变量等。

4.2 动态白盒测试(逻辑覆盖)

这是PPT中包含大量流程图(M1, M2分支图)的部分,是计算题的高频考点

核心逻辑覆盖标准(由弱到强):

  1. 语句覆盖 (Statement Coverage)
    • 定义:程序中每一行代码(每个可执行语句)至少被执行一次。
    • 局限性:这是最弱的覆盖,无法发现逻辑判断中的错误(例如:如果条件是假,可能直接跳过了某行代码,导致逻辑遗漏)。
  2. 判定覆盖/分支覆盖 (Decision/Branch Coverage)
    • 定义:程序中每个判定节点(if, while等)的真 (True)假 (False) 分支都至少被执行一次。
    • 助教补充:通常满足了分支覆盖,就自动满足了语句覆盖。
  3. 条件覆盖 (Condition Coverage)
    • 定义:判定表达式中,每个原子条件(如 A > 1 && B == 0 中的 A>1B==0)的真假都要取到。
    • 注意:条件覆盖不一定能保证分支覆盖(因为组合起来的结果可能没覆盖全)。
  4. 判定/条件覆盖 (Decision/Condition Coverage)
    • 同时满足判定覆盖和条件覆盖。
  5. 条件组合覆盖 (Multiple Condition Coverage)
    • 每个判定中,所有条件的所有可能组合都需要覆盖。这是比较强的标准。
  6. 路径覆盖 (Path Coverage)
    • 定义:覆盖程序中所有可能的执行路径
    • 难点:如果存在循环,路径数量可能是无限的,通常难以完全实现。

🎯 考试重点公式与技巧

  • 圈复杂度 (Cyclomatic Complexity, V(G))
    • 用于衡量代码逻辑复杂度的指标,也是测试至少需要多少个用例的依据。
    • 公式 1V(G) = E - N + 2 (E是边数,N是节点数)。
    • 公式 2V(G) = P + 1 (P是判定节点的数量)。
    • 复习建议:对着PPT中的流程图(M1, M2),试着数一下判定节点(菱形框),计算圈复杂度。

5. 专项测试类型 (Other Testing Types)

PPT开头和结尾词云中提到的各种非功能性测试。

  1. 性能测试 (Performance Testing)
    • 负载测试:正常压力下表现。
    • 压力测试 (Stress Testing)极限压力下(如双11并发)系统是否崩溃,以及崩溃后能否恢复。
  2. 安全性测试 (Security Testing):防范SQL注入、XSS攻击等,验证数据隐私。
  3. 易用性测试 (Usability Testing):界面是否友好,用户操作是否流畅(UI/UX)。
  4. 可移植性测试 (Portability Testing):软件能否在不同OS(Windows, Mac, Linux)或不同浏览器上运行。
  5. 互操作性/兼容性测试 (Interoperability):与其他软件或硬件的交互能力。
  6. 回归测试 (Regression Testing):修改代码后,重新测试原有功能,确保“修了一个Bug,没引入新Bug”。

📝 章节核心思想总结

本章的核心在于构建一个立体的测试防御体系

  1. 不要等到写完代码才测试:从需求文档开始(静态黑盒),测试就已经介入。
  2. 黑白结合:黑盒测试关注“用户能不能用”,白盒测试关注“代码逻辑对不对”。
  3. 逻辑覆盖的层次:理解从语句覆盖到路径覆盖的递进关系,在考试中,如果问“最严格的覆盖”,通常指向路径覆盖或组合覆盖;如果问“最基本的覆盖”,则是语句覆盖。