【准则化的思想】冷门知识点:数据流覆盖准则

语句/分支/路径覆盖这些控制流覆盖准则,背后的价值观是“被测程序的价值和风险集中在控制逻辑上”。还有另外一些程序,它们的价值和风险集中在数据计算上,这时候一个基本的想法是:如果程序变量的某个计算结果,没有在任何测试用例的执行过程中产生过效果,我们很难相信这个程序是正确的。从这种想法出发,可以定义数据流覆盖准则。

在程序的数据流结构里,主要的元素有三种:

  ① 定义节点,指的是流程图里某个变量被赋值的节点,比如:

  ② 使用节点,指的是里某个变量的值被引用的节点,比如:

  ③ 定义使用路径,指的是从一个定义节点到一个使用节点的路径,并且要求这条路径的起点和终点之间,没有其它的定义节点。

举个例子。被测程序代码如下:

  public void dataFlowTestDemo(int x, int y, int pow){    if (y >= 10) {      pow = y;    } else {      pow = -y;    }    int z = 1;    if (pow > 0) {      z = z * x;      pow--;      if (x >= 0) {        x--;      }      x = x * pow;    } else if (y < 0) {      z++;    } else {      z--;    }  }

在程序流程图中,用绿色背景代表pow变量的定义节点,黄色背景代表pow变量的使用节点:

从节点“pow = y”到节点“pow > 0”是一条定义使用路径;从节点“pow = y”到节点“z = z*x  pow--”也是一条定义使用路径;但是从节点“pow = y”到节点“x = x*pow”就不是一条定义使用路径,因为起点和终点之间有“pow--”这个定义节点​。

既然数据流结构的主要元素是定义节点、使用节点、定义使用路径,数据流覆盖准则主要就包括这样3种:全定义覆盖准则、全使用覆盖准则、全定义使用路径覆盖准则。

当然,在实际测试执行的时候,程序里的变量必须要“先定义再使用”。所以“全使用覆盖准则”不只要求覆盖所有使用节点,而且针对每一个使用节点,都要覆盖它跟所有定义节点的至少一条定义使用路径。可以说,全使用覆盖准则,实际上要求覆盖的是所有定义使用对。

这三种准则中,要求最高的是“全定义使用路径覆盖准则”,因为一个使用节点和一个定义节点之间,可能有不止一条定义使用路径,这个准则要求覆盖所有这些路径。

  • 15
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值