白盒测试详解

2024-04-15 22:28
文章标签 详解 测试 白盒

本文主要是介绍白盒测试详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

🍅 视频学习:文末有免费的配套视频可观看

🍅 关注公众号:互联网杂货铺,回复1 ,免费获取软件测试全套资料,资料在手,涨薪更快

概念与定义

  1. 白盒测试:侧重于系统或部件内部机制的测试,类型分为分支测试(判定节点测试)、路径测试、语句测试。

  2. 控制流分析(基于程序结构):控制流分析是一类用于分析程序控制流结构的静态分析技术,目的在于生成程序的控制流图,在编译器设计程序分析、程序理解等领域都有重要应用。

  3. 逻辑覆盖测试(对判定的测试)的原理:以程序内部的逻辑结构为基础的用例设计方法,它通过对程序的逻辑结构的遍历,来实现测试对程序的覆盖。

  4. 测试覆盖率:度量测试完整性的指标,是测试有效性的一个度量。

    覆盖率至少被执行一次的总数总数覆盖率至少被执行一次的总数总数覆盖率=至少被执行一次的����总数����总数

    测试覆盖率不需要100%,因为覆盖率越高,测试成本越高。

    通常可以设置一个覆盖率达标标准。

  5. 语句覆盖:设计测试用例时应保证程序中每一条可执行语句至少应执行一次。(点覆盖)

  6. 判定覆盖(分支覆盖):设计测试用例时应保证程序中每个判定节点取得每种可能的结果至少一次。或者程序中每个判定的真分支和假分支至少执行一次。(边覆盖)

  7. 条件覆盖:设计测试用例时应保证程序中每个复合判定表达式中,每个简单判定条件(子条件)的取真和取假情况至少执行一次。

  8. 判定-条件覆盖:设计测试用例时应满足判定节点的取真、取假分支至少执行一次,且每个简单判定条件(子条件)的取真和取假情况也至少执行一次。即判定覆盖+条件覆盖。

  9. 条件组合覆盖:条件组合覆盖,设计测试用例时应满足每个判定节点中,所有简单判定条件(子条件)的所有可能的取值组合情况至少执行一次。通过列出真值表的方式来得到完全的覆盖。

  10. 路径覆盖:要求设计足够的测试用例,运行被测程序,覆盖程序中所有可能组合的路径。

  11. 程序图:简化的程序流程图,不关注源代码细节,只关注程序的基本结构。

  12. 环复杂度:用于描述程序结构复杂度的度量。

  13. 基本路径测试:在程序的控制流图的基础上,通过分析控制流程的环路复杂性,导出独立可执行路径集合,从而设计测试用例的方法。

  14. 静态白盒测试:又称为结构分析,是在不执行程序的条件下审查软件设计、体系结构和代码,从而找出软件缺陷的过程。测试对象是文档、代码等非计算机执行的部分。

简答

白盒测试关注的对象

源代码和程序结构。

白盒测试的优缺点

优点

  • 针对性强,便于快速定位,测试效率高;
  • 在函数级别开始测试工作,缺陷修复的成本低;
  • 通过不同的白盒覆盖指标有助于了解和衡量对被测对象的测试覆盖程度,
  • 有助于代码优化和缺陷预防。

缺点

  • 对测试人员的技术要求高。
  • 成本高。

白盒测试的问题

  • 软件测试是不完备的;
  • 软件测试是有风险的;
  • 测试设计应达到的目标:提高效率、降低风险、在代码级别上提高软件质量。

各种程序结构以及它们的复杂程度

程序结构有:线性结构(顺序结构),条件判定结构,循环结构,以及这些结构的组合。

复杂程度:

线性结构二分支的条件判定多分支的条件判定循环结构线性结构二分支的条件判定多分支的条件判定循环结构线性结构<二分支的条件判定<多分支的条件判定<循环结构

逻辑覆盖测试的六种测试方法

image-20231230162427773

  1. 语句覆盖

    缺点:关注语句,而非关注判定节点。对隐式分支无效。

  2. 判定覆盖(分支覆盖)

    局限性:判定覆盖仅关心表达式的整体取值,并不关心表达式如何构成,不能覆盖到每个子条件的所有取值情况,由此导致测试的漏洞。

  3. 条件覆盖

    局限性:条件覆盖并不能确保满足判定覆盖。

  4. 判定-条件覆盖(分支-条件覆盖)

  5. 条件组合覆盖

    优点:

    • 条件组合覆盖准则满足语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖准则;
    • 方法简单;只需要找到所有简单条件,并列出真值表,穷尽所有组合情况即可。

    局限性:

    • 条件组合覆盖不能保证所有组合的路径被执行;
    • 测试用例太多;
    • 冗余严重。
  6. 路径覆盖

    覆盖面最广。

    100%满足路径覆盖,一定能100%满足判定覆盖标准;但并不一定能100%满足条件覆盖和判定-条件覆盖,也就不能满足100%条件组合覆盖。

各种覆盖之间的关系

  • 语句覆盖太弱;
  • 判定覆盖、条件覆盖不够全面;
  • 判定-条件覆盖设计难度大;
  • 条件组合覆盖的测试用例数量太多,不能将所有路径覆盖;
  • 路径覆盖的测试用例复杂且数量多,不能将所有的条件组合覆盖。

单独采用任何一种逻辑覆盖方法都不能完全覆盖所有的测试用例,任何一个高效的测试用例,都是针对具体测试场景的。

环复杂度的计算

直观观察法

观察程序图将二维平面分割为封闭区域和开放区域的个数。

image-20231230163410807

公式计算法

方法一:

�(�)=�−�+2

其中,� 是边数, � 是节点或顶点数。

前提条件:单入口单出口。

例题:

image-20231230163845973

�(�)=�−�+2=10−7+2=5

方法二:

�(�)=�−�+1

前提条件:无孤立节点,强连通图。如果非强连通图,则需要先添加辅助线。如下图的蓝线。

简单地说,强连通图就是图中任意两个点相互可达。

image-20231230164134629

�(�)=�−�+1=11−7+1=5

判定节点法

�(�)=�+1

其中,� 是二分支判定节点的个数。

前提条件:仅计算二分支的判定节点。

如果没有判定节点,只有一条执行路径,则�=1。

image-20231230163845973

如上图,二分支判定节点分别有:A,B,C,D。

因此,�(�)=�+1=4+1=5.

特殊情况的计算

环复杂度的计算公式都有特定的前提条件,遇到特殊情况,则使用其它可以使用的公式。

image-20231230164854250

  • 左图,非单入单出,不能使用公式计算法的方法一,可以使用判定节点法,V=5
  • 右图,非二分支判定节点,不能使用判定节点法,可以使用公式计算法方法一,V=13

基本路径测试的流程

  1. 生成路径地图

    image-20231230163845973

  2. 确定独立路径集合的规模

    计算环复杂度�,则需要�条独立路径。

  3. 找出一组独立路径。

    1. 确定主路径(出错概率最高的路径,或者缺陷对用户影响最大的路径)。
    2. 根据主路径抽取其它独立路径。

image-20231230165602659

静态白盒测试的方法

  1. 代码检查
  2. 静态结构分析
  3. 静态质量度量

image-20231230173754769

同行评审的一般流程

  1. 计划评审会议
  2. 召开评审预备会
  3. 准备评审会议
  4. 召开评审会议
  5. 召开第三小时会议
  6. 修复缺陷
  7. 确认修复

同行评审的五种角色

  1. 主持人:负责组织评审会议;
  2. 讲解员:负责讲解被评审的工作产品;
  3. 记录员:负责记录缺陷和决议;
  4. 作者:程序编写者,负责提供被提审的工作产品;
  5. 评审员:程序设计者、测试专家,负责评审工作产品,也负责设计测试用例。

在这我为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看,也可以直接【点击文末小卡片免费领取资料文档】

2024全网最牛,字节大佬花了一周讲完的自动化测试全套教程,从零开始教你成为年薪百万测开工程师

这篇关于白盒测试详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/907091

相关文章

Mysql 中的多表连接和连接类型详解

《Mysql中的多表连接和连接类型详解》这篇文章详细介绍了MySQL中的多表连接及其各种类型,包括内连接、左连接、右连接、全外连接、自连接和交叉连接,通过这些连接方式,可以将分散在不同表中的相关数据... 目录什么是多表连接?1. 内连接(INNER JOIN)2. 左连接(LEFT JOIN 或 LEFT

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

Linux内核之内核裁剪详解

《Linux内核之内核裁剪详解》Linux内核裁剪是通过移除不必要的功能和模块,调整配置参数来优化内核,以满足特定需求,裁剪的方法包括使用配置选项、模块化设计和优化配置参数,图形裁剪工具如makeme... 目录简介一、 裁剪的原因二、裁剪的方法三、图形裁剪工具四、操作说明五、make menuconfig

详解Java中的敏感信息处理

《详解Java中的敏感信息处理》平时开发中常常会遇到像用户的手机号、姓名、身份证等敏感信息需要处理,这篇文章主要为大家整理了一些常用的方法,希望对大家有所帮助... 目录前后端传输AES 对称加密RSA 非对称加密混合加密数据库加密MD5 + Salt/SHA + SaltAES 加密平时开发中遇到像用户的

Springboot使用RabbitMQ实现关闭超时订单(示例详解)

《Springboot使用RabbitMQ实现关闭超时订单(示例详解)》介绍了如何在SpringBoot项目中使用RabbitMQ实现订单的延时处理和超时关闭,通过配置RabbitMQ的交换机、队列和... 目录1.maven中引入rabbitmq的依赖:2.application.yml中进行rabbit

C语言线程池的常见实现方式详解

《C语言线程池的常见实现方式详解》本文介绍了如何使用C语言实现一个基本的线程池,线程池的实现包括工作线程、任务队列、任务调度、线程池的初始化、任务添加、销毁等步骤,感兴趣的朋友跟随小编一起看看吧... 目录1. 线程池的基本结构2. 线程池的实现步骤3. 线程池的核心数据结构4. 线程池的详细实现4.1 初

Python绘制土地利用和土地覆盖类型图示例详解

《Python绘制土地利用和土地覆盖类型图示例详解》本文介绍了如何使用Python绘制土地利用和土地覆盖类型图,并提供了详细的代码示例,通过安装所需的库,准备地理数据,使用geopandas和matp... 目录一、所需库的安装二、数据准备三、绘制土地利用和土地覆盖类型图四、代码解释五、其他可视化形式1.

SpringBoot使用Apache POI库读取Excel文件的操作详解

《SpringBoot使用ApachePOI库读取Excel文件的操作详解》在日常开发中,我们经常需要处理Excel文件中的数据,无论是从数据库导入数据、处理数据报表,还是批量生成数据,都可能会遇到... 目录项目背景依赖导入读取Excel模板的实现代码实现代码解析ExcelDemoInfoDTO 数据传输

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11