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

软件测试(4) 白盒测试

1. 白盒测试定义

        白盒测试(White Box Testing) 又称为结构测试或逻辑驱动测试,是一种基于程序内部逻辑结构的测试方法。

  • 测试人员需要了解程序代码结构和实现逻辑;

  • 关注程序的控制流、数据流、判断逻辑、分支结构等;

  • 目的:验证程序内部的执行路径是否按预期工作,代码是否覆盖全面。


2. 静态白盒测试方法(不执行程序)

2.1 代码检查法

  • 通过人工或工具对源代码逐行检查;

  • 发现语法错误、规范违背、潜在缺陷;

  • 常见方式:走查、审查、桌面检查等。

2.2 静态结构分析法

  • 使用工具分析代码结构,如函数调用图、变量依赖关系;

  • 检查模块之间的耦合性、圈复杂度等;

  • 工具:SonarQube、Understand 等。

2.3 静态质量度量法

  • 对代码的复杂度、重复率、行数、注释比例等进行量化分析;

  • 典型度量指标包括:

    • 圈复杂度(Cyclomatic Complexity)

    • 模块间耦合度

    • 代码注释率


3. 动态白盒测试方法(需执行程序)

3.1 逻辑覆盖测试法(Logic Coverage)

覆盖类型说明
语句覆盖(Statement)每条语句至少执行一次
判定覆盖(Decision)每个条件判断结构(如if)至少执行为 true 和 false 两次
条件覆盖(Condition)每个单独的条件(例如 if(a > 0 && b < 5) 中的 a > 0 和 b < 5)分别为真/假
判定-条件覆盖同时满足判定覆盖和条件覆盖
条件组合覆盖所有条件变量可能组合都被测试
路径覆盖(Path)程序中所有可能的执行路径都覆盖

3.2 基本路径测试法(McCabe 方法)

用于度量和测试程序的复杂性,确保所有独立路径都被测试。

步骤:
  1. 画出控制流图(CFG):节点表示语句块,边表示控制流。

  2. 计算环形复杂度

    • 公式:V(G) = E - N + 2
      其中 E 是边数,N 是节点数,V(G) 是圈复杂度。

    • 圈复杂度 = 独立路径数量(每条路径至少经过一次)

  3. 找出独立路径集合
    每个独立路径增加了程序控制结构的新分支。


4. 其他白盒测试方法

4.1 域测试(Domain Testing)

  • 将输入域分为若干子域,测试每个子域的代表值;

  • 用于处理输入条件限制较复杂的情况,如不等式、条件组合。

 4.2 符号测试(Symbolic Testing)

  • 用符号代替具体值来分析程序行为;

  • 适用于验证算法或逻辑正确性(类似形式化推理)。

4.3 Z路径测试

  • 基于控制流图划分区域(Z区域),确定每个区域路径;

  • 提高路径覆盖率,适合复杂条件控制的程序。

4.4 程序变异(Mutation Testing)

  • 有意修改程序代码制造“变异体”(如把 == 改成 !=);

  • 若测试用例未能检测出错误,说明测试用例不够有效;

  • 用于评估测试用例集的缺陷检测能力。


5.小结对比表

方法类型是否执行代码特点/用途
代码检查法静态人工或工具检查代码语法规范
静态结构分析法静态分析结构复杂度,模块依赖关系
质量度量法静态用于评估代码结构质量、复杂性
逻辑覆盖测试动态覆盖不同逻辑路径,常用六种覆盖标准
基本路径测试法动态通过控制流图和圈复杂度找到所有独立路径
域测试动态/符号是/否测试输入范围边界、约束
符号测试符号分析静态推理验证逻辑正确性
Z路径测试动态关注Z区域路径组合
程序变异测试动态通过人为插入错误检测测试用例有效性
http://www.xdnf.cn/news/618049.html

相关文章:

  • 归一化与标准化
  • 频率分布直方图
  • halcon初始
  • 深度剖析并发I/O模型select、poll、epoll与IOCP核心机制
  • 计算机组成原理-基本运算部件定点数的运算
  • 【安全攻防与漏洞​】​​Heartbleed漏洞复现与修复
  • 【JS】vue3具名导出与默认导出
  • [Asp.Net]GridView导出Excel长数字显示成科学计数
  • Spring Boot 项目多数据源配置【dynamic datasource】
  • C++进阶--c++11(02)
  • 【算法】: 前缀和算法(利用o(1)的时间复杂度快速求区间和)
  • 全球复合铁路枕木市场深度分析:技术革新与区域增长潜力(2024-2031)
  • IIS部署微信支付模块问题
  • 欧拉公式的历史脉络、数学证明和现代意义
  • 信息学奥赛及各种程序设计竞赛中常见的名词解释
  • Android四大组件学习总结
  • PyQt学习系列07-数据库操作与ORM集成
  • JavaMail的使用
  • 重读《人件》Peopleware -(12-1)Ⅱ 办公环境 Ⅴ 大脑时间与身体时间(上)
  • 超简单 FishSpeech 本地部署
  • 【游戏设计】游戏玩法与游戏机制
  • 决策树引导:如何选择最适合你的机器学习算法
  • 文章记单词 | 第110篇(六级)
  • Java 8 Lambda 表达式使用说明与案例
  • 前端测试简介
  • Python排序函数全面指南:从基础到高级
  • 字符编码详解:ASCII、Latin1、Unicode、UTF-8 与 GBK
  • 365打卡第N1周: one-hot编码案例
  • 【数据反哺运营】用Python构建可落地的商品结构分析方法论-某朴超市
  • 【风控】申请评分卡(A卡)模型