6.7 软件测试
本篇定位:软件测试是软工第一必考大户(9 年直接命中 15+ 题,几乎年年 2–3 题),且老魏摸底唯一错题(27 号:黑盒测试方法)就在本章——必须重点覆盖。考点:白盒 vs 黑盒、覆盖强度(语句<判定<条件<路径)、测试阶段链、回归测试、等价类/边界值、测试观。核心能力:白盒看内部、黑盒看功能;语句覆盖最弱;成功测试=发现错误。 数据依据:
01-真题/真题文本/+01-真题/考点汇总/+05-笔记/软件工程-模块总纲.md;答案以专业判断为准。 阅读提示:测试阶段链与 6.1 生命周期衔接;集成测试验证模块接口(6.6 设计的检验);Web 测试与 5.7 应用层呼应。
一、考点定位(本章真题统计)
| 考点 | 真题锚点 | 频次 | 考法 |
|---|---|---|---|
| 白盒 vs 黑盒 | 2021 单43、2024 单33、2020 多87 | 3 年 3 题 | 白盒看内部逻辑/黑盒看外部功能 |
| 覆盖强度 | 2026 单31 | 1 年 | 语句<判定<条件<路径;语句覆盖最弱 |
| 测试阶段链 | 2021 单42、2022 单38 | 2 年 | 集成测试内容;验收测试=达到用户期望 |
| 回归测试 | 2018 单73 | 1 年 | 修改后重测确认未引入新错误 |
| 黑盒局限 | 2019 单69 | 1 年 | 不能发现冗余代码 |
| 用例设计 | 2020 单44、2023 单35、摸底错题 27 | 3 年 | 等价类/边界值;选发现错误可能性大的数据 |
| 测试观 | 2019 多87、2024 单43、2026 多91 | 3 年 | 成功测试=发现错误;测试是质量保证手段 |
| 性能/兼容性 | 2019 单44、2020 单42、2022 多85 | 3 年 | 兼容性不属于性能测试;Web 测试归类 |
命题规律:测试题两大主线:①白盒/黑盒与覆盖;②测试阶段与测试观。2027 预测 2–3 题:白盒黑盒判定、覆盖强度、等价类/边界值(老魏错题考点专攻)。核心能力:白盒黑盒对比表 + 覆盖四档 + 测试观三连(成功=发现错误/质量保证/选易错数据)。
二、知识框架(先搭骨架)
软件测试(目的:发现错误,不是证明无错)
├── 白盒测试(结构测试)
│ ├── 依据:程序内部逻辑/结构(2021 单43、2024 单33、2020 多87)
│ ├── 覆盖强度(由弱到强):语句 < 判定 < 条件 < 路径(2026 单31)
│ │ ├── 语句覆盖:每句执行一次(最弱)
│ │ ├── 判定覆盖:每个分支真假都走
│ │ ├── 条件覆盖:每个条件真假都走
│ │ └── 路径覆盖:所有路径都走(最强)
│ └── 局限:无法验证外部功能是否符合需求
├── 黑盒测试(功能测试)
│ ├── 依据:软件外部功能/规格说明(摸底错题 27)
│ ├── 方法:等价类划分、边界值分析(摸底错题 27 考点)
│ └── 局限:不能发现是否存在冗余代码(2019 单69)
├── 测试阶段链
│ ├── 单元测试(模块内)→ 集成测试(模块间,2021 单42 全对题)→
│ ├── 系统测试(整体)→ 验收测试(用户确认达到期望,2022 单38)
│ └── 回归测试:修改后重测、确认未引入新错误(2018 单73)
├── 测试观
│ ├── 成功测试=发现至今未发现的错误(2019 多87)
│ ├── 测试是质量保证的重要手段(2024 单43)
│ ├── 选发现错误可能性大的数据(2020 单44、2023 单35)
│ └── 开发人员测自己的程序不能作为通过依据(2022 单37)
└── 测试类型
├── 性能测试(含压力测试);兼容性测试不属于性能测试(2019 单44)
├── 数据兼容性=能否打开以前版本文件(2020 单42)
└── Web 测试:内容/无效链接=功能测试(2022 多85)
一句话记忆:白盒看内部(语句<判定<条件<路径)、黑盒看功能(等价类/边界值);阶段链单元→集成→系统→验收;成功测试=发现错误、回归测试=没引入新错。
三、考点详解
3.1 白盒测试(2021 单43、2024 单33、2020 多87)
精确定义:白盒测试 = 依据程序内部逻辑结构设计测试用例(2021 单43 选内部逻辑),检查每条路径/分支/语句是否正确执行。
2020 多87(白盒关注点):白盒测试关注程序结构、内部逻辑、每条路径的正确性——不看外部功能是否满足需求(那是黑盒)。
覆盖强度(2026 单31,必背):语句 < 判定 < 条件 < 路径(由弱到强)——语句覆盖发现错误的能力最弱(2026 单31 选语句覆盖)。
口诀:白盒覆盖四档——语句最弱、路径最强。
3.2 黑盒测试(摸底错题 27,必考)
精确定义:黑盒测试 = 依据软件的外部功能/规格说明设计测试用例(不关心内部实现),验证功能是否符合需求。
两个经典方法(摸底错题 27 考点):
- 等价类划分:把输入数据分成若干等价类,每类取一个代表测试(有效等价类+无效等价类);
- 边界值分析:取边界值(最小值/最大值/临界值)测试——大量错误发生在边界。
黑盒局限(2019 单69):黑盒测试不能发现是否存在冗余代码(看不到内部结构,无法发现死代码/冗余逻辑)。
口诀:黑盒=功能视角,管外部不管内部;等价类+边界值最常用。
3.3 测试阶段链(2021 单42、2022 单38)
四阶段(必背):单元测试 → 集成测试 → 系统测试 → 验收测试
- 单元测试:测每个模块(白盒为主);
- 集成测试:把模块组装起来测模块间接口(2021 单42:穿越接口数据不丢失、模块间功能影响、全局数据结构、误差累积——全部正确,全对题);
- 系统测试:整个系统按需求整体测试(功能+性能+安全);
- 验收测试:用户确认系统是否达到期望(2022 单38 选验收测试)。
回归测试(2018 单73):修正错误后重新测试,确认没有引入新错误——修改代码后必做。
口诀:单集系验(单元→集成→系统→验收);改完必回归。
3.4 测试观(2019 多87、2024 单43、2022 单37、2026 多91)
三个必背测试观:
- 成功测试 = 发现了至今未发现的错误(2019 多87——"没发现错误=测试成功"是错误说法);
- 测试是质量保证的重要手段(2024 单43——但不是唯一手段,质量还要靠设计/评审);
- 开发人员测自己的程序不能作为已通过测试的依据(2022 单37——需要独立测试人员)。
2026 多91(测试正确观):穷举测试不可能、证明程序无错误不可能、错误多则修改后错误很少——均错误说法(选"以上都错"类)。
口诀:测试找错才成功、质量保证靠测试、自己测自己不算数。
3.5 测试效率与用例设计(2020 单44、2023 单35)
2020 单44、2023 单35(选同一答案):提高测试效率的方法 = 选择发现错误可能性大的数据作为测试数据(不追求数量、追求针对性)。
口诀:测试数据要"挑错多的",不是"堆数量"。
3.6 测试类型辨析(2019 单44、2020 单42、2022 多85)
- 性能测试:响应时间、吞吐量、并发能力;兼容性测试不属于性能测试(2019 单44);
- 数据兼容性=能否打开以前版本保存的文件(2020 单42);
- Web 测试归类(2022 多85):
- 压力测试属性能测试(不做是错的);
- 内容测试属功能测试(归"易用性"是错的);
- 无效链接属功能测试(归"安全性"是错的)。
口诀:性能测响应并发、兼容另算;Web 内容链接=功能。
3.9 复杂度度量与白盒覆盖档位(补强)
McCabe 环路复杂度 V(G)(三种等价算法):
- V=E−N+2(边数−节点数+2);② V=判定节点数+1;③ V=平面图区域数。
- 含义:独立路径条数,即"至少需要几个测试用例才能覆盖所有基本路径";V(G)≤10 是经验阈值(>10 建议拆分重构,>20 极难测试)。
- 例:节点 N=7、边 E=9 ⇒ V=9−7+2=4(4 条基本路径)。
白盒覆盖由弱到强(必背顺序):语句 < 判定(分支)< 条件 < 判定/条件 < 条件组合 < 路径。
- 语句覆盖最弱:判定条件写反也可能"语句全覆盖",查不出逻辑错;
- 判定覆盖 ⊃ 语句覆盖;条件覆盖不必然满足判定覆盖,要"判定/条件覆盖"才两全;
- 路径覆盖最强,但含循环时路径数可能爆炸(不可行)。
其他度量:Halstead(算子/算符计数)、LOC;可靠性 vs 可用性——可靠性看 MTBF(故障频次),可用性=MTBF/(MTBF+MTTR)(修得快则可用性高)。
四、易错坑汇总(命题人惯用陷阱)
- 语句覆盖最弱(2026 单31)——"路径覆盖最弱"错误(路径最强);语句覆盖发现能力最弱。
- 黑盒不能发现冗余代码(2019 单69)——"黑盒能发现冗余代码"错误(黑盒看不到内部)。
- 成功测试=发现错误(2019 多87)——"测试没发现错误=成功"错误(可能用例设计得不好)。
- 自己测自己不算数(2022 单37)——"开发人员测试通过=程序没问题"错误。
- 兼容性不属于性能测试(2019 单44)——"兼容性测试是性能测试"错误。
- 回归测试=修改后重测(2018 单73)——"回归测试是首次测试"错误(回归=修改后确认无新错)。
- 验收测试=用户确认(2022 单38)——"验收测试是开发人员自测"错误(验收是用户视角)。
- 边界值=关键测试点(摸底错题 27)——"测试不用测边界值"错误(边界最容易出错)。
五、横向扩展(防漏网:本章边界内、真题尚未考但可能补考的点)
说明:横向扩展覆盖"大纲范围内但 9 年真题未考过"的知识,标注【新增概率】供取舍。
- 等价类划分应用【高】:给输入条件分有效/无效等价类、取代表值——2027 高概率(老魏错题考点)。
- 边界值取点【高】:最小值/最大值/略超边界——"边界值分析取哪些值"题。
- 判定表/因果图【低】:黑盒测试其他方法——名词题。
- α/β 测试【中】:α=内部用户、β=外部用户(验收前)——名词辨析。
- 压力/负载/容量测试【低】:性能测试细分——名词题。
- 测试用例四要素【低】:前置条件/步骤/输入/期望输出——名词题。
- 单元测试的白盒性【中】:单元测试以白盒为主、集成以黑盒+白盒、系统/验收黑盒为主——阶段方法匹配题。
- 自动化测试【低】:回归测试常用自动化——与 6.9 DevOps 衔接。
六、真题演练(代表性真题 + 解析)
例 1(摸底错题 27) 黑盒测试的主要方法包括(口径已核)。 A. 等价类划分 B. 边界值分析 C. 语句覆盖 D. 路径覆盖
答案:AB。黑盒=等价类+边界值(功能视角);语句/路径覆盖是白盒方法(C/D 错)。口诀:黑盒等价边界、白盒语句路径。
例 2(2026 单31) 下列测试覆盖方法中,发现错误能力最弱的是(口径已核)。 A. 语句覆盖 B. 判定覆盖 C. 条件覆盖 D. 路径覆盖
答案:A。语句 < 判定 < 条件 < 路径——语句覆盖最弱、路径覆盖最强。口诀:语句最弱、路径最强。
例 3(2021 单43) 白盒测试的测试用例依据是(口径已核)。 A. 软件外部功能 B. 程序内部逻辑 C. 用户需求文档 D. 规格说明书
答案:B。白盒=程序内部逻辑/结构;外部功能/规格是黑盒依据。口诀:白盒看内、黑盒看外。
例 4(2019 单69) 黑盒测试不能发现的问题是(口径已核)。 A. 功能错误 B. 界面错误 C. 冗余代码 D. 输入错误
答案:C。黑盒看不到内部结构——不能发现冗余代码;功能/界面/输入错误都能通过黑盒发现。口诀:黑盒看不见冗余。
例 5(2022 单38) 验证软件是否达到用户期望的测试是(口径已核)。 A. 单元测试 B. 集成测试 C. 系统测试 D. 验收测试
答案:D。验收测试=用户确认达到期望;单元/集成/系统是开发侧测试。口诀:验收看用户满不满意。
例 6(2018 单73) 修正软件错误后,为了确认没有引入新的错误而进行的测试是(口径已核)。 A. 单元测试 B. 回归测试 C. 系统测试 D. 性能测试
答案:B。回归测试=修改后重测、确认未引入新错误。口诀:改完必回归。
例 7(2019 多87) 关于软件测试,正确的说法是(口径已核)。 A. 成功的测试是发现了至今未发现的错误 B. 测试的目的是证明程序没有错误 C. 穷举测试是可行的 D. 测试通过说明程序一定正确
答案:A。成功测试=发现新错误;测试不能证明无错(B 错)、穷举不可行(C 错)、通过≠绝对正确(D 错)。口诀:测试为找错、不为证无错。
七、本章小结
- 一条主线:白盒(内部/覆盖四档)vs 黑盒(功能/等价类边界值)→ 阶段链(单元→集成→系统→验收)→ 回归测试 → 测试观三连 → 测试类型辨析。
- 必背判定:语句覆盖最弱(2026 单31);黑盒不能发现冗余(2019 单69);成功测试=发现错误(2019 多87);验收=用户确认(2022 单38);回归=无新错(2018 单73);自己测自己不算(2022 单37)。
- 衔接预告:单元/集成测试与 6.6 模块设计衔接;自动化测试→6.9 DevOps;性能测试与 5.10 网络性能呼应。