第7章02 开发者测试

4.1 本章定位

本章说明开发者在软件交付前如何组织测试活动。重点是 V 模型、各测试阶段的目标和对应开发阶段、集成测试策略、桩模块与驱动模块。

4.2 开发者测试

开发者测试(Developer Testing, DT)是开发者所做的测试,有别于专职测试人员或测评机构进行的测试。目标是在软件交付或验收测试前发现并解决绝大多数==代码缺陷==。

理论依据是:前端发现问题的代价远小于后端。

4.3 V 模型

客观题重点,第二次小测已考详细设计对应单元测试。

开发阶段对应测试阶段主要验证内容
用户需求验收测试是否满足用户验收标准
软件需求系统测试完整系统是否满足需求
体系结构设计集成测试模块协作、接口和集成行为
详细设计单元测试最小可测试单元的逻辑
编码实现单元测试准备和执行代码级正确性
V 模型中开发阶段与测试阶段对应关系

4.4 测试阶段对比表

测试阶段对象目标常见实施者小测/考试提示
单元测试最小可独立测试单元验证单元内部逻辑、接口、边界、数据结构等开发人员V 模型中对应详细设计
集成测试多个模块/构件验证模块协作和接口开发人员与测试人员可能考自顶向下/自底向上
系统测试完整系统验证系统完整性和需求符合性,评估非功能指标测试人员为主第二次小测已考
验收测试待交付系统验证是否符合用户验收标准用户/客户参与V 模型最后一道工序
Alpha 测试发布前系统在开发方环境中进行的内部/受控用户测试开发方组织,用户可参与常与 Beta 对比
Beta 测试发布前系统在真实用户环境中进行的外部测试真实用户属于验收测试的一种
回归测试修改后的系统确认修改未破坏已有功能开发/测试团队后续第7章05重点

4.5 单元测试

单元测试验证代码中最小可独立测试单元,确保测试关注当前单元逻辑。若依赖其他模块,可使用桩技术模拟依赖。

常见检查内容:

  • 接口;
  • 局部数据结构;
  • 边界条件;
  • 独立路径;
  • 错误处理路径。

可以利用工具统计代码覆盖率,但要避免盲目追求 100%,应注重关键逻辑覆盖。

单元测试可以是黑盒测试,也可以是白盒测试。

单元测试主要内容汇总

单元测试内容

  1. 单元接口;
  2. 数据结构;
  3. 边界条件;
  4. 独立执行路径;
  5. 错误处理。
测试内容测试目的核心检查要点 (Checklist)典型示例 / 场景
1. 模块接口测试检查进出模块的数据是否正确。• 实际输入与定义的输入是否一致(个数、类型、顺序)。 • 使用其他模块时,是否检查了可用性和处理结果。 • 使用外部资源(内存、文件、端口等)时,是否检查了可用性并及时释放资源。计算最大公约数(GCD)的模块:测试参数数量缺失(仅传一个参数)或参数类型错误(传入字符串)时是否正确抛出异常。
2. 模块局部数据结构测试检查局部数据结构能否保持完整性。• 变量从未被使用或未初始化。 • 错误的类型转换、非法指针。 • 数组越界。 • 变量或函数名称拼写错误。 • 错误使用了外部变量或函数。数组越界的常见场景:索引为负数(如 arr[-1])、索引超过数组长度(如长度为5却访问 arr[10])、循环条件错误。
3. 模块边界条件测试检查临界数据是否被正确处理。• 普通合法/非法数据是否正确处理。 • 边界内最接近边界的(合法)数据是否正确处理。 • 边界外最接近边界的(非法)数据是否正确处理。针对输入变量 $x_1$ ($a \le x_1 \le b$) 和 $x_2$ ($c \le x_2 \le d$),采用 $4n+1$ 或 $6n+1$ 策略提取极值、临界值进行组合测试。
4. 模块独立执行路径测试检查由于计算错误、判定错误、控制流错误导致的程序错误。• 死代码。 • 错误的计算优先级、精度错误。 • 比较运算错误(如混淆 >>====)。 • 赋值错误、表达式符号不正确。 • 循环变量使用错误。针对程序中的控制流语句(如 if (y>1) and (z=0)),测试各个判定分支和逻辑路径是否按预期执行。
5. 模块内部错误处理测试检查内部错误处理设施是否有效。• 资源或模块使用前后是否检查错误出现。 • 出现错误时,是否进行了有效处理(抛出错误、通知用户、记录日志)。 • 错误是否在系统干预前被处理。 • 报告和记录的错误是否真实详细。在代码执行过程中,模拟异常情况,观察程序能否自行捕获错误、释放资源并给出准确详细的错误提示信息。

4.6 集成测试

集成测试是软件测试的关键阶段,旨在验证多个模块、组件或服务在协同工作时的交互是否符合预期。

集成测试验证多个模块协作,位于单元测试和系统测试之间。

为什么需要集成测试:

  • 可能发现单元测试未发现的接口错误;
  • 单元测试难以发现时序问题;
  • 单元测试难以发现资源竞争问题。

集成测试核心目的

  1. 暴露接口问题:发现参数格式不符、返回值丢失;检测资源竞争、死锁或并发问题;
  2. 验证模块组合后的功能逻辑:发现异常或边界条件处理不当;
  3. 支持持续集成 CI,在代码合并时快速反馈问题。

集成测试方法

方法方法含义优点缺点
非增式集成爆炸集成 Big Bang所有模块单元测试后一次性组合简单问题定位困难
增式集成自顶向下增式集成从主控模块开始向下集成早期验证主控流程需要桩模块
自底向上增式集成从底层模块开始向上集成低层模块测试充分需要驱动模块

自顶向下集成

步骤:

  1. 主控模块作为测试驱动,与主控模块直接相连的模块先用桩模块替代。
  2. 按深度或广度逐步用真实模块替换桩模块。
  3. 每个模块被集成前应已完成单元测试。
  4. 集成新模块后进行回归测试,确认未引入错误。

桩模块(Stub):模拟被测模块所调用的下级模块,解决依赖模块未完成或不可用的问题。

自底向上集成

步骤:

  1. 编制驱动模块,协调测试用例的输入与输出。
  2. 从底层构件开始测试。
  3. 按程序结构向上集成,同时移除驱动模块。

驱动模块(Driver):模拟被测模块的上一级模块,用于调用被测模块、传递数据并输出结果。

第二次小测已考:自顶向下集成测试中,需要用桩模块替代未完成的底层模块。

对比项自顶向下集成自底向上集成
集成方向从主控模块向下从底层模块向上
需要辅助模块桩模块 Stub驱动模块 Driver
优点早期能看到系统框架,逐步求精测试数据较容易生成,适合关键模块在底部
缺点桩模块开发困难,测试数据和输出解释困难后期才能看到系统框架,时序/资源竞争问题发现晚
高频考点自顶向下需要桩模块自底向上需要驱动模块

4.7 系统测试

系统测试在所有==集成测试完成后、用户验收测试前执行==,验证完整软件系统是否满足规定需求。

核心目的包括:

  • 验证系统完整性;
  • 评估非功能性指标;
  • 发现集成测试未覆盖的全局场景;
  • 为验收测试铺路。

第二次小测选择题已考“系统测试核心目的包括验证系统完整性、评估非功能性指标”。

4.8 验收测试、Alpha 与 Beta

类型环境参与者目的
验收测试用户实际或模拟使用环境用户/客户确认系统符合验收标准
Alpha 测试开发方环境开发方组织,用户可能参与发布前发现问题
Beta 测试真实用户环境外部用户发布前真实环境试用

Beta 测试是一种验收测试,是软件发布之前的测试。

4.9 回归测试

回归测试是软件开发过程中确保代码修改不会破坏现有功能的一种测试方法。

例如修复登录 Bug 后,需要确认注册、支付等相关功能没有被破坏。

4.10 易混淆点

概念区分
桩模块 vs 驱动模块桩模拟下级被调用模块;驱动模拟上级调用模块
系统测试 vs 验收测试系统测试由开发/测试方验证完整系统;验收测试由用户确认是否可接受
Alpha vs BetaAlpha 通常在开发方环境;Beta 在真实用户环境
自顶向下 vs 自底向上自顶向下需要桩;自底向上需要驱动
测试阶段定义
测试需求软件测试需求是测试活动的基础,它定义了"测什么"的问题。测试需求是从软件需求中提炼出来的、可测试的、明确的验证要求。
测试计划测试计划是一份详细描述测试目标、范围、方法、资源、进度和交付物的文档,用于协调和组织测试活动。
测试设计测试用例设计; 测试脚本设计; 覆盖准则设计。
测试开发搭建测试环境;录制或编写测试脚本;开发测试驱动模块 drivers;开发桩模块 stubs;建立外部数据集。
测试执行和测试结果确认软件测试结果确认是确保测试活动有效性和软件质量的关键环节,目的是验证测试的完整性和准确性,并为发布决策提供可靠依据。执行测试脚本;测试执行情况分析;结果验证和确认。
测试评估和测试报告覆盖准则; 分析测试用例覆盖; 分析代码覆盖; 分析缺陷; 分析是否达到测试停止、成功标准; 写测试分析报告。

测试计划

测试目标

测试类型测试目标
单元测试检验程序最小单元有无错误;检验单元编码与设计是否吻合
集成测试检验模块接口有无错误;代码实现的系统设计与需求定义是否吻合
系统测试检验整个系统代码和软硬件配合;实现是否符合用户需求;文档是否完整有效;模拟验收标准
验收测试使客户验收签字;系统是否符合事先约定的验收标准
回归测试修改或版本更新后,验证以前正确的功能和指标仍旧正确

测试设计

测试设计
测试用例设计确认和详细描述测试用例
测试脚本设计确认和设计测试脚本
覆盖准则设计评估测试覆盖

测试方法分类

  1. 静态测试和动态测试;
  2. 黑盒测试和白盒测试;
  3. 开发者测试、第三方测试、用户测试等。
测试类型核心概念与原理测试对象 / 关注点常用方法与手段
静态测试 (静态分析)不实际运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性 。测试不运行的部分,例如规范说明、软件模型、设计文档以及源代码 。文档评审、代码阅读、走查 (WalkThrough)、审查 (Inspection)、评审 (Review)、审计 (Auditing) 。
动态测试计算机必须真正运行被测试的程序,通过输入测试用例,检查运行结果与预期结果的差异 。运行和使用软件,分析运行效率、正确性和健壮性等性能指标 。主要通过构造测试实例、执行程序、分析程序的输出结果来进行 。
方法参与者形式化程度主要特点
走查开发组内部较低讲解、讨论、模拟运行
审查开发组内部较高Checklist、正式计划流程报告
评审开发组+测试组+QA/产品等较高多角色参与,关注文档完整性一致性
测试类型别名核心原理优点缺点典型方法
黑盒测试功能测试、数据驱动测试、基于规格说明的测试 。把测试对象当做看不见的黑盒,完全不考虑内部结构和处理过程,仅依据程序功能需求规范确定测试用例并推断正确性 。能够站在用户立场上进行测试,证实软件功能的正确性和可操作性 。不能测试程序内部特定部位;==如果规格说明有误,则无法发现内部缺陷 。==等价类划分、边值分析、基于图的测试、比较测试 。
白盒测试结构测试、逻辑驱动测试、基于程序的测试 。按照程序内部逻辑结构和编码结构设计测试数据,在程序的不同点检验“程序的状态”以判定是否与预期一致 。能够对程序内部的特定部位进行覆盖测试,深入分析内部结构 。无法检验程序的外部特性;无法对未实现规格说明的程序内部欠缺部分进行测试 。语句覆盖、判定/分支覆盖、条件覆盖、判定/条件覆盖、基本路径覆盖、循环覆盖 。
测试类型执行主体测试目的与特点
开发者测试软件开发人员 。由开发团队内部人员进行,通常伴随在开发过程的各个阶段(如单元测试、集成测试等),旨在尽早发现和解决代码级别的缺陷 。
第三方测试专业的第三方独立机构 。有别于开发人员或最终用户,由专门的第三方承担。其核心目的是为了保证测试工作的客观性和公正性 。
用户测试软件的使用方 / 终端用户 。站在最终使用者的角度进行测试,主要验证软件交付后是否真实满足用户的实际业务需求 。

4.11 小测关联

第二次小测已考:

  • 软件测试按实施者分类;
  • 系统测试核心目的;
  • V 模型中详细设计对应单元测试;
  • 自顶向下集成测试需要桩模块;
  • 集成测试包含非增式和增式,增式又包括自顶向下和自底向上。

4.12 本章复习检查题

填空题

  1. 集成测试包含________和________两类方法,其中增式集成又包含________和________。
  2. 自顶向下集成测试通常需要________模块,自底向上集成测试通常需要________模块。
  3. V 模型中,详细设计阶段对应________测试。

选择题

  1. 用于模拟被测模块下级依赖的是:A. 驱动模块 B. 桩模块 C. 主控模块 D. 配置模块
  2. Beta 测试通常发生在:A. 开发方环境 B. 真实用户环境 C. 编译阶段 D. 代码审查阶段

判断题

  1. 系统测试通常在集成测试之前执行。
  2. 自底向上集成测试需要驱动模块。
  3. 回归测试只在软件首次开发时执行一次。

参考答案

  1. 填空:非增式集成、增式集成;自顶向下增式集成、自底向上增式集成;桩、驱动;单元。
  2. 选择:B;B。
  3. 判断:错;对;错。

第7章02 客观题必背清单

A. 填空题重点

  1. 开发者测试 DT 是开发者所做的测试。
  2. DT 目标是在软件交付前发现和解决绝大多数代码缺陷。
  3. V模型中的测试包括单元测试、集成测试、系统测试、验收测试、Alpha/Beta测试、回归测试。
  4. 单元测试验证最小可独立测试单元,如函数、方法、类。
  5. 单元测试 FIRST 原则:Fast、Isolated、Repeatable、Self-Validating、Timely。
  6. 单元测试内容:单元接口、数据结构、边界条件、独立执行路径、错误处理。
  7. 集成测试关注模块接口、数据传递、依赖关系和整体功能逻辑。
  8. 非增式集成也叫大爆炸集成。
  9. 增式集成包括自顶向下和自底向上。
  10. 自顶向下集成需要桩模块。
  11. 自底向上集成需要驱动模块。
  12. 系统测试通常在集成测试之后、验收测试之前执行。
  13. 验收测试是 V 模型中测试的最后一道工序。
  14. Alpha 测试在开发环境或模拟实际环境中进行,开发者通常在场。
  15. Beta 测试在实际使用环境中进行,开发者通常不在现场。
  16. 回归测试目标是验证修改部分正确,并且未引起其他部分错误。
  17. 测试需求定义“测什么”。
  18. 测试需求表达方式包括测试需求列表和 RTM。
  19. 测试计划是测试过程的蓝图。
  20. 测试报告是测试阶段的最终交付物。
  21. 静态测试不运行被测程序。
  22. 动态测试需要运行被测程序。
  23. 黑盒测试又称功能测试、数据驱动测试或基于规格说明的测试。
  24. 白盒测试又称结构测试、逻辑驱动测试或基于程序的测试。
  25. 语句覆盖是最弱的逻辑覆盖准则。
  26. 程序插装可用于取得测试覆盖。
  27. JUnit 是 Java 语言单元测试框架。

B. 选择题重点

问法答案方向
哪些属于 V 模型测试阶段?单元、集成、系统、验收、Alpha/Beta、回归
单元测试对象是什么?函数、方法、类
单元测试 FIRST 中 I 是什么?Isolated
哪些属于单元测试内容?接口、局部数据结构、边界、独立路径、错误处理
为什么要集成测试?接口错误、时序问题、资源竞争、组合功能问题
非增式集成又叫什么?大爆炸集成
自顶向下需要什么?桩模块
自底向上需要什么?驱动模块
Alpha 测试环境是什么?开发环境或模拟实际环境
Beta 测试环境是什么?用户实际使用环境
回归测试方法有哪些?全部再测试、按风险、按修改、按依赖
静态分析方法有哪些?走查、审查、评审、审计
黑盒测试方法举例等价类、边界值、比较测试、基于图测试
白盒测试方法举例语句、判定、条件、基本路径、循环覆盖
哪个工具是性能测试工具?LoadRunner
哪个工具是 Java 单元测试框架?JUnit

C. 判断题易错点

说法正误原因
开发者测试由第三方测评机构完成DT 是开发者所做的测试
单元测试只可以是白盒测试单元测试可以黑盒,也可以白盒
单元测试应隔离外部依赖可使用 Mock 或 Stub
单元测试应盲目追求100%覆盖率应关注关键逻辑覆盖
单元测试通过后无需集成测试集成后可能出现接口、时序、资源竞争问题
非增式集成错误定位容易非增式集成错误定位难
增式集成接口错误发现早一次增加模块,便于定位
自顶向下集成需要驱动模块自顶向下需要桩模块
自底向上集成需要桩模块自底向上需要驱动模块
系统测试关注完整系统行为不关注单个模块
验收测试从最终用户或业务方视角出发关注是否可交付
Alpha 测试开发者通常在场在受控环境下记录问题
Beta 测试开发者通常不在现场用户实际环境
回归测试只验证修改部分还要验证未破坏原有功能
静态测试不执行程序通过检查、阅读、评审等
动态测试需要运行程序输入测试用例并分析结果
黑盒测试若规格说明错误,可能无法发现黑盒依赖规格说明
白盒测试无法检验程序外部特性主要基于内部结构
语句覆盖是最强覆盖准则语句覆盖是最弱逻辑覆盖准则

第7章02 主观题可能考法

情景1:给一个开发项目,让你安排开发者测试流程

答题模板:

  1. 根据 V 模型,将测试活动与开发阶段对应;
  2. 详细设计后进行单元测试;
  3. 体系结构设计对应集成测试;
  4. 软件需求对应系统测试;
  5. 用户需求对应验收测试;
  6. 修改后进行回归测试;
  7. 对发布前版本进行 Alpha/Beta 测试;
  8. 强调越早发现缺陷,修复代价越低。

情景2:给模块结构图,让你选择集成测试策略

答题模板:

  1. 若希望早期看到系统框架,可选自顶向下集成;
  2. 自顶向下需要为未完成下层模块编写桩模块;
  3. 若底层关键模块较多,可选自底向上集成;
  4. 自底向上需要编写驱动模块;
  5. 若模块很多,不建议大爆炸集成,因为错误发现晚、定位难;
  6. 每集成一个模块后都应进行回归测试。

情景3:给一次代码修改,让你设计回归测试

答题模板:

  1. 识别被修改部分;
  2. 确定原基线测试用例库 T;
  3. 根据策略选择测试用例 T0;
  4. 策略可选全部再测试、按风险再测试、按修改再测试、按依赖再测试;
  5. 如果 T0 不充分,则生成新用例 T1;
  6. 执行测试,验证修改本身正确;
  7. 验证没有破坏既有功能。

情景4:给测试任务,让你写测试过程

答题模板:

  1. 测试需求:明确测什么;
  2. 测试计划:明确目标、范围、项目、方法、工具、资源、交付物;
  3. 测试设计:设计测试用例、脚本、覆盖准则;
  4. 测试开发:搭环境、写脚本、开发驱动/桩、准备数据;
  5. 测试执行:执行脚本并记录情况;
  6. 结果比较:实际结果与预期结果比较;
  7. 测试评估:分析覆盖率、缺陷、是否达到停止/成功标准;
  8. 测试报告:输出结论和建议。

第7章02 最终记忆主线

本章可以用一句话记住:

开发者测试是开发者在交付前发现代码缺陷的测试活动,以 V 模型为主线,包括单元、集成、系统、验收、Alpha/Beta 和回归测试;具体执行时按照测试需求、计划、设计、开发、执行、结果确认、评估和报告生成的任务流程推进,并结合静态/动态、黑盒/白盒等测试方法和多种测试工具完成质量保障。

本章最需要优先背的是:

  1. 开发者测试 DT 的定义和目标
  2. V模型中开发阶段和测试阶段的对应关系
  3. 单元测试定义、FIRST原则、五类测试内容
  4. 集成测试必要性
  5. 非增式集成 vs 增式集成
  6. 自顶向下用桩模块,自底向上用驱动模块
  7. 系统测试、验收测试、Alpha/Beta测试区别
  8. 回归测试目标、方法和典型过程
  9. 面向测试任务的八步测试过程
  10. 静态测试/动态测试、黑盒/白盒测试对比