当前位置: 首页 > 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.dtcms.com/a/264011.html

相关文章:

  • 将svn项目迁移到git
  • 技术学习_人工智能_1_神经网络是如何实现的?
  • 【算法】动态规划 斐波那契类型: 740. 删除并获得点数
  • Vue 3.x 使用 “prerender-spa-plugin ” 预渲染实现网站 SEO 优化
  • 读Vista
  • AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年7月1日第125弹
  • 数据结构学习——图
  • AiPy +创宇智脑 MCP+Doubao-1.6:IP 风险调查效率显著提高
  • 顶级SCI极光优化算法!PLO-Transformer-GRU多变量时间序列预测,Matlab实现
  • 借助工具给外语视频加双语字幕的实用指南​
  • 【Maven 】 <resources> 配置中排除 fonts/** 目录无效,可能是由于以下原因及解决方案:
  • 坚石ET ARM加密狗复制模拟介绍
  • gis服务器geoserver的下载与安装
  • 分布式爬虫数据存储开发实战
  • 开源模型应用落地-OpenAI Agents SDK-集成Qwen3-8B-探索input_guardrail 的创意应用(五)
  • WPF学习笔记(19)控件模板ControlTemplate与内容呈现ContentPresenter
  • 电子面单系统开发全解析
  • 创建对象的步骤
  • docker desktop部署本地gitlab服务
  • JVM 知识点
  • 数据结构day7——文件IO
  • MapReduce分布式计算框架:从原理到实战
  • 7.可视化的docker界面——portainer
  • 基于ApachePOI实现百度POI分类快速导入PostgreSQL数据库实战
  • 【C++】备忘录模式
  • 简单聊聊 Flutter 在鸿蒙上为什么可以 hotload ?
  • MySQL 中 InnoDB 存储引擎与 MyISAM 存储引擎的区别是什么?
  • 软件测试-持续集成
  • 嵌入式开发:主频与晶振详解
  • Qt自定义外观详解