第7章01 软件测试概述
3.1 本章定位
本章建立软件测试的总体框架:测试是什么、测试过程有哪些阶段、测试有哪些分类、测试为什么需要多种策略,以及软件测试的三大核心问题。后续黑盒、白盒、回归、性能测试都是本章框架下的具体方法。
3.2 核心概念
软件测试定义
广义上,软件测试是一种软件正确性、完整性、安全性和质量的检查过程。
课件指出业界有静态测试和动态测试的说法,但动态测试才是真正意义上的软件测试。
狭义上,软件测试是为了发现错误或缺陷而执行某个程序或软件系统的过程。
重要判断:
- 测试的目的:==证明程序有错==,而不是证明程序无错误。
- 测试没有发现错误,不能说明程序中一定没有错误。
测试用例
客观题重点。
执行软件测试首先必须有测试用例,然后根据测试用例运行程序,以发现程序或软件可能存在的潜在错误。
测试用例是对一项特定软件产品进行测试任务的描述,体现测试方案、方法、技术和策略。简单理解:
$$ 测试用例 = 测试输入 + 测试预言 $$
课件表述中,测试用例包括一组测试输入、执行条件以及预期结果。
3.3 软件测试过程 STLC
软件测试过程又称软件测试生命周期(Software Test Life Cycle, STLC),从测试项目计划建立到所有测试结束,一般包括七个阶段。
软件测试过程(STLC)
3.4 软件测试分类
按实施主体分类
第二次小测已考。
软件测试根据由谁来测试分成
按内部结构可见程度分类
注意:灰盒测试结合内部结构信息和外部行为,但不能简单认为“灰盒测试 = 白盒测试 + 黑盒测试”。
3.5 常见测试类型
课件按照需求类型引出多种测试:
- 功能性需求:结构测试、功能测试、安全性测试、容错测试等;
- 质量需求:性能测试、压力测试、兼容性测试、可维护性测试等;
- 其他需求:标准符合度测试、GUI 测试、字体大小和颜色测试等。
常见的软件测试类型汇总
3.6 软件测试有效策略
课件强调单一测试技术难以满足所有测试需求,应组合使用:
- 静态测试与动态测试结合;
- 黑盒测试与白盒测试结合;
- 内部测试与外部测试结合;
- 整体测试与局部测试结合等。
黑盒与白盒结合的理由:
- 白盒测试检查内部结构,可针对代码逻辑;
- 黑盒测试观察外部行为,可发现需求实现问题;
- 二者结合可以更全面发现缺陷。
软件测试有效策略汇总
补充提示: 课件中还特别提到了一种结合了白盒与黑盒优点的 灰盒测试 (Grey-box test) 。它不仅关注输入输出的正确性,也关注程序内部的逻辑覆盖,在集成测试阶段非常适用,但不能简单地将其理解为“灰盒 = 白盒 + 黑盒” 。
软件测试典型方法汇总
3.7 软件测试三个核心问题
第二次小测已考。
测试预言
测试预言是测试的预期结果,是与实际结果进行比较的依据。测试预言的来源可以是现有系统、用户手册、专家知识、标准规范等,但不能是被测系统自身。
测试充分性
测试充分性即测试覆盖率问题。测试覆盖率是测试可信性的重要指标,但并不是覆盖率越高一定越好:过高覆盖率也可能来自复杂或冗余用例。
3.8 易混淆点
3.9 小测关联
第二次小测已考:
- 软件测试按实施者分为开发者测试、用户测试、第三方测试;
- 软件测试三大核心问题:测试用例生成、测试预言、测试充分性;
- 系统测试核心目的包括验证系统完整性、评估非功能性指标。
3.10 本章复习检查题
填空题
- 软件测试过程一般包括测试需求分析、测试计划制定、测试设计、测试开发、测试执行、________和________七个阶段。
- 软件测试的三个核心问题是________、和。
- 测试预言是测试的________。
选择题
- 黑盒测试主要基于:A. 代码结构 B. 需求规格 C. 机器码 D. 调试日志
- 下列关于测试的说法正确的是:A. 测试没有发现错误说明程序无错 B. 测试的目的之一是发现错误 C. 测试预言来自被测系统自身 D. 灰盒测试等于白盒加黑盒
判断题
- 测试覆盖率低不一定意味着测试充分性一定不可接受。
- 黑盒测试可以发现需求文档不完整导致的功能缺失问题。
- 测试预言可以直接使用被测系统自身作为唯一依据。
参考答案
- 填空:测试结果分析与评估、测试报告生成;测试用例生成、测试预言、测试充分性;预期结果。
- 选择:B;B。
- 判断:对;对;错。
第7章01 总复习框架
这一章可以概括为一句话:
软件测试是以测试用例为核心,通过静态/动态、黑盒/白盒、内部/外部、局部/整体等多种策略和方法,对软件全生命周期中的功能、性能、安全、可靠性、兼容性、健壮性、可用性等方面进行缺陷发现和质量评估的活动,其核心问题是测试用例生成、测试预言和测试充分性。
第7章01 客观题必背清单
A. 填空题重点
- 狭义软件测试是为了发现错误或缺陷而执行某个程序或软件系统的过程。
- 动态测试才是真正意义上的软件测试。
- 软件测试的目的是证明程序有错,而不是证明程序无错误。
- 软件测试生命周期 STLC 包括:测试需求分析、测试计划制定、测试设计、测试开发、测试执行、测试结果分析与评估、测试报告生成。
- 开发者测试包括:单元测试、集成测试、系统测试、确认测试、回归测试。
- 单元测试五方面:模块接口测试、局部数据结构测试、路径测试、错误处理测试、边界测试。
- 集成测试又叫组装测试或联合测试。
- 集成测试方法包括一次性组装方式和渐增式测试。
- 渐增式测试典型方式包括自顶向下和自底向上。
- 用户测试一般发生在验收测试阶段,有时称 Beta 测试。
- 第三方测试的目的是保证测试工作的客观性。
- 结构测试又称白盒测试。
- 功能测试又称黑盒测试。
- 白盒测试包括控制流测试和数据流测试。
- 黑盒测试代表方法包括功能分解法、等价类划分法、因果图判定表法、边界值分析法。
- 性能测试指标包括 TPS、QPS、RT、ART、并发用户数、资源利用率。
- 安全测试关注漏洞或脆弱性。
- 可靠性是在规定条件和规定时间区间完成规定功能的能力。
- 兼容性测试是非功能性测试。
- 健壮性测试有时等同容错测试。
- 可用性标准包括容易学习、使用效率、可记忆性、错误频率和严重程度、主观满意度。
- 软件测试三个核心问题:测试用例生成、测试预言、测试充分性。
- 1 个测试用例 = 1 个测试输入 + 1 个测试预言。
B. 选择题重点
C. 判断题易错点
第7章01 主观题可能考法
虽然这章是概述,但也可能出情景型主观题。
情景1:给一个软件项目,让你设计测试过程
答题模板:
- 进行测试需求分析,明确需求点和测试要点;
- 制定测试计划,明确目标、范围、测试项、策略、工具、资源和交付物;
- 进行测试设计,设计测试用例、测试脚本和覆盖准则;
- 进行测试开发,搭建环境、编写脚本、准备驱动/桩和测试数据;
- 执行测试,记录日志和缺陷;
- 分析评估结果,包括覆盖率、缺陷分布、停止/成功标准;
- 生成测试报告,总结风险和遗留问题。
情景2:给一个系统需求,让你选择测试类型
答题模板:
- 功能是否正确:功能测试 / 黑盒测试;
- 内部逻辑是否覆盖:结构测试 / 白盒测试;
- 高并发响应是否正常:性能测试;
- 是否存在漏洞:安全性测试;
- 是否能长期稳定运行:可靠性测试;
- 是否适配不同平台:兼容性测试;
- 是否能处理非法输入和异常:健壮性测试;
- 用户是否容易使用:可用性测试。
情景3:给一个测试资源有限的项目,让你制定测试策略
答题模板:
- 静态测试与动态测试结合:早期用评审/静态分析,后期运行测试;
- 黑盒测试与白盒测试结合:既看需求功能,也看代码结构;
- 内部测试与外部测试结合:先内测保障充分性,再外测获得真实用户反馈;
- 局部测试与整体测试结合:先测模块、接口,再测集成系统;
- 根据风险优先级选择重点测试项,例如安全、性能、核心业务路径。
情景4:给一个测试用例设计问题,让你分析三大核心难点
答题模板:
- 测试用例生成:如何选择合适输入、路径、条件或需求覆盖;
- 测试预言:如何确定预期输出,是否能获得可靠 oracle;
- 测试充分性:如何评估覆盖程度,如需求覆盖率、代码覆盖率。
第7章01 最终记忆主线
你可以用下面这条线记住本章:
软件测试首先要明确定义和目的,然后按照 STLC 七阶段执行;测试贯穿全生命周期,由开发者、用户和第三方共同参与;测试类型包括结构、功能、性能、安全、可靠性、兼容性、健壮性和可用性;有效测试需要组合静态/动态、白盒/黑盒、内部/外部、局部/整体策略;典型方法包括组合、随机、蜕变、演化和变异测试;最终围绕测试用例生成、测试预言和测试充分性三个核心问题展开。
第7章01最需要优先背的是:
- 软件测试目的:证明程序有错,而不是证明无错;
- STLC 七阶段;
- 开发者测试、用户测试、第三方测试;
- 单元、集成、系统、确认、回归测试的区别;
- 白盒测试 = 结构测试,黑盒测试 = 功能测试;
- 常见测试类型及适用场景;
- 四种有效测试策略组合;
- 组合测试、随机测试、蜕变测试、演化测试、变异测试的基本思想;
- 测试用例生成、测试预言、测试充分性三个核心问题。