夜雨聆风学习资料网

ARTICLE · 1166177

软件测试全梳理:从白盒到验收

软件测试全梳理:从白盒到验收

你以为软件测试就是“点一点,看能不能用”?

那可就低估它了。软考中的软件测试,既考测试层次,也考测试方法,还喜欢把几个容易混淆的概念放在一起“挖坑”。

单元测试、集成测试、确认测试、系统测试、验收测试,到底有什么区别?

白盒测试、黑盒测试、灰盒测试,是按什么划分的?

静态测试不运行程序,那它测试的到底是什么?

这篇文章,我们把《软件测试》的核心知识点、常见考点和易错点一次讲清楚。看完之后,至少不会再把“集成测试”和“验收测试”混成一锅粥。

一、先建立整体框架:软件测试有三个分类维度

软件测试经常从三个不同角度进行分类。

1. 按测试层次分类

主要包括:

  • 单元测试
  • 集成测试
  • 确认测试
  • 系统测试
  • 验收测试

它回答的是:

测试进行到了哪一层?测试对象有多大?

2. 按测试是否了解内部结构分类

主要包括:

  • 白盒测试
  • 黑盒测试
  • 灰盒测试

它回答的是:

测试人员是否了解程序的内部逻辑和实现结构?

3. 按是否运行程序分类

主要包括:

  • 静态测试
  • 动态测试

它回答的是:

测试过程中,程序有没有真正运行?

这三个维度不能混为一谈。

例如:

  • 一个系统测试,可以采用黑盒测试;
  • 一个集成测试,也可以采用灰盒测试;
  • 一个测试用例,可能属于动态黑盒测试;
  • 一次代码审查,则属于静态测试。

简单来说:

测试层次看“测什么范围”,测试方法看“从什么角度测”,静态动态看“程序是否运行”。

二、软件测试基础:测试到底在测什么

1. 软件测试的基本定义

软件测试是为了发现软件中的错误,验证软件是否满足规定需求,并评价软件质量的过程。

注意,测试的目标不是证明软件“绝对没有错误”。

更准确地说:

测试能够证明软件存在缺陷,但很难证明软件不存在缺陷。

因为输入空间太大,运行环境也可能非常复杂。即使测试通过了 1000 个场景,也不代表第 1001 个场景不会出问题。

2. 错误、缺陷和失效

这三个词在考试中比较容易绕。

概念
含义
举例
错误 Error
人员在开发过程中犯下的错误
程序员把大于写成了大于等于
缺陷 Fault/Defect
软件或文档中存在的问题
源代码中的判断条件写错
失效 Failure
软件运行时表现出的错误结果
用户输入合法年龄,却提示“年龄非法”

可以这样记:

人犯错,代码有缺陷,运行会失效。

3. 测试用例通常包括什么

一个完整的测试用例,通常包括:

  • 测试用例编号
  • 测试目标
  • 前置条件
  • 输入数据
  • 操作步骤
  • 预期结果
  • 实际结果
  • 测试结论
  • 测试环境
  • 关联需求

其中最重要的一组是:

输入数据、操作步骤、预期结果。

没有预期结果的测试,往往只是“随便点点看”。点出问题了也许算运气,没点出问题更不能说明软件没问题。

4. 测试的几个基本原则

原则一:测试显示缺陷存在,不能证明缺陷不存在

测试通过,只能说明当前测试场景下没有发现问题。

原则二:穷尽测试几乎不可能

输入组合、运行环境、用户操作路径非常多,全部测试通常不现实。

原则三:测试应尽早开始

需求和设计阶段也可以测试,例如:

  • 评审需求是否完整;
  • 检查需求是否存在歧义;
  • 检查设计是否满足性能要求;
  • 检查接口定义是否一致。

越早发现问题,修复成本通常越低。

原则四:缺陷具有集群性

少数模块往往聚集了大多数缺陷。

这意味着测试资源可以重点投入到:

  • 复杂模块;
  • 修改频繁的模块;
  • 接口较多的模块;
  • 历史缺陷较多的模块。

原则五:杀虫剂悖论

一套测试用例反复执行后,可能很难再发现新问题。

就像同一款杀虫剂用久了,虫子也会逐渐“适应”。所以测试用例要不断补充和调整。

原则六:没有发现错误,不代表软件有用

如果软件根本没有实现用户需要的功能,即使没有发现程序错误,它仍然是失败的。

这就是常说的:

不存在已知错误,不代表软件满足用户需求。

三、五种测试层次:从一个模块到客户验收

软件测试层次通常按照测试范围逐步扩大。

常见顺序是:

单元测试 → 集成测试 → 确认测试 → 系统测试 → 验收测试

实际项目中可能存在迭代、回归和交叉进行,但在软考答题时,通常按照这个逻辑理解。

四、单元测试:先把最小零件测明白

1. 什么是单元测试

单元测试是对软件中的最小可测试单元进行测试。

测试对象可能是:

  • 一个函数;
  • 一个方法;
  • 一个过程;
  • 一个类;
  • 一个模块。

单元测试关注的是模块内部逻辑是否正确。

2. 单元测试的主要内容

常见测试内容包括:

  • 模块接口;
  • 局部数据结构;
  • 独立路径;
  • 边界条件;
  • 错误处理;
  • 循环结构;
  • 异常处理;
  • 模块内部逻辑。

单元测试通常由程序员完成,比较适合采用白盒测试方法。

但要注意:

单元测试不等于白盒测试。

单元测试是按“测试层次”划分的,白盒测试是按“测试方法”划分的。二者属于不同分类维度。

3. 驱动模块和桩模块

当被测模块不能独立运行时,常常需要辅助模块。

驱动模块 Driver

用于调用被测模块,模拟上层模块。

常见于:

  • 自底向上的集成测试;
  • 单元测试中模拟调用者。

桩模块 Stub

用于被被测模块调用,模拟下层模块。

常见于:

  • 自顶向下的集成测试;
  • 单元测试中模拟被调用模块。

记忆方法很简单:

驱动是“主动调用别人”,桩是“被别人调用”。

五、集成测试:模块接起来,问题才真正出现

1. 什么是集成测试

集成测试是将经过单元测试的模块组合起来,检查模块之间的接口、调用关系和数据传递是否正确。

它关注的不是单个模块内部,而是:

  • 模块之间能不能正确调用;
  • 参数传递是否正确;
  • 数据格式是否一致;
  • 接口协议是否匹配;
  • 异常是否能够正确传递;
  • 一个模块的修改是否影响其他模块。

很多问题单独测试时发现不了,模块一连接,马上就开始“互相甩锅”。

2. 常见集成策略

自顶向下集成

从顶层模块开始,逐步向下集成。

特点:

  • 先测试系统主控流程;
  • 需要使用桩模块模拟底层模块;
  • 可以较早验证系统整体控制结构;
  • 底层模块测试相对较晚。

自底向上集成

从最底层模块开始,逐步向上集成。

特点:

  • 需要使用驱动模块;
  • 底层基础功能可以较早验证;
  • 顶层控制逻辑测试较晚。

三明治集成

结合自顶向下和自底向上两种方式,从上层和下层同时向中间集成。

一次性集成

先分别完成各个模块,再一次性全部组合。

这种方式看起来省事,实际上问题定位很困难。出了问题,往往不知道是哪个模块、哪个接口出了错,因此一般不推荐。

3. 集成测试的高频易错点

说法
是否正确
自顶向下集成使用驱动模块
错误,主要使用桩模块
自底向上集成使用桩模块
错误,主要使用驱动模块
集成测试只测试模块内部逻辑
错误,重点是模块之间的接口与协作
集成测试一定在所有单元测试结束后才开始
不一定,迭代开发中可以逐步集成
集成测试只测试功能,不测试接口
错误,接口正是重点

六、确认测试:软件是否符合需求规格

1. 什么是确认测试

确认测试也叫验证测试或有效性测试,主要检查软件是否实现了需求规格说明书中规定的内容。

它重点回答:

软件是不是按照需求做出来的?

确认测试通常关注:

  • 功能是否满足需求;
  • 性能是否达到要求;
  • 接口是否符合约定;
  • 数据处理是否正确;
  • 安全性是否符合要求;
  • 用户文档和配置文档是否完整。

确认测试通常以黑盒测试为主,因为测试人员主要根据需求规格设计测试用例,不一定关心程序内部是如何实现的。

2. 确认测试和系统测试的区别

两者确实容易混淆。

可以简单理解为:

  • 确认测试:重点看软件是否符合需求规格;
  • 系统测试:重点看完整系统在实际或接近实际环境中是否满足整体目标。

不过,不同教材和项目管理体系对二者的边界可能略有差异。考试时要根据题目中的关键词判断:

  • 出现“需求规格说明书、功能规格、软件是否正确实现需求”,更偏向确认测试;
  • 出现“完整系统、运行环境、性能、安全、可靠性、兼容性”,更偏向系统测试。

七、系统测试:把整个系统放到真实场景中

1. 什么是系统测试

系统测试是对完整的、集成后的软件系统进行测试。

它不仅检查功能,还会检查各种非功能需求。

常见内容包括:

  • 功能测试;
  • 性能测试;
  • 压力测试;
  • 负载测试;
  • 安全性测试;
  • 可靠性测试;
  • 可用性测试;
  • 兼容性测试;
  • 恢复性测试;
  • 安装测试;
  • 配置测试;
  • 文档测试。

2. 系统测试的特点

系统测试通常需要:

  • 接近真实的运行环境;
  • 完整的系统配置;
  • 真实或接近真实的数据;
  • 多种用户角色;
  • 端到端的业务流程。

比如电商系统不能只测“加入购物车”这个按钮,还要测试:

登录、浏览商品、加入购物车、提交订单、支付、库存扣减、消息通知、售后查询,能不能完整跑通。

这就是系统级思维。

八、验收测试:客户愿不愿意接收

1. 什么是验收测试

验收测试是由客户、用户或授权代表参与的测试,用于判断软件是否达到合同、业务目标或验收标准。

它重点回答:

这个软件,客户愿不愿意正式接收?

验收测试通常依据:

  • 合同;
  • 项目任务书;
  • 用户需求;
  • 验收标准;
  • 业务流程;
  • 服务等级协议。

2. 验收测试的常见形式

用户验收测试

由实际用户或业务代表进行,重点检查系统是否满足日常业务需要。

α 测试

通常在开发方或受控环境中进行,由用户或客户代表参与。

β 测试

通常交给真实用户,在真实或接近真实的环境中使用,收集反馈。

简单记忆:

α 测试更受控,β 测试更接近真实用户环境。

3. 确认测试和验收测试的区别

对比项
确认测试
验收测试
核心目标
验证软件是否符合需求规格
判断客户是否接受软件
主要依据
需求规格说明书
合同、业务目标、验收标准
主要参与者
测试人员、开发团队
客户、用户、业务代表
重点问题
软件做得对不对
客户是否愿意接收
典型场景
功能、接口、性能是否满足规格
业务流程是否可用、项目是否达标

不要简单认为:

确认测试就是验收测试。

在某些教材或项目流程中,二者可能存在包含或交叉关系,但在概念上,确认测试更强调“符合规格”,验收测试更强调“客户接收”。

九、白盒测试:打开程序内部看逻辑

1. 什么是白盒测试

白盒测试也称结构测试或逻辑驱动测试。

测试人员了解程序的内部结构、控制流程和逻辑路径,根据源代码或设计结构设计测试用例。

它重点关注:

  • 语句是否执行;
  • 分支是否覆盖;
  • 条件是否取到真和假;
  • 循环是否正确;
  • 路径是否覆盖;
  • 异常处理是否完整。

2. 常见白盒测试方法

语句覆盖

测试用例执行到的语句数量,占全部可执行语句数量的比例。

可以表示为:

语句覆盖率高,说明执行过的代码较多,但不能说明所有判断分支都被测试。

判定覆盖或分支覆盖

要求每个判定的真、假分支都至少执行一次。

例如:

if 条件 then    执行路径 Aelse    执行路径 B

至少需要让条件分别取真和假。

分支覆盖通常比单纯语句覆盖更严格,但依然不能覆盖所有条件组合。

条件覆盖

要求判定中的每个基本条件都至少取一次真值和一次假值。

例如:

if A and B then

需要分别考虑:

  • A 为真;
  • A 为假;
  • B 为真;
  • B 为假。

注意:

条件覆盖和分支覆盖不能简单认为完全等价。

路径覆盖

要求测试程序中的执行路径。

路径覆盖比语句覆盖和分支覆盖更严格,但如果程序中包含循环,完整路径数量可能非常大,甚至趋于无限,因此实际项目中通常只能选择重要路径。

基本路径测试

基本路径测试根据程序控制流图,找出一组线性独立路径。

控制流图的圈复杂度可以用下面的公式计算:

其中:

  •  表示控制流图中的边数;
  •  表示控制流图中的节点数;
  •  表示连通分量数;
  • 对于单个连通程序,通常 。

圈复杂度通常可以帮助我们估算基本独立路径的数量。

但要注意:

圈复杂度不是程序质量分数,也不是缺陷数量。

它主要反映程序逻辑结构的复杂程度。

3. 白盒测试的常见陷阱

  • 语句覆盖率 100%,不代表分支覆盖率 100%;
  • 分支覆盖率 100%,不代表所有条件组合都测试过;
  • 路径覆盖不一定能覆盖所有循环路径;
  • 白盒测试也不能发现所有需求层面的错误;
  • 测试代码结构,不代表测试业务目标。

十、黑盒测试:不看内部,只看输入和输出

1. 什么是黑盒测试

黑盒测试也称功能测试或数据驱动测试。

测试人员不关心程序内部如何实现,只根据:

  • 需求规格;
  • 功能说明;
  • 输入输出关系;
  • 业务规则;
  • 用户场景;

来设计测试用例。

黑盒测试重点检查:

输入某个数据后,系统是否给出了正确的输出和行为。

2. 等价类划分

等价类划分是把输入数据划分为若干类,认为同一类中的数据具有相似的测试效果。

例如,系统规定年龄必须是  到  岁。

可以划分为:

  • 无效等价类:年龄小于 ;
  • 有效等价类:;
  • 无效等价类:年龄大于 。

测试时不需要把每个年龄都测一遍,可以从每个等价类中选择代表值。

3. 边界值分析

很多错误都发生在边界附近,所以边界值分析特别重要。

对于年龄范围  到 ,可以重点测试:

也就是:

边界外一点、边界值、边界内一点。

这是软考中很常见的考点。

易错点

只测试  和 ,不够。

因为程序员可能把:

  • 大于写成大于等于;
  • 小于写成小于等于;
  •  写成 ;
  •  写成 。

边界外的数据同样重要。

4. 判定表

当系统有多个条件,并且不同条件组合会产生不同动作时,可以使用判定表。

例如,贷款审批可能同时考虑:

  • 是否有稳定收入;
  • 是否有信用记录;
  • 贷款金额是否超限;
  • 是否存在逾期记录。

这种场景如果只靠几个普通测试用例,很容易漏掉组合情况。判定表可以把条件、条件组合和动作对应起来。

5. 因果图

因果图用于描述输入条件和输出结果之间的逻辑关系。

它适合处理:

  • 多条件组合;
  • 与、或、非关系;
  • 条件之间存在约束;
  • 多个原因影响多个结果。

因果图常常可以转换为判定表,帮助生成测试用例。

6. 状态转换测试

如果系统行为与当前状态有关,可以使用状态转换测试。

常见场景包括:

  • 订单状态;
  • 用户登录状态;
  • 设备运行状态;
  • 工作流审批状态;
  • ATM 取款流程;
  • 网络连接状态。

测试时不仅要测“合法状态转换”,还要测:

  • 非法状态转换;
  • 重复操作;
  • 异常中断;
  • 状态恢复;
  • 状态转换条件不满足的情况。

7. 用例测试

用例测试从用户操作场景出发,验证完整业务流程。

例如“用户购买商品”用例可能包含:

  1. 用户登录;
  2. 搜索商品;
  3. 加入购物车;
  4. 提交订单;
  5. 完成支付;
  6. 查询订单状态。

用例测试特别适合系统测试和验收测试。

8. 错误推测法

错误推测法依靠测试人员经验,猜测系统中容易出错的地方。

常见经验包括:

  • 空值;
  • 超长字符串;
  • 特殊字符;
  • 重复提交;
  • 网络中断;
  • 权限不足;
  • 时间跨天;
  • 金额精度;
  • 并发操作;
  • 文件上传格式异常。

它简单、灵活,但依赖测试人员经验,不能完全替代系统化测试方法。

十一、灰盒测试:知道一些内部信息,但不完全打开源码

1. 什么是灰盒测试

灰盒测试介于白盒测试和黑盒测试之间。

测试人员通常了解部分内部信息,例如:

  • 系统架构;
  • 数据库表结构;
  • 接口协议;
  • 模块调用关系;
  • 数据流转方式;
  • 权限设计;
  • 缓存机制。

但测试主要仍然从外部行为和业务结果出发。

2. 灰盒测试的典型场景

灰盒测试常用于:

  • 接口测试;
  • 集成测试;
  • 数据库测试;
  • 安全测试;
  • Web 系统测试;
  • API 测试;
  • 分布式系统测试;
  • 权限和数据一致性测试。

举个例子:

测试人员知道订单系统中有订单表、库存表和支付表,也知道订单创建接口会调用库存服务。

于是测试时不仅看页面显示是否正确,还会检查:

  • 订单表是否正确写入;
  • 库存是否正确扣减;
  • 支付失败后订单状态是否回滚;
  • 接口重复调用是否产生重复订单。

这就很像灰盒测试。

3. 灰盒测试的易错点

灰盒测试不是“白盒测试和黑盒测试各做一半”。

它强调的是:

测试人员掌握部分内部结构信息,但不完全依赖源代码进行测试。

十二、静态测试:程序不运行,也能发现不少问题

1. 什么是静态测试

静态测试是在不执行程序的情况下,对软件产品进行检查和分析。

测试对象不只是源代码,还包括:

  • 需求规格说明书;
  • 概要设计;
  • 详细设计;
  • 测试计划;
  • 测试用例;
  • 用户手册;
  • 配置文件;
  • 源代码;
  • 数据库设计;
  • 接口文档。

2. 常见静态测试方法

代码审查

由开发人员或评审人员阅读代码,发现:

  • 命名问题;
  • 逻辑错误;
  • 资源未释放;
  • 空指针风险;
  • 安全漏洞;
  • 不符合编码规范的问题。

走查

由代码作者向其他人员讲解代码,参与者提出问题和建议。

正式审查

按照明确的流程、角色和检查表进行评审,通常比普通走查更加规范。

静态分析

借助工具分析代码或文档,例如:

  • 语法检查;
  • 类型检查;
  • 数据流分析;
  • 控制流分析;
  • 死代码检查;
  • 复杂度分析;
  • 安全漏洞扫描;
  • 编码规范检查。

3. 静态测试能发现什么

静态测试可以发现:

  • 需求描述歧义;
  • 文档前后不一致;
  • 接口定义不一致;
  • 变量未初始化;
  • 不可达代码;
  • 代码规范问题;
  • 潜在空指针;
  • 资源泄漏风险;
  • 权限校验遗漏;
  • 设计结构不合理。

4. 静态测试不能完全替代动态测试

静态测试可以发现很多潜在问题,但无法完全判断:

  • 实际运行性能;
  • 并发条件下的表现;
  • 用户体验;
  • 真实环境兼容性;
  • 运行时资源消耗;
  • 运行时数据是否正确。

所以更合理的做法是:

静态测试提前发现问题,动态测试验证运行行为。

十三、动态测试:让程序真正跑起来

1. 什么是动态测试

动态测试需要执行程序,通过输入数据观察实际输出和系统行为。

动态测试可以检查:

  • 功能是否正确;
  • 输出是否符合预期;
  • 页面交互是否正常;
  • 性能是否达标;
  • 系统是否稳定;
  • 异常处理是否正确;
  • 数据库状态是否一致;
  • 多用户并发是否正常。

2. 静态测试与动态测试对比

对比项
静态测试
动态测试
是否运行程序
不运行
运行
测试对象
文档、代码、设计、配置
可执行程序和运行系统
常见方法
评审、走查、静态分析
功能测试、性能测试、接口测试
发现问题
需求歧义、代码规范、潜在缺陷
实际输出错误、性能问题、运行时异常
测试成本
通常较早、修复成本较低
需要环境、数据和执行成本
是否能替代对方
不能
不能

静态测试和动态测试是互补关系,不是二选一。

十四、测试覆盖率:数字很漂亮,不代表质量就高

覆盖率可以帮助我们了解测试执行程度,但不能把它当成软件质量的全部。

常见覆盖率包括:

  • 语句覆盖率;
  • 分支覆盖率;
  • 条件覆盖率;
  • 路径覆盖率;
  • 接口覆盖率;
  • 功能覆盖率;
  • 需求覆盖率。

例如,语句覆盖率达到 100%,只说明所有可执行语句都执行过。

它仍然可能存在:

  • 错误的预期结果;
  • 未覆盖的输入组合;
  • 未覆盖的异常场景;
  • 未验证的业务规则;
  • 未测试的性能问题;
  • 未测试的安全问题。

所以不能简单地说:

覆盖率越高,软件一定越好。

更准确的说法是:

覆盖率是测试充分性的重要参考指标,但不是软件质量的唯一指标。

十五、测试过程:从计划到关闭缺陷

一个完整的测试过程通常包括以下活动:

1. 测试计划

明确:

  • 测试目标;
  • 测试范围;
  • 测试策略;
  • 测试资源;
  • 测试环境;
  • 时间安排;
  • 风险;
  • 进入和退出准则。

2. 测试设计

根据需求和设计文档编写:

  • 测试场景;
  • 测试用例;
  • 测试数据;
  • 预期结果;
  • 覆盖策略。

3. 环境准备

包括:

  • 软件安装;
  • 数据库准备;
  • 网络配置;
  • 测试账号;
  • 测试数据;
  • 依赖服务;
  • 日志和监控配置。

4. 测试执行

按照测试用例执行,并记录:

  • 实际输入;
  • 实际输出;
  • 测试结果;
  • 测试日志;
  • 截图或附件;
  • 异常现象。

5. 缺陷管理

缺陷报告通常包括:

  • 缺陷编号;
  • 缺陷标题;
  • 发现版本;
  • 发现环境;
  • 重现步骤;
  • 预期结果;
  • 实际结果;
  • 严重程度;
  • 优先级;
  • 附件;
  • 当前状态。

6. 回归测试

修复缺陷后,重新验证缺陷是否解决,并检查修改是否影响其他功能。

这里要区分:

  • 重新测试:确认原来的缺陷是否已经修复;
  • 回归测试:确认修改没有破坏其他原有功能。

十六、软考高频易错点,一次整理

易错点一:测试层次和测试方法不是一回事

  • 单元、集成、确认、系统、验收:属于测试层次;
  • 白盒、黑盒、灰盒:属于测试方法;
  • 静态、动态:属于是否运行程序的分类。

不要看到“单元测试”就自动选“白盒测试”。

虽然单元测试经常使用白盒方法,但二者不是同一个概念。

易错点二:自顶向下用桩,自底向上用驱动

记住:

上面还没准备好,用驱动模拟上层调用;下面还没准备好,用桩模拟下层响应。

更直接的考试记忆:

  • 自顶向下:桩;
  • 自底向上:驱动。

易错点三:边界值不能只测边界

以  到  为例,不要只测  和 。

更完整的边界测试通常包括:

  • ;
  • ;
  • ;
  • ;
  • ;
  • 。

易错点四:语句覆盖率高,不代表测试充分

语句都执行过,可能仍然没有覆盖:

  • 错误分支;
  • 异常路径;
  • 特殊输入;
  • 业务组合;
  • 并发场景。

易错点五:静态测试不是“什么都不测”

静态测试不运行程序,但可以检查:

  • 文档;
  • 需求;
  • 设计;
  • 代码;
  • 配置;
  • 接口;
  • 编码规范。

易错点六:灰盒测试不是简单折中

灰盒测试不是“黑盒做一半、白盒做一半”,而是:

测试人员掌握部分内部信息,并利用这些信息设计更有针对性的外部测试。

易错点七:确认测试不等于验收测试

  • 确认测试:看是否符合需求规格;
  • 验收测试:看客户是否愿意接收。

二者可能有交叉,但关注重点不同。

易错点八:测试通过不等于软件没有缺陷

测试结果只能说明:

在当前测试数据、测试环境和测试范围内,没有发现问题。

这句话虽然不够“爽”,但很专业。

十七、一张表快速复习

测试类型
核心对象
主要目标
常用方法或场景
单元测试
函数、类、模块
验证模块内部逻辑
白盒测试、驱动、桩
集成测试
模块之间的接口
验证调用和数据传递
自顶向下、自底向上
确认测试
软件与需求规格
验证是否正确实现需求
黑盒测试为主
系统测试
完整软件系统
验证整体功能和非功能需求
性能、安全、兼容性
验收测试
面向客户的系统
判断是否达到验收标准
用户验收、α 测试、β 测试
白盒测试
程序内部结构
检查逻辑、分支和路径
语句、分支、条件、路径覆盖
黑盒测试
输入、输出和行为
检查功能和业务规则
等价类、边界值、判定表
灰盒测试
部分内部信息
提高接口和数据测试针对性
API、数据库、安全测试
静态测试
文档、代码、设计
不运行程序发现潜在问题
评审、走查、静态分析
动态测试
运行中的程序
观察实际运行行为
功能、性能、回归测试

十八、考场速记口诀

可以用下面几句话快速回忆:

单元测零件,集成测接口;确认看需求,系统看整体;验收看客户,能不能接收;白盒看逻辑,黑盒看输入;灰盒懂部分,接口更精准;静态不运行,动态跑起来;覆盖率很高,也别急着说没问题。

结语

软件测试不是“找几个错误”这么简单,它更像是在有限时间和资源下,尽可能验证软件是否满足需求、是否能够稳定运行、是否值得交付。

如果你正在准备软考,可以重点掌握这三条主线:

  1. 测试层次:单元、集成、确认、系统、验收;
  2. 测试方法:白盒、黑盒、灰盒;
  3. 执行方式:静态、动态。

相关学习资料