第4章 白盒测试

一、概述

1.白盒测试

2.控制流测试

二、代码覆盖

1.语句覆盖

2.判定覆盖

3.条件覆盖

4.条件组合覆盖

5.判定条件覆盖

6.循环覆盖

7.路径覆盖

二、McCabe圈复杂度

三、控制流测试练习

======================================================

练习:

1.白盒测试依据详细设计文档,利用不同的逻辑覆盖率达到某种程度的()。

2.软件测试只要做到语句覆盖和分支覆盖,就可以发现程序中的所有错误。()

3.以下哪项不是白盒测试的缺点()。

A.白盒测试投入较大,成本较高

B.白盒测试不验证规格的正确性

C.测试用例之间可能存在严重的冗余。

D.无法检查代码中遗漏的路径和数据敏感性错误

4.单元中的控制流,指的是程序中语句的()。

5.代码覆盖率是软件测试中的一种度量,描述程序中()被测试的比例和程度。

6.代码覆盖率包括()、判定覆盖、条件覆盖、条件组合覆盖、()、循环覆盖、路径覆盖。

7.语句覆盖是选择足够的测试用例,使得被测代码中()都至少执行一次。

8.判定覆盖是选择足够的测试用例,使得()的可能结果至少出现一次。

9.条件覆盖是选择足够的测试用例,使得判定中的()可能取值至少满足一次。

10.条件组合覆盖是选择足够的测试用例,使得每个判定中条件的()都至少出现一次。

11.if(A>0) && (B<0),请问使用判定条件覆盖法,需要准备哪些测试数据?

12.if(a or b) and c then,请问使用判定条件覆盖法,需要准备哪些测试数据?

13.对于循环路径来说,测试循环()次、1次、最大次和最大次+1。

14.对于带循环的函数来说,()覆盖是很困难的。

15.路径覆盖能够保证条件组合覆盖。()

16.已知一个简单的C#程序,代码如下。该程序接受一个整数输入,输出该整数的阶乘。(1)请设计测试用例,达到语句覆盖、分支覆盖、循环覆盖。(2)使用McCabe圈复杂度方法,设计测试用例。

static void Main(string[] args)
{
    int i, n, f;
    Console.Write("n=");
    n=Convert.ToInt32(Console.ReadLine());
    if(n<0)
    {
        Console.WriteLine("Invalid:{0}", n);
        n=-1;
     }
    else
    {
        f=1;
        for(i=1;i<=n;i++)
        {
            f *=i;
        }
       Console.WriteLine("{0}!={1}.", n, f);
     }
}

17.()用来度量基于控制流的程序单元复杂度。

18.McCabe圈复杂度,需要绘制一个描述当前被测试单元的()来度量圈复杂度。

19.McCabe圈复杂度的有向图中,节点代表入口、出口以及(),边代表()。

20.McCabe高圈复杂度的模块本质上来说不容易出错,不容易回归。

21.McCabe圈复杂度的数值等同于图中存在的(),也就是等同于你要想覆盖整个图所需要进行的测试次数。

22.已知被测对象为一个简单的C#程序,代码如下,它把十六进制字符输入转换到相应的整型数。

(1)使用语句、分支、条件、循环的全覆盖创建一套测试用例集合。

(2)计算McCabe复杂性,写出基本路径,并创建基本测试。

 1             string input = Console.ReadLine();
 2             char[] values = input.ToCharArray();
 3             uint hexnum, nhex;
 4             hexnum = 0;
 5             nhex = 0;
 6             foreach (char letter in values)
 7             {
 8                 switch (letter)
 9                 {
10                     case '0':
11                     case '1':
12                     case '2':
13                     case '3':
14                     case '4':
15                     case '5':
16                     case '6':
17                     case '7':
18                     case '8':
19                     case '9':
20                         /* Convert a decimal digit */
21                         nhex++;
22                         hexnum *= 0x10;
23                         hexnum += Convert.ToUInt32(letter - '0');
24                         break;
25                     case 'a':
26                     case 'b':
27                     case 'c':
28                     case 'd':
29                     case 'e':
30                     case 'f':
31                         /* Convert a lower case hex digit */
32                         nhex++;
33                         hexnum *= 0x10;
34                         hexnum += Convert.ToUInt32(letter - 'a' + 0xa);
35                         break;
36                     case 'A':
37                     case 'B':
38                     case 'C':
39                     case 'D':
40                     case 'E':
41                     case 'F':
42                         /* Convert a lower case hex digit */
43                         nhex++;
44                         hexnum *= 0x10;
45                         hexnum += Convert.ToUInt32(letter - 'A' + 0xA);
46                         break;
47                     default:
48                         /* Skip any non-hex characters */
49                         break;
50                 }
51             }
52             Console.WriteLine("Got {0} hex digits: {1:X}
", nhex, hexnum);
53 
54 
55             Console.WriteLine("now is:{0}", hexnum);
56         }
57     }
原文地址:https://www.cnblogs.com/meetyy/p/3762345.html