当前位置: 首页 > 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区域路径组合
程序变异测试动态通过人为插入错误检测测试用例有效性

相关文章:

  • 1536. 【中山市第十一届信息学邀请赛决赛】同质(same)
  • 63. 不同路径 II
  • siparmyknife:SIP协议渗透测试的瑞士军刀!全参数详细教程!Kali Linux教程!
  • 运维打铁:生产服务器用户权限管理方案全解析
  • 前端地图数据格式标准及应用
  • vue项目表格甘特图开发
  • 告别“盘丝洞”车间:4-20mA无线传输如何重构工厂神经网?
  • Python打卡训练营学习记录Day34
  • sso登录(单点登录)实现
  • MySQL强化关键_016_存储引擎
  • JavaScript面试题之匿名函数
  • 数据结构第1章 (竟成)
  • debian12下安装搜狗输入法
  • 伊吖学C笔记(3、字符、分支结构)
  • Unreal渲染源码简读(一)RHI/Shader
  • Minecraft Fabric - java.lang.NoClassDefFoundError HttpUriRequest
  • Spring Boot是什么?MybatisPlus常用注解,LambdaQueryWrapper常用方法
  • OpenHarmony 4.1版本应用升级到5.0版本问题记录及解决方案
  • vue开发中常用方法笔记
  • 在公司快速查看与固定内网IP地址的完整指南
  • 新乡河南网站建设/百度云官方网站
  • 网站建设及系统开发/网络优化大师手机版
  • 网站seo方案撰写/深圳网络公司推广
  • 什么在线做动图的网站比较好/杭州网站推广平台
  • cmseasy做网站简单吗/百度下载安装2019
  • 公司的网络规划与设计/网站怎么优化推荐