软件测试 8(结构性测试) -- 路径测试

软件测试专栏
上一篇主目录 下一篇

【前言】


1 简介

结构性测试方法
基于被测程序的源代码,支持严格定义、数学分析和精确度量,是白盒测试。

程序图
给定采用命令式程序设计语言编写的一段程序,其程序图是一种有向图,图中的节点表示语句片段(if-than-else中的if),边表示控制流。

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

2 DD路径&DD路径图

DD路径
决策到决策路径,从决策语句的“出路开始”,到下一个决策语句的“入路”结束。这种序列中没有内部分支,因此对应节点像排列起来的一行多米诺骨牌,当第一张牌倒后,序列中其他牌 也会倒下。
路径称为:起始和终点不同,每个节点的入度和出度都是1 。
在这里插入图片描述
在这里插入图片描述
DD路径图
有向图,节点是表示其程序图 的DD路径,边表示连续DD路径之间的控制流。一种压缩图。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
练习:
在这里插入图片描述
在这里插入图片描述

3 覆盖测试指标及方法

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

当通过一组测试用例满足DD路径覆盖要求时,可以发现全部缺陷中的大约85%

c0语句覆盖:
如果节点对应完整语句,则只执行判断的一个选项就满足语句覆盖准则。语句覆盖是指设计若干个测试用例,当将它们作用于被测程序后,程序中的每一条可执行语句至少被执行一次。(由于程序图来源于程序代码,语句覆盖与节点覆盖相同)

C1指标
要求覆盖每条DD路径。判定覆盖也称为分支覆盖,是指设计一组测试用例,当它们作用于被测软件时,程序中每个判定的取真分支和取假分支至少各执行一次。判定覆盖等同于边覆盖。

C1p判定/分支覆盖
需要判断每个分支的所有情况。条件语句覆盖真假,case语句覆盖每个子句

C1与C1p的区别
对于if-then语句,c1只覆盖真分支,而c1p覆盖真假分支

Cd是数据流测试
DD路径对偶之间最常用的依赖关系是定义/引用关系,其中一个变量在一个DD路径中被定义,在另一个DD路径中被引用。简单DD路径覆盖测试可能不会遍历这些关系,因此更深的缺陷类不会被发现。

Ccmcc条件覆盖
不是直接遍历判断到其真或假分支,而应该研究可能出现分支的不同方式。条件覆盖是指设计足够多的测试用例,当它们作用于被测软件后,程序中每个判定内的每个条件的各种可能取值至少被执行一次。条件覆盖关注的是更为细致的条件取值情况,而不仅仅是整个判定的取值。
如:三个简单条件的复合条件If(A>5 and B!=10 andC<100)会有八行(2的3次方),产生八个测试用例
(A>5,B!=10,C<100)、(A>5,B!=10,C>=100)、(A>5,B = =10,C<100)、(A>5,B= =10,C>100)(A<5,B!=10,C<100)、(A<5,B!=10,C>=100)、(A<5,B= =10,C<100)、(A<5,B==10,C>100)

判定-条件覆盖是判定覆盖和条件覆盖的结合,要求设计一组测试用例,针对被测程序运行完这些测试用例后,不仅程序中每个判定的各种取值至少被执行一次,而且每个判定中的每个条件的各种取值也至少被执行一次。

条件组合覆盖是指设计足够多的测试用例,运行被测软件后,程序中每个判定的所有条件的可能取值组合都至少被执行一次。

CiK循环覆盖
三种:

  • 串联循环是不相交的简单循环序列
  • 嵌套循环是一个循环包含在另一个循环中的循环
  • 复杂循环,如果跳转到某个循环内(或跳转出),而这个分支位于其他循环的内部,就是复杂循环
    -在这里插入图片描述

每个循环都包含一个判断,并且需要测试判断的两个分支:

  • 一个遍历循环
  • 另一个退出(或不进入)循环

采用经过修改的边界值方法,循环指数按最小值、一般值和最大值给出

循环测试的路径选择

  • 1.简单循环(边界值方法)
    1)零次循环:从循环入口到出口
    2)一次循环:检查循环的初始值
    3)二次循环:检查初始值+1
    4)m次循环:检查多次循环
    5)最大次数循环-1
    6)最大次数循环
    7)最大次数+1
  • 2.嵌套循环
    1)对最内层循环做简单循环的全部测试,其他层的循环变量置为最小值
    2)逐步外推,对其外面的一层循环进行简单循环测试,内层取典型值,当前循环的所有外层取最小值
    3)反复进行,直到所有各层循环测试完毕
    4)对全部各层循环同时取最小循环次数、同时取最大循环次数进行测试

4 基路径测试

基路径:对应于测试来说,所有的程序路径认为是一个集合,那么在这些路径当中必然会存在一个最小路径的集合,我们称之为基路径
在这里插入图片描述
在这里插入图片描述
线性独立路径数是:V(G)=e-n+2p=10-7+2*1=5
e:边数 n:节点数 p:连接区域数
由于圈复杂度为5,所以有5条独立路径
用节点序列表示的路径:
p1:A,B,C,G
p2:A,B,C,B,C,G
p3:A,B,E,F,G
p4:A,D,E,F,G
p5:A,D,F,G

在这里插入图片描述

5 McCabe算法

—基线方法
McCabe的算法,用于确定基路径集合。不要求唯一基

步骤1:首先从DD-路径图的首节点出发,到末节点结束,寻找一条最长的路径记录下来,称为基线路径
步骤2:然后对于基线路径中出现分支结构的节点转移到另外一条路径由此产生新路径
步骤3:重复步骤2的过程直到没有新路径加入,即所有判断节点都“翻转”一次
步骤4:分析所产生的所有路径,排除那些没有可能的路径,剩余的就是基路径

例子:
在这里插入图片描述
步骤1:首先从DD-路径图的首节点出发,到末节点结束,寻找一条最长的路径记录下来p1. A、B、C、B、E、F、G 的路径为基线
步骤2:然后对于出现分支结构的节点转移到另外一条路径由此产生新路径这条路径上的第一个判断节点(外度>=2)是节点A,因此对于下一个基路径,要经过边2,而不是边1;p2. A、D、E、F、G
步骤三:对于下一条路径,可以选第二条路径,取节点D的另一个判断分支,得到路径:p3. A、D、F、G
步骤四:对B、C进行翻转,得到如下2条路径:p4. A、B、E、F、G 。p5. A、B、C、G

三角形问题应用McCabe算法
在这里插入图片描述
如果经过节点C,则必须经过节点H
如果经过节点D,则必须经过节点G
在这里插入图片描述
在这里插入图片描述
压缩构造
在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值