白盒测试--控制流测试(白盒测试,逻辑覆盖,路径测试(基路径测试、循环测试),控制流图)

article/2025/9/3 9:08:31

文章目录

      • 白盒测试概念
      • 白盒测试方法--控制流测试
        • 语句覆盖
        • 判定覆盖(分支覆盖)
        • 条件覆盖
        • 判定-条件覆盖
        • 条件组合覆盖
        • 路径覆盖
      • 路径测试
        • 基路径测试
        • 循环测试
      • 控制流图
        • 基本控制流图
        • 复合逻辑下的控制流图
        • 图矩阵
        • 环形复杂度

白盒测试概念

  • 又叫结构测试,逻辑驱动测试。把测试对象看作一个打开的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序所有逻辑路径进行测试 。
  • 白盒测试法考虑的是测试用例对程序内部逻辑的覆盖程度。最彻底的白盒法是覆盖程序的每一条路径,但是由于程序中一般含有循环,所以路径的数目极大,要执行每一条路径是不可能的,只能希望覆盖的程序尽可能高些。
    在这里插入图片描述

白盒测试方法–控制流测试

逻辑覆盖:根据被测程序的逻辑结构设计测试用例。测试的重点在于判定框。
在这里插入图片描述
在这里插入图片描述

语句覆盖

  • 设计若干条测试用例,使程序中每条可执行语句(所有的方框)至少执行一次。

判定覆盖(分支覆盖)

  • 设计测试用例,使程序中的每个逻辑判断的取真和取假的分支至少经历一次。无法确定判定内部条件的错误。

条件覆盖

  • 设计若干测试用例,使程序的每个判定中的每个条件的可能取值至少满足一次。
    在这里插入图片描述
    在这里插入图片描述

判定-条件覆盖

  • 使判定中每个条件的可能取值至少满足一次,并且使每个判定分支至少执行一次。
  • 同时满足判定、条件两种覆盖标准。
  • 缺点在于没有考虑两个条件的组合情况。
    在这里插入图片描述

条件组合覆盖

  • 使得每个判断表达式中条件的各种可能组合都至少出现一次。
    在这里插入图片描述
    在这里插入图片描述

路径覆盖

  • 设计足够多的测试用例,覆盖程序中的每条可能路径。
  • 上述满足条件组合覆盖的测试用例不能覆盖路径acd。
    在这里插入图片描述

路径测试

基路径测试

  • 如果把覆盖的路径数压缩到一定限度内,例如程序中的循环体只执行零次和一次,就成为基路径测试。
  • 通过分析程序控制流图的环路的复杂性,导出基本路径集合(独立路径),从而设计测试用例,保证这些路径至少通过一次。
  • 独立路径
    • 独立路径必须包含一条在定义之前不曾用到的边。(每一条新的路径都包含了一条新边)
    • 控制流图中所有独立路径的集合就构成了基本路径集。
  • 程序环形复杂性
    • 程序的环路复杂性即McCabe复杂性度量,又叫圈复杂度。
    • 从程序环路复杂性可导出程序基本路径集合中的独立路径条数。
  • 基本路径测试步骤
    • 导出程序的控制流图;
    • 计算控制流图的环路复杂度V(G);
    • 确定只包含独立路径的基本路径集;
    • 设计测试用例。
      在这里插入图片描述

循环测试

  • 简化循环的假设
    • 不进入循环
    • 只进入一次循环
  • 简单循环测试需设计五种测试
    • 零次循环;
    • 一次循环;
    • 两次通过循环;
    • m次通过循环,m<循环最大次数;
    • n-1,n次通过循环。其中n是允许通过循环的最大次数。
  • 嵌套循环可按照下面的方法进行测试
    • 从最内层循环开始,将所有其它层的循环设置为最小值;
    • 对最内层循环使用简单循环的全部测试。
    • 由内向外构造下一个循环的测试。测试时保持所有外层循环的循环变量取最小值,并使其它嵌套内层循环的循环变量取“典型”值;
    • 反复进行,直到测试所有的循环。
  • 串接循环
    • 两个或多个简单的循环串接在一起,称为串接循环。
    • 如果两个或多个循环毫不相干,则应作为独立的简单循环测试。
    • 如果两个循环串接起来,而第一个循环是第二个循环的初始值,则这两个循环并不是独立的。如果循环不独立,则推荐使用嵌套循环的方法进行测试。
  • 非结构循环
    • 不能测试,尽量重新设计给结构化的程序结构后再进行测试。

控制流图

  • 控制流图将程序流程图中结构化构件改用一般有向图的形式表示。
  • 控制流图是退化的程序流程图,图中每个处理都退化成一个结点,流线变成连接不同结点的有向弧。
  • 控制流图中的基本元素
    • 节点和边
      • 节点由带标号的圆圈表示比如一个处理框序列和一个条件判定框(假设不包含复合条件)。
      • 控制流线由带箭头的弧或线表示,可称为边。它代表程序中的控制流。
    • 其中,由边和节点围成的面积称为区域。当计算区域数时,应该包括图外部未被围起来的那个区域。
    • 注意:在选择或多分支结构中,分支的汇聚处应有一个汇聚节点。

基本控制流图

在这里插入图片描述

复合逻辑下的控制流图

在这里插入图片描述
在这里插入图片描述

图矩阵

  • 图矩阵是控制流图的矩阵表示形式。
  • 有m个节点的控制流图矩阵,是一个m*m矩阵,A=(a(i, j)),其中a(i, j)是1,当且仅当从节点i到节点j有一条弧,否则该元素为0。
    在这里插入图片描述

环形复杂度

  • 概念
    • 环形复杂度也称为圈复杂度,它是一种为程序逻辑复杂度提供定量尺度的软件度量。
    • 环形复杂度的应用–可以将环形复杂度用于基本路径方法,它可以提供程序基本集的独立路径数量。
  • 计算环形复杂度的方法
    • 控制流图中区域的数量对应于环形复杂度。
    • 给定控制流图G的环形复杂度V(G),定义为V(G) = E-N+2,其中E是控制流图中边的数量,N是控制流图中的节点数量。
    • 给定控制流图G的环形复杂度V(G),也可定义为V(G) = P+1,其中P是控制流图G中判定节点的数量。

http://chatgpt.dhexx.cn/article/FsGKep0i.shtml

相关文章

控制流分析(Control Flow Analysis)

控制流(Control Flow)&#xff1a;操作的序列 控制流分析(Control Flow Analysis)&#xff1a;通过分析程序去发现每一过程内控制流层次结构。 控制流分析的原因&#xff1a; 控制流分析(CFA)能够帮助我们理解控制流图&#xff08;control-flow graphs,CFG&#xff09;的结构…

程序流图画法详解

程序流图一般是软件评测师考试中的第一道大题&#xff0c;同时也是必考大题&#xff0c;多层嵌套的循环程序绘制流程图时十分繁琐&#xff0c;本人在经过练习真题以及查阅资料后有了一些绘制控制流图的小经验&#xff0c;如有不对请指出。下面以2017年的软件评测师下午第一套真…

对Python控制流图(Control Flow Graph)-(CFG)的一些探索

对Python控制流图&#xff08;Control Flow Graph&#xff09;-&#xff08;CFG&#xff09;的一些探索 粗浅的了解 1.定义 控制流图(Control Flow Graph, CFG)也叫控制流程图&#xff0c;是一个过程或程序的抽象表现&#xff0c;是用在编译器中的一个抽象数据结构&#xff…

中间表示- 控制流图

基本概念 基本块&#xff1a;是语句的一个序列&#xff0c;从第一条执行到最后一条 不能从中间进入&#xff0c;不能从中间退出&#xff0c;即跳转指令只能出现在最后 控制流图&#xff1a;控制流图是一个有向图G(V&#xff0c;E) 节点V&#xff1a;是基本块边E&#xff1a…

控制流图分类

The if Statement if (x < y) {y 0;x x 1; } else {x y; } if (x < y) {y 0;x x 1; } The if-return Statement if (x < y) {return; } print (x); return; 注意&#xff1a;2到3 没有边 while and for Loops x 0; while (x < y) {y f (x, y);x x …

【浅析】程序分析中的数据流图(data flow graph)和控制流图(control flow graph)

文章目录 前言1、data flow graphs2、Control Flow Graph小结 前言 创作开始时间&#xff1a;2021年4月9日09:17:11 如题。看了一些网页文献&#xff0c;大概对这两种流图有了一定的理解&#xff0c;这里简单地记录一下&#xff0c;尤其是一些例子&#xff0c;感觉比较直观。…

软件测试之控制流图以及环形复杂度独立路径求解问题

首先需要明确的是&#xff0c;控制流图并不等于流程图&#xff0c;可以理解为控制流图的出现是为了后续的环形复杂度的计算和写出独立路径和配以相应的测试用例。 所以控制流图是核心&#xff0c;画图的时候务必谨慎再谨慎&#xff0c;要不然可能你后面的全部崩盘。 控制流图考…

【程序分析】函数调用图 | 控制流图 | 过程间控制流图 | 数据流图 | 值流图

CG&#xff08;call graph&#xff09;和CFG&#xff08;control-flow graph&#xff09;都是表示程序控制流的有向图。 1 函数调用图&#xff1a;CG&#xff08;call graph&#xff09; 一个CG是表示整个程序中方法&#xff08;函数&#xff09;之间调用关系的图&#xff0c…

LLVM CFG/DFG控制流图和数据流图可视化

1.引言 由于最近在学习数据流分析的相关知识&#xff0c;记录一下利用LLVM生成CFG和DFG的学习过程&#xff0c;参考文献和网址放在文章末尾。 2.实验环境 操作系统&#xff1a;Ubuntu 20.04.3 LTS 64bit&#xff1b; 硬件设备&#xff1a;Intel Celeron(R) CPU N34…

控制流图、圈复杂度

继续上次的测试作业&#xff0c;学习完程序插装的概念&#xff0c;今天学习测试的静态分析方法&#xff1a;绘制控制流图与计算圈复杂度。 一、控制流图&#xff1a; 一个过程或程序的抽象表现&#xff0c;常以数据结构链的形式表示。 二、圈复杂度&#xff1a; 复杂度越高&…

软件评测师必考题-控制流图

控制流图的基本知识 首先我们得清楚控制流图中的几个判断循环是如何表示的&#xff1a; 判断节点的嵌套 清楚了上面表示方法&#xff0c;你还是很难画出复杂的控制流图&#xff0c;而软考的控制流图往往是2个或多个判断节点嵌套在一起。其实只要把嵌套的节点想象成被嵌套节点…

软件中级-控制流图基本知识

软件中级-控制流图基本知识 什么是控制流图&#xff1f; 控制流图(Control Flow Graph, CFG)也叫控制流程图&#xff0c;是一个过程或程序的抽象表现&#xff0c;是用在编译器中的一个抽象数据结构&#xff0c;代表了一个程序执行过程中会遍历到的所有路径。 控制流图中包含…

程序控制流图

基本符号 ps&#xff1a;请将线看成弧线[doge] 顺序结构 if选择结构 while循环结构 case多分支结构 控制流图由节点和控制流线&#xff08;弧&#xff09;两种符号组成。 结点以标有编号的圆圈表示&#xff0c;用于表示程序流程图中矩形框、菱形框的功能&#xff0c;是一…

控制流图怎么画

一、什么是控制流图&#xff1f; 控制流图(Control Flow Graph, CFG)也叫控制流程图&#xff0c;是一个过程或程序的抽象表现&#xff0c;是用在编译器中的一个抽象数据结构&#xff0c;由编译器在内部维护&#xff0c;代表了一个程序执行过程中会遍历到的所有路径。它用图的形…

软工——各种图

目录 一.因果图二.控制流图三.程序流程图四.数据流图数据流数据流图的画法&#xff1a;由简入繁父图子图平衡保持数据守恒数据字典 五.N-S盒图六.PAD盒图七.操作状态图八.用例图、活动图、顺序图九.类图十.Jackson图十一.IPO图 一.因果图 因果图法&#xff1a;是一种利用图解法…

软件测试之控制流图

为了应对软件工程考试&#xff0c;本文对控制流图常见考法进行整理&#xff0c;主要是针对软件评测师的题型来整理。 什么是控制流图 控制流图是一个过程或程序的抽象表现&#xff0c;常以数据结构链的形式表示。简称流图&#xff0c;是对程序流程图进行简化后得到的&#xf…

控制流图(Control Flow Graph)-(CFG)

1.定义 百度百科&#xff1a; 控制流图(Control Flow Graph, CFG)也叫控制流程图&#xff0c;是一个过程或程序的抽象表现&#xff0c;是用在编译器中的一个抽象数据结构&#xff0c;由编译器在内部维护&#xff0c;代表了一个程序执行过程中会遍历到的所有路径。它用图的形式…

【大学生软件测试基础】白盒测试 - 控制流图 - 01

任务1、画出程序流程图&#xff1b; 任务2、画出控制流图&#xff1b; 任务3、根据程序环形复杂度的计算公式&#xff0c;求出程序路径集合中的独立路径数目&#xff1b; 任务4、根据环形复杂度的计算结果&#xff0c;源程序的基本路径集合中有多少条独立路径&#xff1b; …

控制流图(Control Flow Graph, CFG)

The if Statement if (x < y) {y 0;x x 1; } else {x y; } if (x < y) {y 0;x x 1; } The if-return Statement if (x < y) {return; } print (x); return; 注意&#xff1a;2到3 没有边 while and for Loops x 0; while (x < y) {y f (x, y);x x …

C语言之美——平方根倒数快速计算

C语言之美——平方根倒数快速计算 前言 由于特殊原因&#xff0c;陆陆续续接触陀螺仪很长一段时间&#xff0c;对于各种解析算法的运算速率有了切身体会&#xff0c;不断追求更快、更准。最近&#xff0c;发现了一份比较特殊的平方根倒数速算法&#xff0c;一下子来了兴趣&am…