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

软件测试期末复习之白盒测试

一、白盒测试基础概念

在这里插入图片描述

1. 定义与核心目标

  • 定义:基于程序内部逻辑结构(如代码语句、控制流、数据流)设计测试用例,关注代码执行路径。
  • 核心目标:验证代码逻辑正确性、覆盖代码分支与路径、发现代码层面的缺陷(如逻辑错误、条件遗漏)。

2. 适用场景

  • 单元测试阶段(测试函数、方法)、集成测试阶段(模块间接口逻辑)。
  • 测试对象:代码语句执行、条件判断、循环结构、分支逻辑。

二、白盒测试核心技术:逻辑覆盖法(必考)

模块1:六大覆盖标准(需对比强度)

1. 语句覆盖(最弱覆盖)
  • 定义:设计用例使程序中每条语句至少执行一次。
  • 示例
    if (x>0 && y<10) { z = x+y; }  
    // 用例:x=1, y=5(覆盖z=x+y语句)
    
2. 判定覆盖(分支覆盖)
  • 定义:覆盖所有判定的真假分支(每个if/while/for的真假结果至少一次)。
  • 示例
    if (a>5 || b<3) { ... } else { ... }  
    // 用例1:a=6, b=2(真分支);用例2:a=3, b=5(假分支)
    
3. 条件覆盖
  • 定义:覆盖所有条件的真假情况(每个条件的true/false至少一次)。
  • 示例
    if (x>0 && y<10) { ... }  
    // 条件1: x>0,条件2: y<10  
    // 用例1:x=1, y=5(条件都为真);用例2:x=-1, y=15(条件都为假)
    
4. 判定-条件覆盖
  • 定义:同时满足判定覆盖和条件覆盖(每个判定的真假分支+每个条件的真假至少一次)。
  • 特点:比前三者更强,但可能遗漏条件组合。
5. 条件组合覆盖(最强覆盖之一)
  • 定义:覆盖所有条件的真假组合(n个条件产生2ⁿ种组合)。
  • 示例
    if (a>0 && b<5 || c==10) { ... }  
    // 3个条件,需8种组合(2³),实际测试中可简化冗余组合。
    
6. 路径覆盖(最强覆盖)
  • 定义:覆盖程序中所有可能的执行路径(从入口到出口的每条路径至少一次)。
  • 示例:含循环的程序,需覆盖循环0次、1次、多次的路径。

模块2:覆盖强度对比与选择

覆盖类型强度特点
语句覆盖仅覆盖语句,可能遗漏分支和条件
判定覆盖覆盖分支,但可能忽略条件细节(如多个条件组合中的单个条件)
条件覆盖覆盖条件,但可能不覆盖完整分支
判定-条件覆盖中高综合判定和条件,但仍可能遗漏条件组合
条件组合覆盖覆盖所有条件组合,用例数随条件数指数增长,2ⁿ
路径覆盖最高覆盖所有路径,适用于复杂逻辑,但用例数可能极多

三、白盒测试核心技术:控制流图与圈复杂度(必考)

1. 控制流图绘制

  • 元素
    • 节点:表示代码块(如语句、判定),用矩形或圆形表示。
    • 边:表示控制流走向,用箭头表示(如if-else的真假分支、循环的入口/出口)。
  • 示例(作业手册单元3代码):
    void Sort(int iRecordNum, int iType) {int x=0, y=0;while(iRecordNum>0) {if(iType==0) x=y+2;else if(iType==1) x=y+10;else x=y+20;}
    }
    
    • 控制流图:![[Pasted image 20250627211528.png]]
      ![[Pasted image 20250627211552.png]]

2. 圈复杂度V(G)计算(3种方法)

  1. 公式法:V(G) = e - n + 2(e为边数,n为节点数)。
  2. 判定节点法:V(G) = 判定节点数 + 1(判定节点指if/while/for等)。
  3. 区域法:V(G) = 区域数(包括外部区域)。
  • 示例:上述Sort函数中,判定节点为while(iRecordNum>0)和if(iType0)/else if(iType1),共2个判定节点,故V(G)=2+1=3。

3. 独立路径确定

  • 定义:从入口到出口的路径,且至少包含一条新边(未被其他路径覆盖的边)。
  • 示例:V(G)=3时,独立路径数为3,如:
    1. while条件为假,直接退出。
    2. while条件为真,iType==0,执行x=y+2。
    3. while条件为真,iType==1,执行x=y+10。
    4. while条件为真,iType==2,执行x=y+20。(注:实际路径数可能因循环次数调整)

四、白盒测试综合实践(必考题型)

1. 代码分析与覆盖测试用例设计

例题:根据代码设计满足不同覆盖的用例(作业手册单元3简答题)
void Sort(int iRecordNum, int iType) {int x=0, y=0;while(iRecordNum>0) {if(iType==0) x=y+2;else if(iType==1) x=y+10;else x=y+20;iRecordNum--;}
}
(1)语句覆盖用例
  • 输入:iRecordNum=0, iType=任意值(跳过while循环,覆盖x=0,y=0语句)。
(2)判定覆盖用例
  • while真分支:iRecordNum=1, iType=0(执行while内逻辑)。
  • while假分支:iRecordNum=0, iType=0(不执行while)。
(3)路径覆盖用例
  • 路径1:while假(iRecordNum=0)。
  • 路径2:while真→iType=0→x=y+2(iRecordNum=1, iType=0)。
  • 路径3:while真→iType=1→x=y+10(iRecordNum=1, iType=1)。
  • 路径4:while真→iType=2→x=y+20(iRecordNum=1, iType=2)。
http://www.lqws.cn/news/598843.html

相关文章:

  • FPGA FMC 接口
  • Electron 进程间通信(IPC)深度优化指南
  • SpringBoot计时一次请求耗时
  • 数据库编程-ORM
  • 基于Pandas和FineBI的昆明职位数据分析与可视化实现(四)- 职位数据可视化(FineBI)
  • Java-String类静态成员方法深度解析
  • HDMI 2.1 FRL协议的流控机制:切片传输(Slicing)和GAP插入
  • 开关电源和线性电源Multisim电路仿真实验汇总——硬件工程师笔记
  • 【SQL知识】PDO 和 MySQLi 的区别
  • Golang的并发编程实践总结
  • github代码中遇到的问题-解决方案
  • RNN和LSTM
  • flv.js视频/直播流测试demo
  • npm link的使用方法详细介绍
  • 动手实践:如何提取Python代码中的字符串变量的值
  • QML通过XMLHttpRequest实现HTTP通信
  • RocketMQ的广播消息和集群消息有什么区别?
  • 密码学(斯坦福)
  • 突破性进展:超短等离子体脉冲实现单电子量子干涉,为飞行量子比特奠定基础
  • 分布式爬虫数据存储开发实战
  • Hadoop、Spark、Flink 三大大数据处理框架的能力与应用场景
  • (LeetCode 面试经典 150 题) 42. 接雨水 (单调栈)
  • 数据分析与做菜的关系,makedown
  • 630,百度文心大模型4.5系列开源!真香
  • 牛客笔试AI智能监考:革新远程招聘,打造公平高效的笔试新时代
  • 力扣网C语言编程题:寻找两个正序数组的中位数
  • (LeetCode 每日一题) 3330. 找到初始输入字符串 I (字符串)
  • 8.4 Jmter实践不同线程组之间的全局变量的传递和使用
  • opencv入门(5)图像像素的读写操作和算术运算
  • VCenter SSL过期,登录提示HTTP 500错误解决办法