7.6.2 软件测试的基本概念及分类
软件测试的分类很多,但考试最爱考的是分类依据。看到题干不要先背名词,而要先问:它是否运行程序?是否看内部结构?是在什么阶段做?它的测试目的是什么?
按是否运行程序:静态测试与动态测试
静态测试不执行程序。它通过阅读、审查、走查来发现问题,适用于需求、设计、代码等多种产物。动态测试执行程序,观察实际输出、状态变化和性能表现。
| 类型 | 是否执行程序 | 典型活动 | 适合发现的问题 |
|---|---|---|---|
| 静态测试 | 否 | 桌前检查、代码审查、代码走查、文档评审 | 需求矛盾、设计遗漏、代码规范问题、明显逻辑缺陷 |
| 动态测试 | 是 | 黑盒测试、白盒测试、性能测试、压力测试 | 运行错误、边界错误、接口错误、资源泄漏、性能瓶颈 |
三种常见静态检查
| 方法 | 谁参与 | 怎么做 | 关键词 |
|---|---|---|---|
| 桌前检查 | 开发者自己 | 对照需求、设计和代码逐项检查 | 自查 |
| 代码审查 | 多人评审 | 由评审人员检查代码质量、逻辑和规范 | 他人检查、正式性更强 |
| 代码走查 | 开发者带领他人 | 按样例数据在脑中模拟程序执行 | 人工执行、逻辑跟踪 |
代码走查的关键不是“运行程序”,而是人工模拟执行路径。题干如果说“不实际执行程序,但用测试数据检查代码逻辑”,一般仍属于静态测试。
按是否关注内部结构:黑盒、白盒、灰盒
| 类型 | 视角 | 依据 | 常见方法 |
|---|---|---|---|
| 黑盒测试 | 把系统看成输入输出转换器 | 需求规格、业务规则、界面约定 | 等价类划分、边界值分析、错误推测、因果图 |
| 白盒测试 | 把程序内部逻辑看清楚 | 源代码、控制流、条件、路径 | 语句覆盖、判定覆盖、条件覆盖、路径覆盖、基本路径测试 |
| 灰盒测试 | 介于两者之间 | 了解部分结构,同时从外部验证行为 | 接口测试、组件级测试中较常见 |
灰盒测试不是软考中本节最核心的考点,通常知道它“结合黑盒和白盒思想”即可。重点仍是黑盒和白盒的边界:黑盒不看代码,白盒看代码结构。
按测试阶段:从模块到交付
| 阶段 | 测试对象 | 主要关注 |
|---|---|---|
| 单元测试 | 函数、类、模块等最小可测单元 | 模块内部逻辑是否正确 |
| 集成测试 | 多个模块组合后的子系统 | 接口、调用、数据传递、协作关系 |
| 系统测试 | 完整系统 | 是否满足需求规格和非功能要求 |
| 验收测试 | 待交付系统 | 用户是否接受,业务目标是否达成 |
| 回归测试 | 修改后的相关功能 | 修复是否成功,旧功能是否被破坏 |
阶段分类与黑盒/白盒不是互斥关系。单元测试可以用白盒思想,系统测试常用黑盒思想;集成测试既可能看接口行为,也可能分析内部调用关系。
有效数据与无效数据
设计测试用例不能只测“正常输入”。有效数据检查系统是否能完成正确业务,无效数据检查系统能否抵御错误输入。
课程中的招聘系统例子可以这样理解:假设岗位要求年龄 20 到 60 岁、学历为本科/硕士/博士、专业为计算机/通信/电子。一个好用例应尽量让错误点可定位。
| 用例 | 年龄 | 学历 | 专业 | 评价 |
|---|---|---|---|---|
| A | 35 | 本科 | 计算机 | 有效用例,验证正常路径 |
| B | 18 | 本科 | 计算机 | 好的无效用例,只错年龄 |
| C | 18 | 高中 | 计算机 | 不够好,同时错年龄和学历 |
| D | 35 | 本科 | 机械 | 好的无效用例,只错专业 |
一条无效用例同时包含多个错误点,执行失败时很难判断系统是因哪个规则失败,也不利于定位缺陷。
测试目的分类
| 类型 | 目标 | 例子 |
|---|---|---|
| 功能测试 | 验证业务功能是否按需求工作 | 订单能否提交、退款能否成功 |
| 性能测试 | 验证响应时间、吞吐量、资源占用 | 并发 1000 用户下响应时间 |
| 压力测试 | 观察超负载时系统表现 | 持续增加并发直到系统瓶颈出现 |
| 安全测试 | 验证权限、输入校验、敏感数据保护 | 越权访问、SQL 注入、防重放 |
| 回归测试 | 修改后验证旧功能是否仍正确 | 修复登录缺陷后重测注册、找回密码 |
这些分类有时会交叉。例如系统测试阶段可以包含功能测试、性能测试、安全测试;回归测试也可能同时包含黑盒用例和白盒用例。
题目识别口诀
| 题干关键词 | 优先判断 |
|---|---|
| 不运行程序、评审、审查、走查 | 静态测试 |
| 运行程序、输入输出、观察结果 | 动态测试 |
| 等价类、边界值、因果图、错误推测 | 黑盒测试 |
| 语句覆盖、判定覆盖、条件覆盖、路径覆盖 | 白盒测试 |
| 模块内部 | 单元测试 |
| 模块接口、组装、桩模块、驱动模块 | 集成测试 |
| 完整系统、需求规格 | 系统测试 |
| 用户确认、交付 | 验收测试 |
例题
根据程序内部逻辑结构设计测试用例,属于:
下列通常属于静态测试的是:
本节小结
测试分类要按依据理解:静态/动态看是否运行,黑盒/白盒看是否关注内部结构,单元/集成/系统/验收看测试范围,功能/性能/安全/回归看测试目的。做题时先找分类维度,再匹配关键词。