当前位置: 首页 > 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种方法覆盖度都要高。
  • 缺点:需要对所有可能的路径进行测试(包括循环、条件组合、分支选择等),那么需要设计大量、复杂的测试用例,使得工作量呈指数级增长。

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

http://www.xdnf.cn/news/315487.html

相关文章:

  • Linux中的`export` 设置的环境变量是临时的吗?如何永久生效?
  • 使用 AI 如何高效解析视频内容?生成思维导图或分时段概括总结
  • AI驱动的Kubernetes管理:kubectl-ai 如何简化你的云原生运维
  • 验证es启动成功
  • Nacos源码—5.Nacos配置中心实现分析一
  • Linux内核初始化机制全解析:从pure_initcall到late_initcall
  • ETL介绍
  • AI与Web3.0:去中心化智能合约的未来
  • 成都养老机器人“上岗”,机器人养老未来已至还是前路漫漫?
  • 为了结合后端而学习前端的学习日志(1)——纯CSS静态卡片案例
  • 移动二维矩阵
  • 场景可视化与数据编辑器:构建数据应用情境​
  • 结构可视化:利用数据编辑器剖析数据内在架构​
  • 什么是跨域,如何解决跨域问题
  • Mac 使用 Charles代理生成https服务
  • nginx性能优化与深度监控
  • 一篇文章解析 H.264/AVC 视频编解码标准框架
  • 如何使用极狐GitLab 软件包仓库功能托管 npm?
  • GitLab常用操作
  • 面试算法刷题练习1(核心+acm)
  • sizeof 和 strlen 的区别
  • linux基础学习--linux磁盘与文件管理系统
  • OpenCV-Python (官方)中文教程(部分一)_Day21
  • shell脚本--2
  • 数据中心 第十五次CCF-CSP计算机软件能力认证
  • 【day04】Fibonacci数列 | 单词搜索 | 杨辉三角
  • privateGPT和RAGflow之间的区别
  • 深入浅出HTML:构建现代网页的基石
  • 如何在24G显存机器上搭建一个超过gpt效果的DeepSeek-R1?
  • Eclipse通过Tomcat启动web项目报错