白盒测试 您所在的位置:网站首页 软件测试组合覆盖写法 白盒测试

白盒测试

2024-06-29 22:35| 来源: 网络整理| 查看: 265

白盒测试-覆盖测试(六种覆盖方法) 测试覆盖率

测试覆盖率:用于确定测试所执行到的覆盖项的百分比。其中的覆盖项是指作为测试基础的一个入口或属性,比如语句、分支、条件等。测试覆盖率可以表示出测试的充分性,在测试分析报告中可以作为量化指标的依据,测试覆盖率越高效果越好。单覆盖率不是目标,只是一种手段。

测试覆盖率包括功能点覆盖率和结构覆盖率。 功能点覆盖率大致用于表示软件已经实现的功能与软件需要实现的功能之间的比例关系。 结构覆盖率包括语句覆盖率、分支覆盖率、循环覆盖率、路径覆盖率等。

逻辑覆盖法 根据覆盖目标的不同,逻辑覆盖又可以分为语句覆盖、判定覆盖、条件覆盖、判定\条件覆盖、组合覆盖和路径覆盖。 语句覆盖:选择足够多的测试用例,使得程序中的每个可执行语句至少执行一次。判定覆盖:通过执行足够的测试用例,使得程序中的每个判定至少都获得一次“真”值和“假”值,也就是使程序中的每个取“真”分支和取“假”分支至少均经历一次,也称为“分支覆盖”。条件覆盖:设计足够多的测试用例,使得程序中每个判定包含的每个条件的可能取值(真/假)都至少满足一次。判定/条件覆盖:设计足够多的测试用例,使得程序中每个判定包含的每个条件的所有情况(真/假)至少出现一次,并且每个判定本身的判定结果(真/假)也至少出现一次。----满足判定/条件覆盖的测试用例一定同事满足判定覆盖和条件覆盖。组合覆盖:通过执行足够的测试用例,使得程序中每个判定的所有可能的条件取值组合都至少出现一次。----满足组合覆盖的测试用例一定满足判定覆盖、条件覆盖和判定/条件覆盖。路径覆盖:设计足够多的测试用例,要求覆盖程序中所有可能的路径。 在这里插入图片描述 例题:

针对以下代码设计测试用例分别进行语句覆盖、判定覆盖、条件覆盖、判定\条件覆盖、组合覆盖和路径覆盖。

void DoWork(int x, int y, int z) { int k = 0,j = 0; if((x > 3) && (z j = x * y + 10; } j = j%3; } 语句覆盖:

要求对DoWork函数进行语句覆盖,只需要设计一个测试用例就可以覆盖程序中所有可执行语句。例如测试用例:x = 4 , y = 5 , z = 5,程序执行的路径为abd

分析:语句覆盖可以保证程序中每个语句都得到执行,但是不能够发现判定中录屏及运算的错误,即它并不是一种充分的检验方法。例如在第一个判定((x>3)&&(z5错写成y3 真值为T1,假值为-T1 ; z5 真值为T4,假值为-T4 要求对DoWork函数进行条件覆盖,即要使上述四个条件可能产生的8种情况至少满足一次,设计以下两条用例: 测试用例1:x = 4 , y = 5 , z = 5,执行路径abd,覆盖条件T1、T2、T3、T4,覆盖分支bd 测试用例2:x = 2 , y = 5 , z = 15,执行路径ace,覆盖条件-T1、-T2、-T3、-T4,覆盖分支ce

分析:在实际程序代码中,一个判定中通常都包含若干条件。条件覆盖的目的是设计若干测试用例,在执行被测程序后,要使每个判定中每个条件的可能值至少满足一次。上面这组测试用例不仅覆盖了4个条件的所有8种情况,而且将两个判定的分支都覆盖到了,所以也达到了判定覆盖。说明:以上测试用例同时满足了判定、条件覆盖,但并不是条件覆盖都能满足判定覆盖。比如以下测试用例: 测试用例3:x = 2 , y = 6 , z = 5 , 执行路径:acd,覆盖条件:-T1、T2、-T3、T4,覆盖分支cd 测试用例4:x = 4 , y = 5 , z = 15,执行路径acd,覆盖条件T1、-T2、T3、-T4,覆盖分支:cd 判定/条件覆盖

依然为DoWork函数哥哥判定哥哥条件取值加以标记; 要求对DoWork函数进行判定/条件覆盖,即要使得测试用例能够覆盖上述四个条件可能产生的8种情况以及4个判定分支,设计测试用例如下: 测试用例1:x = 4 , y = 5 , z = 5,执行路径abd,覆盖条件T1、T2、T3、T4,覆盖分支bd 测试用例2:x = 2 , y = 5 , z = 15,执行路径ace,覆盖条件-T1、-T2、-T3、-T4,覆盖分支ce

分析:看起来判定/条件覆盖测试了每个判定每个条件的取值,但实际上,编译器在检查含有多个条件的逻辑表达式时,某些情况下的某些条件将会被其他调暗劲所掩盖。所以判定/条件覆盖也不一定能够完全检查出逻辑表达式的错误。例如:第一个判定中使用的是短路与&&,必须要x>3和z3不成立,系统不会再检查z5这个条件的真假,那么也不会发现这个条件中是否存在错误。 组合覆盖

依然为DoWork函数哥哥判定哥哥条件取值加以标记; 要对DoWork函数进行组合覆盖,即要使设计的测试用例能覆盖每一个判定的所有可能的条件取值组合。设计测试用例如下: 测试用例1: x = 4 , y = 6 , z = 5,执行路径abd,覆盖条件T1、T2、T3、T4,判定一和判定二都为真; 测试用例2: x = 4 , y = 5 , z = 15,执行路径acd,覆盖条件T1、-T2、T3、-T4,判定一为假,判定二为真; 测试用例3: x = 2 , y = 6 , z = 5,执行路径acd,覆盖条件-T1、-T2、-T3、T4,判定一为假,判定二为真; 测试用例4: x = 2 , y = 5 , z = 15,执行路径ace,覆盖条件-T1、-T2、-T3、-T4,判定一和判定二都为假。

分析:上面的测试用例覆盖了所有的八种条件取值的组合,也覆盖了所有判定的真假分支,但是仍然没有覆盖到abe路径。 路径覆盖

要对DoWork函数进行路径覆盖,即使设计的测试用例能覆盖被测程序中所有可能的的路径。设计测试用例如下: 测试用例1: x = 4 , y = 6 , z = 5,执行路径abd,覆盖条件T1、T2、T3、T4, 测试用例2: x = 4 , y = 5 , z = 15,执行路径acd,覆盖条件T1、-T2、T3、-T4, 测试用例3: x = 2 , y = 5 , z = 15,执行路径ace,覆盖条件-T1、-T2、-T3、-T4, 测试用例4:x = 5 , y = 5 ,z = 5 ,执行路径abe,覆盖条件T1、T2、-T3、-T4。

分析:可以看出,满足路径覆盖不一定能够满足组合覆盖。说明,对于较简单的小程序,实现路径覆盖是可能做到的。但是如果程序中出现较多的判断和较多的循环,可能的路径数目将会急剧增长,要在测试中覆盖所有的路径是无法实现的。为了解决这个难题,只有把覆盖路径数量压缩到一定的限度内,比如程序中的循环体只执行一次。 在实际测试中,即使对于路径数很有限的程序已经做到路径覆盖,仍然不能保证被测试程序的正确性,还需要采用其他测试方法来进行补充。 测试覆盖准则

逻辑覆盖的出发点是合理的、完善的。所谓“覆盖,就是想要做到全面而无遗漏,但逻辑覆盖并不能真正做到无遗漏。

例如: if(x>3&&z=3&&z


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有