当前位置: 首页 > news >正文

软考 系统架构设计师系列知识点 —— 黑盒测试与白盒测试(2)

接前一篇文章:软考 系统架构设计师系列知识点 —— 黑盒测试与白盒测试(1)

本文内容参考:

黑盒测试和白盒测试详解-CSDN博客

软件测试中的各种覆盖(Coverage)详解-CSDN博客

特此致谢!

二、白盒测试

1. 基本介绍

白盒测试也称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试,是一种动态分析法。白盒测试主要用于检测软件编码过程中的错误。程序员的编程经验、对编程软件的掌握程度、工作状态(编写代码时的精神状态)等因素都会影响到编程质量,导致代码错误。

软件程序基本的语法错误在程序调试时,就能够比较及时地发现,然后及时进行改正。但是软件程序在运算顺序、逻辑判断以及运行路径上的错误很难发现。在实际的软件程序代码编写上,没有程序员能够保证代码编写结构不出现任何错误,即使是水平很高的程序员也不能保证。白盒测试下,软件程序被看做是一个打开的盒子,盒子里有被测软件的源代码,还能够分析盒子内部的结构,所以这种测试方法能够全面地测试程序代码结构。

白盒测试方法一般遵循以下原则:

  • 保证一个模块中的所有独立路径至少被测试一次。
  • 所有逻辑值均需测试真(true)和假(false)两种情况。
  • 检查程序的内部数据结构,保证其结构的有效性。
  • 在上下边界及可操作范围内运行所有循环。

2. 优缺点

(1)优点

  • 迫使测试人员去仔细思考软件的实现。
  • 可以检测代码中的每条分支和路径。
  • 揭示隐藏在代码中的错误。
  • 对代码的测试比较彻底。
  • 最优化。

(2)缺点

  • 投入成本高、昂贵。
  • 无法检测代码中遗漏的路径和数据敏感性错误。
  • 不验证规格的正确性。

3. 方法

白盒测试方法主要分为语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖以及路径覆盖。

(1)语句覆盖(Statement Coverage)

基本思想是设计若干测试用例,运行被测程序,使程序中的每个可执行语句至少被执行一次。语句覆盖是最基础的覆盖标准。

示例:

def calculate(x):if x > 0:        # 分支语句print("正数") # 语句1else:print("非正数") # 语句2

测试用例:

  • x为1(覆盖语句1)
  • x为-1(覆盖语句2)

覆盖率计算

  • 总语句数:3(if + print + print)

  • 已覆盖:3 → 100%语句覆盖

优缺点:

  • 优点:简单易实现。
  • 缺点:无法检测缺失分支(如没有测试x为0情况)。

(2)分支覆盖(Branch Coverage)

也称判定覆盖。基本思想是设计若干用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断真假值均曾被满足。

示例:

def check(score):if score >= 60:    // 分支点return "及格";    // 分支1else:return "不及格";  // 分支2

测试用例

  • score为80(覆盖分支1)
  • score为50(覆盖分支2)
与语句覆盖的关系:
  • 100%分支覆盖 ⇒ 100%语句覆盖

  • 反之不成立

(3)条件覆盖(Condition Coverage)

基本思想是设计若干测试用例,执行被测程序以后,要使每个判断中每个条件的可能取值至少满足一次。

示例:

if (age > 18 && gender == 'M') {  // 两个子条件// do something
}

子条件

  • age > 18(T/F)
  • gender == 'M'(T/F)

测试用例:

用例agegender覆盖条件组合
120'M'T && T
215'F'F && F
320'F'T && F (可选)
415'M'F && T (可选)

(4)判定-条件覆盖

是判定和条件覆盖设计方法的交集,即设计足够的测试用例,使得判断条件中的所有条件可能取值至少执行一次,同时,所有判断的可能结果至少执行一次。

(5)条件组合覆盖

基本思想是设计足够的测试用例,使得程序中每个判断的所有可能的条件取值组合都至少出现一次。

(6)路径覆盖(Path Coverage)

基本思想是设计足够的测试用例,覆盖程序中所有可能的执行路径。路径覆盖是最严格的覆盖标准。

示例:

def func(x, y):if x > 0:       # 分支1y += 1if y < 10:      # 分支2x += 1return x + y

独立路径

  • 分支1=T → 分支2=T
  • 分支1=T → 分支2=F
  • 分支1=F → 分支2=T
  • 分支1=F → 分支2=F
现实挑战:
  • 循环可能产生无限路径 → 通常限制循环次数

  • 复杂度随分支数指数增长(n个分支⇒最多2ⁿ条路径)

优缺点:

  • 优点:可以对程序进行彻底的测试用例覆盖,比前面讲的5种方法覆盖度都要高。
  • 缺点:需要对所有可能的路径进行测试(包括循环、条件组合、分支选择等),那么需要设计大量、复杂的测试用例,使得工作量呈指数级增长。

至此,对于白盒测试就讲解完了。黑盒测试、白盒测试的全部内容也就讲解完了。

相关文章:

  • 如何做界面自动化工具选择?
  • Leetcode 刷题记录 09 —— 链表第三弹
  • 数据结构--树
  • 精益数据分析(45/126):媒体网站商业模式的深度剖析与挑战应对
  • linux - shell脚本编程
  • docker创建一个centOS容器安装软件(以宝塔为例)的详细步骤
  • CentOS 7 安装OpenJDK 17 JRE
  • 空间数据分析新趋势:AI 与 ArcGIS Pro 的协同创新
  • 使用 Gradio + Qwen3 + vLLM 部署 Text2SQL 多表查询系统
  • MySQL 8.0 OCP(1Z0-908)英文题库(1-10)
  • Linux NVIDIA 显卡驱动安装指南(适用于 RHEL/CentOS)
  • 检测内存条好坏有工具,推荐几款内存检测工具
  • 从明文裸奔到密钥长城:HTTPS加密全链路攻防与CA信任锚点构建
  • 直播数据大屏是什么?企业应如何构建直播数据大屏?
  • Linux:认识基础IO
  • TikTok 矩阵运营新手实操保姆级教程 2.0 版本
  • CentOS 7.9 安装详解:手动分区完全指南
  • C++排序算法(一)
  • 统信服务器系统reposync命令详解
  • CentOS算法部署
  • 国内大模型人才大战打响!大厂各出奇招
  • 明查|哈佛大学批改美教育部长来信,红笔标出语法错误?
  • 上汽享道出行完成13亿元C轮融资,已启动港股IPO计划
  • 101条关于减重的知识,其中一定有你不知道的
  • 丹麦召见美外交官,强调“不能容忍”美在格陵兰岛间谍活动
  • 俄罗斯今日将举行“胜利日”阅兵,有何看点?