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

白盒测试概念

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

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

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

语句覆盖
  • 设计若干条测试用例,使程序中每条可执行语句(所有的方框)至少执行一次。
判定覆盖(分支覆盖)
  • 设计测试用例,使程序中的每个逻辑判断的取真和取假的分支至少经历一次。无法确定判定内部条件的错误。
条件覆盖
  • 设计若干测试用例,使程序的每个判定中的每个条件的可能取值至少满足一次。
    在这里插入图片描述
    在这里插入图片描述
判定-条件覆盖
  • 使判定中每个条件的可能取值至少满足一次,并且使每个判定分支至少执行一次。
  • 同时满足判定、条件两种覆盖标准。
  • 缺点在于没有考虑两个条件的组合情况。
    在这里插入图片描述
条件组合覆盖
  • 使得每个判断表达式中条件的各种可能组合都至少出现一次。
    在这里插入图片描述
    在这里插入图片描述
路径覆盖
  • 设计足够多的测试用例,覆盖程序中的每条可能路径。
  • 上述满足条件组合覆盖的测试用例不能覆盖路径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中判定节点的数量。
  • 30
    点赞
  • 176
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值