一、概述
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 }