白盒测试(几种覆盖方法)

  1. 语句覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每一个语句至少执行一次,其覆盖标准无法发现判定中逻辑运算的错误;
  2. 判定覆盖<又叫分支覆盖率>是指选择足够的测试用例,使得运行这些测试用例时,每个判定的所有可能结果至少出现一次,但若程序中的判定是有几个条件联合构成时,它未必能发现每个条件的错误;
  3. 条件覆盖是指选择足够的测试用例,使得运行这些测试用例时,判定中每个条件的所有可能结果至少出现一次,但未必能覆盖全部分支;
  4. 判定/条件覆盖是使判定中每个条件的所有可能结果至少出现一次,并且每个判定本身的所有可能结果也至少出现一次;
  5. 修正条件判定覆盖满足条件与判定覆盖,并且需要确定每个条件能够影响到包含的判定的结果。
  6. 条件组合覆盖是使每个判定中条件结果的所有可能组合至少出现一次,因此判定本身的所有可能解说也至少出现一次,同时也是每个条件的所有可能结果至少出现一次;
  7. 路径覆盖是每条可能执行到的路径至少执行一次;
其中语句覆盖是一种最弱的覆盖,判定覆盖和条件覆盖比语句覆盖强,满足判定/条件覆盖标准的测试用例一定也满足判定覆盖、条件覆盖和语句覆盖,条件组合覆盖是除路径覆盖外最强的,路径覆盖也是一种比较强的覆盖,但未必考虑判定条件结果的组合,并不能代替条件覆盖和条件组合覆盖
不论那种覆盖方法,都不能保证程序的正确性。
路径和条件覆盖区别:
1、条件覆盖
2、判定覆盖
3、条件判断覆盖
4、修改条件判定覆盖
判定表达式:a>1 or b>1
     用判定覆盖设计的测试数据:
          a=5 (判定表达式的值为“真”)
          a=0 (判定表达式的值为“假”)
          这里不需要管b的取值,就已经满足判定覆盖的条件了。
     用条件覆盖设计的测试数据:
           a=5 (条件a>1的值为“真”)
           a=0(条件a>1的值为“假”)
           b=5 (条件b>1的值为“真”)
          b=0 (条件b>1的值为“假”)
判定覆盖
 
修改条件判定覆盖:100%mc/dc覆盖所需的最少测试用例数目?
画控制流图
 
判定条件覆盖是设计足够的测试用例,得使判断中每个条件的所有可能取值至少执行一次,同时每个判断本身所有可能结果也至少执行一次。缺点是忽略了条件的组合情况。
一个判定包括两个条件如下
y>1andz=0
  一组符合判定/条件覆盖的用例需要满足下面
 
  1.使得判定为真
  2.使得判定为假
  3.使得y>1
  4.使得y<=1
  5.使得z=0
  6.使得z!=0
条件组合覆盖:
注:按位与:a&b是把a和b都转换成二进制数然后再进行与的运算;
逻辑与:a&&b就是当且仅当两个操作数均为 true时,其结果才为 true;只要有一个为零,a&&b就为零。
修改条件判断覆盖
编辑
本词条缺少信息栏、名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!
修改条件/判断覆盖(Modifiedcondition/decisioncoverage)简称MC/DC,是用在飞航安全软件文件DO-178B的白箱测试方式,可以判断A等级的软件是否有经过适当的软件测试。
修改条件/判断覆盖(Modifiedcondition/decisioncoverage)简称MC/DC,是用在飞航安全软件文件DO-178B(英语:DO-178B)的白箱测试方式,可以判断A等级的软件是否有经过适当的软件测试。
  依照修改条件/判断覆盖的准则,测试过程中以下条件至少需成立一次。
  每一个判断的所有可能结果都出现过
  每一个判断中所有条件的所有可能结果都出现过
  每一个进入点及结束点都执行过
  判断中每一个条件都可以独立的影响判断的结果
  DO-178B中指定会影响飞机起飞及降落安全性的软件(A等级软件),需满足修改条件/判断覆盖的代码覆盖测试。
有两种coverage.一种是对需求的覆盖,一种是对代码的覆盖。对代码的覆盖包括语句覆盖、分支覆盖、条件覆盖、分支条件覆盖、LSACJ覆盖、MC/DC覆盖、路径覆盖等。
MC/DC(修订的条件/判定覆盖)(Modified Condition Decision Coverage)准则是一种实用的软件结构覆盖率测试准则, 已被广泛地应用于软件验证和测试过程中. 修正条件判定覆盖方法要求在一个程序中每一种输入输出至少得出现一次,在程序中的每一个条件必须产生所有可能的输出结果至少一次,并且每一个判定中的每一个条件必须能够独立影响一个判定的输出,即在其他条件不变的前提下仅改变这个条件的值,而使判定结果改变.
condition 和 decision 的概念:
if A or B and C then
   Statement;
else
   Statement2;
A,B,C都是一个条件,而(A or B and C)叫一个Decision,如果是判定覆盖的话只需两个case就能覆盖,就是让这个decision为true和false各一次就能达到即为 0 1 1 ,  0 1 0
如果是MC/DC的话就得四个case,而且只比条件数目多一个而已,怎么计算的呢?
定义: 在每个判定中的每个条件都曾独立的影响判定的结果至少一次, (独立影响意思是在其他的条件不变的情况下,改变一个条件);
总结一句:每个条件对结果都独立起作用
比如A对结果起作用的话, B 必须为 false, C必须为 true   -- 1  0  1 和 0 0 1,     这样结果就独立受A的值影响.
同理如果B对结果独立起作用的话,A必须为false, C必须为 true, 两种情况B为true,false各一. 即为 0  1  1  和  0 0 1
而C独立对结果起作用的话就是让(A or B) 为 true, 为了减少case, 上面的case 已经含有这样的case了,我们就取A为false,B为true, 这样c独体起作用的case为: 0  1  1 和 0 1 0
可以看出每个条件各走了一次true和false, 这样三个变量条件就会有六个case, 我们看出其中里面还有两个是重复的,
 
 
起作用 Case序号 A B C 结果
A 1 1 0 1 1
2 0 0 1 0
B 3 0 1 1 1
4 0 0 1 0
C 5 0 1 1 1
6 0 1 0 0
case 2 case 4重复, case 3 case5 重复,这样去掉两个 剩四个case,我们发现我们的判定里面的条件数为N, 那么这个判定就需N+1case,不信你试试!
 
评测师考试 实例:
规律
1.while为 for循环为是则回转循环,为否则继续判断下一个
2.多if和while,同字段则分支,不同字段条件则闭环顺序
3,无else,则看有木有同字段条件,没有则画空形成闭环,
4.嵌套条件分支,凡条件必有分支,无分支画空圈,寻找下一个同级条件,划线连续上
 
白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、路径覆盖和程序变异。
白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。其中逻辑覆盖包括语句覆盖判定覆盖条件覆盖、判定/条件覆盖、条件组合覆盖路径覆盖。六种覆盖标准发现错误的能力呈由弱到强的变化:
白盒测试法(高概率)
历史年份:2009--2016全考
2016年真题
考点
基本路径法,100%DC条件,控制流程图
 
09年真题:试题四(10 分) 
    阅读下列说明,回答问题 1 至问题 3,将解答填入答题纸的对应栏内。 
    [说明] 
    逻辑覆盖是通过对程序逻辑结构的遍历实现程序的覆盖,是设计白盒测试用例的主
    要方法之一。以下代码由 C 语言书写,请按要求回答问题。 
    void cal( int n ) 
    
    int g, s, b, q; 
    if ( ( n > 1000 ) && ( n < 2000 ) ) 
    
    g = n % 10; 
    s = n % 100 / 10; 
    b = n / 100 % 10; 
    q = n / 1000; 
    if( ( q + g ) == ( s + b ) ) 
    
    printf("%-5d", n); 
    
    
    printf(" "); 
    return; 
    
     [问题 1](3 分) 
    请找出程序中所有的逻辑判断语句。 
    [问题 2](4 分) 
    请分析并给出分别满足 100%DC(判定覆盖)和 100%CC(条件覆盖)时所需的逻
    辑条件。 
    [问题 3](3 分) 
    假设 n 的取值范围是 0 < n < 3000,请用逻辑覆盖法为 n 的取值设计测试用例,使用
    例集满足基本路径覆盖标准。 
    
    09年真题:试题四
      
    10年真题:
    逻辑覆盖法是设计白盒测试用例的主要方法之一,它是通过对程序逻辑结构的遍历
    实现程序的覆盖。针对以下由 语言编写的程序,按要求回答问题。 
    getit( int m ) 
    
    int i, k; 
    k = sqrt( m ); 
    for ( i = 2; i <= k; i++ ) 
    if ( m % i == 0 )  break; 
    if ( i >= k + 1 ) 
    printf( “%d is a selected number ”, m ); 
    else 
    printf( “%d is not a selected number ”, m ); 
    
    【问题 1】(分) 
    请找出程序中所有的逻辑判断子语句。 
    【问题 2】(分) 
    请将满足 100DC(判定覆盖)所需的逻辑条件填入下表。 
     
    【问题 3】(分) 
    请画出上述程序的控制流图,并计算其控制流图的环路复杂度 V(G)。假设函数 getit的参数 取值范围是 150 < m < 160,请使用基本路径测试法设计测试用例,将参数 m的取值填入下表,使之满足基本路径覆盖要求。
     10年真题答案:
    [问题 1] 
    逻辑判断子语句 
    i<=k 
    m%i==0 
    i>=k+1 
    [问题 2] 
满足 100%DC 时所需的逻辑条件 
 
     [问题 3] 
    控制流图 
     

    环路复杂度 VG=4 
    基本路径覆盖用例 
     
 
    2011真题
    
    

    2011真题答案:

 
    

    试题二(共15分)白盒测试--100%DC(判定覆盖)
    阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
    【说明】
    逻辑覆盖法是设计白盒测试用例的主要方法之一,它是通过对程序逻辑结构的遍历实现程序的覆盖。针对以下由C语言编写的程序,按要求回答问题。
Struct_ProtobufCIntRange{
   Int start_value;
   Unsigned orig_index;
};
typedef struct_ProtobufCIntRange ProtobufCIntRange;
in tint_range_lookup(unsigned n_ranges,const ProtobufCIntRange*ranges,int value){
  unsigned start,n;                                                         //1
  start=0;
  n=n_ranges;
  while (n>l) {                                                           //2
      unsigned mid=start+n/2;
    if(value<ranges[mid].start_value {                                     //3
        n=mid-start;                                                   //4
    }
    else if (value>=ranges[mid].start_value+
                  (int)(ranges[mid+1].orig_index-ranges[mid].orig_index)){   //5
        unsigned new_start=mid+1;                              //6
        n=start+n-new_start;
        start=new_start;
    }
    else                                   //7
      return(value-ranges[mid].start_value)+ranges[mid].orig_index;
    }
    if(n>0){                      //8
       unsigned start_orig_index=ranges[start].orig_index;
       unsigned range_size=ranges[start+1].orig_index-start_orig_index;
       if (ranges[start].start_value<=value
        &&value<(int)(ranges[start].start_value+range_size))         //9,10
        Return(value-ranges[start].start_value)+start_orig_index;      //11
    }
    Return -1;                                               //12
                                                           //13
    【问题1】(5分)
        请给出满足100%DC(判定覆盖)所需的逻辑条件。
    【问题2】(7分)
        请画出上述程序的控制流图,并计算其控制流图的环路复杂度V(G)
    【问题3】(3分)
        请给出【问题2】中控制流图的线性无关路径。
试题二分析
    本题考查白盒测试法的应用。
 
2012真题答案:
【问题1
    本问题考查白盒测试用例设计方法中的判定覆盖法。
    判定覆盖指设计足够的测试用例,使得被测程序中每个判定表达式至少获得一次“真”值和“假”值,从而使程序的每一个分支至少都通过一次。本题中程序有5个判定,所以满足判定覆盖一共需要10个逻辑条件,如下表所示。
编号 条件
1 n>l
2 value<ranges[mid].start_value
3 value>=ranges[mid].start_value+(int)(ranges[mid+1].orig_index-ranges[mid].orig_index)
4 n>0
5 ranges[start].start_value<=value&&value<(int)(ranges[start].start_value+range_size)
6 n<=l
7 Value>=ranges[mid].start_value
8 Value<=ranges[mid].start_value+(int)(ranges[mid+1].orig_index-ranges[mid].orig_index)
9 N<=0
10 ranges[start].start_value>value or value>=(int)(ranges[start].start_value+range_size)
 
    【问题2
    本问题考查白盒测试用例设计方法中的基本路径法。涉及到的知识点包括:根据代码绘制控制流图、计算环路复杂度。
    控制流图是描述程序控制流的一种图示方法。其基本符号有圆圈和箭线:圆圈为控制流图中的一个结点,表示一个或多个无分支的语句;带箭头的线段称为边或连接,表示控制流。基本结构如下所示:
 
        根据题中程序绘制的控制流图如下所示。其中要特别注意的是,如果判断中的条件表达式是复合条件,即条件表达式是由一个或多个逻辑运算符连接的逻辑表达式,则需要改变复合条件的判断为一系列之单个条件的嵌套的判断。本题程序中,if (ranges[start].start_value<=value&&value<(int)(ranges[start].start_value+range_size))这条判断语句中的判定由两个条件组成,因此在画控制流图的时候需要拆开成两条判断语句。
 
 
    环路复杂度用来衡量一个程序模块所包含的判定结构的复杂程度,数量上表现为独立路径的条数,即合理地预防错误所需测试的最少路径条数。环路复杂度等于图中判定结点的个数加1,图中判定结点个数为6,所以(G)7
【问题3
    本问题考查白盒测试用例设计方法中的基本路径法。
    [path1]1-2-8-9-10-11-13
[path2]1-2-8-9-10-11-12
[path3]1-2-8-9-10-12-13
[path4]1-2-8-9-12-13
[path5]1-2-3-4-2
[path6] 1-2-3-5-6-2
[path7 1-2-3-5-7-2
2013真题
 

 
2014真题

 
 
2015年
答案
2016真题
答案
 
 

原文地址:https://www.cnblogs.com/zyy98877/p/8513488.html