您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
浅析白盒测试中的逻辑覆盖测试
 
作者:u010233287
   次浏览      
 2020-12-8 
 
编辑推荐:
本文主要介绍了白盒测试的语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖、路径覆盖等相关内容。
本文来自于csdn,由火龙果软件Anna编辑、推荐。

在白盒测试中,逻辑覆盖测试是使用较多的方法。按照其对测试的有效程度,又将其划分为由弱到强的6种:语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖、路径覆盖。

在这里,不深究各个覆盖的优缺点,仅仅根据一个实际例子来看看如何写出6种覆盖的测试用例。


public void function(int a, int b, int c)
{
if ((a > 1) && (b == 0))
{
c /= a;
}
if ((a == 5) || (c > 1))
{
c += 1;
}
c = a + b + c;
}

为了分析的方便,我们将其对应的流程图画出来,如下:

图中A、B、C、D、E分别表示路径;并且记第一个判断为P1,记第二个判断为P2;一共有4个条件,我们记为1、2、3、4。接下来便正式开始分析:

一、语句覆盖:设计足够多的的用例来使程序中的可执行语句至少被执行一次。

我们可以看出如果程序按照A -> C -> E执行的话,那么就能满足语句覆盖。于是,P1和P2都必须为True。要使P1=True,可以取a=5(为了满足P2的a=5这个条件,其实这里只要满足a>1即可)、b=0。要使P2=True,可以取a=5(满足a>1即可)、c=6(假设在前面a不取5,则在此处必须注意c的取值应该大于a的取值。为什么?因为P1为true时会执行语句c=c/a,在P2中a=5这个条件不满足,要使整体为true,就必须满足c=c/a >1,则c>a)。

于是,测试用例为:

a = 5, b = 0, c = 6 //CE({P1=true, P2=true}、{T1, T2, T3, T4})

二、判定覆盖:设计足够多的用例来使程序中的每个判定的真、假分支至少被执行一次。

首先,必须清楚何谓一个判定。一个判定就是程序中一个if语句中的所有内容,对应到流程图中的一个菱形框。在该题中为P1、P2。

P1的两个分支为B和C,P2的两个分支为D和E,于是我们可以组合出BD,BE,CD,CE四条路径。根据定义,B、C、D、E在我们所取得用例中都必须至少出现一次,于是,我们可以取{BD、CE}或{BE、CD}。在这里,我们就取{BD、CE},对于CE,在语句覆盖中已经给出:a=5、b=0、c=6,对于BD,我们可以取a=1、b=0、c=1。

于是,测试用例为:

a = 5, b = 0, c = 6 //CE({P1=true, P2=true}、 {T1, T2, T3, T4})
a = 1, b = 0, c = 1 //BD({P1=false, P2=false}、{F1, T2, F3, F4})

三、条件覆盖:设计足够多的用例来使程序中每个判定中的每个条件的所有可能取值都至少取了一次。

首先,必须清楚何谓一个条件。一个条件就是一个if语句中的一个布尔表达式。在该题中,P1有2个条件(a>1、b==0),P2也有2个条件(a==5、c>1)。

P1中2个条件可以有4种组合[{a>1, b=0}、{a>1,b!=0}、{a<=1,b=0}、{a<=1,b!=0}],按照真假至少满足一次,我们取{{a=5,b=0}、{a=1,b=3}}。

P2中2个条件可以有4种组合[{a=5,c>1}、{a=5,c<=1}、{a!=5,c>1}、{a!=5,c<=1}],按照真假至少满足一次,我们取{{a=5,c=1}、{a=1,c=6}}。

于是,测试用例为:

a = 5, b = 0, c = 1 //CE({P1=true, P2=true}、{T1, T2, T3, F4})
a = 1, b = 3, c = 6 //BE({P1=false, P2=true}、{F1, F2, F3, T4})

四、判定-条件覆盖:设计足够多的用例来同时满足判定覆盖和条件覆盖。

首先,我们来看一下在判定覆盖和条件覆盖中设计的用例。会发现在判定覆盖中,条件2(b==0)只出现了取真分支;而在条件覆盖中,P2只出现了取true的情况。也就是说这两者均不满足判定-条件覆盖。

为了使上述两者满足判定-条件覆盖,我们只需简单修改一下即可。

于是,测试用例为:

//修改判定覆盖
a = 5, b = 0, c = 6 //CE({P1=true, P2=true}、 {T1, T2, T3, T4})
a = 1, b = 1, c = 1 //BD({P1=false, P2=false}、{F1, F2, F3, F4})

或者:

//修改条件覆盖
a = 2, b = 0, c = 1 //CD({P1=true, P2false}、 {T1, T2, T3, F4})
a = 1, b = 3, c = 6 //BE({P1=false, P2=true}、 {F1, F2, F3, T4})

五、条件组合覆盖:设计足够多的用例来使所有条件的可能组合都至少取了一次。

P1中2个条件可以有4种组合[{a>1, b=0}、{a>1,b!=0}、{a<=1,b=0}、{a<=1,b!=0}],我们可以取{{a=5, b=0}、{a=5, b=1}、{a=1, b=0}、{a=1, b=1}};

P2中2个条件可以有4种组合[{a=5,c>1}、{a=5,c<=1}、{a!=5,c>1}、{a!=5,c<=1}],我们可以取{{a=5, c=6}、{a=5, c=1}、{a=1, c=6}、{a=1, c=1}}。

于是,测试用例为:

a = 5, b = 0, c = 6 //CE({P1=true, P2=true}、 {T1, T2, T3, T4})
a = 5, b = 1, c = 1 //BE({P1=false, P2=true}、 {T1, F2, T3, F4})
a = 1, b = 0, c = 6 //BE({P1=false, P2=true}、 {F1, T2, F3, T4})
a = 1, b = 1, c = 1 //BD({P1=false, P2=false}、{F1, F2, F3, F4})

六、路径覆盖:设计足够多的用例来使程序中所有可能的路径都至少被执行一次。

所有可能的路径为:{BD、BE、CD、CE}。

对于BD,我们可以取{a=1, b=1, c=1};

对于BE,我们可以取{a=1, b=0, c=6};

对于CD,我们可以取{a=2, b=0, c=1};

对于CE,我们可以取{a=5, b=0, c=6}。

于是,测试用例为:

a = 1, b = 1, c = 1 //BD({P1=false, P2=false}、{F1, F2, F3, F4})
a = 1, b = 0, c = 6 //BE({P1=false, P2=true}、 {F1, T2, F3, T4})
a = 2, b = 0, c = 1 //CD({P1=true, P2=false}、{T1, T2, F3, T4})
a = 5, b = 0, c = 6 //CE({P1=true, P2=true}、 {T1, T2, T3, T4})

注:一般测试中,很难做到路径覆盖,对于此题,可以穷举出4条路径,可是如果在外层加一个循环的话,那么路径条数将呈现指数型增长。比如循环30次,那么路径条数将会是4^30(4的30次幂),要想做到路径覆盖是不可能的。

 
   
次浏览       
相关文章

微服务测试之单元测试
一篇图文带你了解白盒测试用例设计方法
全面的质量保障体系之回归测试策略
人工智能自动化测试探索
相关文档

自动化接口测试实践之路
jenkins持续集成测试
性能测试诊断分析与优化
性能测试实例
相关课程

持续集成测试最佳实践
自动化测试体系建设与最佳实践
测试架构的构建与应用实践
DevOps时代的测试技术与最佳实践
最新活动计划
LLM大模型应用与项目构建 12-26[特惠]
QT应用开发 11-21[线上]
C++高级编程 11-27[北京]
业务建模&领域驱动设计 11-15[北京]
用户研究与用户建模 11-21[北京]
SysML和EA进行系统设计建模 11-28[北京]
 
最新文章
大数据平台测试
微服务架构下的测试之道
从零开始掌握微服务软件测试
如何进行测试需求分析:从接收需求到用例设计
python_selenium自动化测试框架
最新课程
测试需求分析与测试用例设计
性能测试方法与技术
自动化测试框架设计高级实践
接口自动化测试方法与工具
软件测试方法与实践(贯穿案例)
更多...   
成功案例
某支付企业 单元测试与重构培训
北京 用户体验、可用性测试与评估
某军工研究单位 自动化测试方法、案例与工具
知名消费金融公司 探索性测试与测试分析
北京 航天科工某子公司 软件测试架构师
更多...