zd-培训教材-白盒测试技术-v10..

上传人:今*** 文档编号:106886808 上传时间:2019-10-16 格式:PPT 页数:51 大小:551.50KB
返回 下载 相关 举报
zd-培训教材-白盒测试技术-v10.._第1页
第1页 / 共51页
zd-培训教材-白盒测试技术-v10.._第2页
第2页 / 共51页
zd-培训教材-白盒测试技术-v10.._第3页
第3页 / 共51页
zd-培训教材-白盒测试技术-v10.._第4页
第4页 / 共51页
zd-培训教材-白盒测试技术-v10.._第5页
第5页 / 共51页
点击查看更多>>
资源描述

《zd-培训教材-白盒测试技术-v10..》由会员分享,可在线阅读,更多相关《zd-培训教材-白盒测试技术-v10..(51页珍藏版)》请在金锄头文库上搜索。

1、,武汉中地数码科技有限公司 张毅 V1.0 2006-06,白盒测试技术,正确的态度,在理想的情况下,我们会测试程序的所有可能执行情况。然而在大多数情况下,这几乎是不可能的。对一个复杂的应用程序进行完全的测试,将耗费大量的时间和人力资源,以至于在经济上是不可行的。 要成功的测试一个软件应用程序,测试人员需要有正确的态度(愿景)。在某些情况下,测试人员的态度可能比实际的测试过程本身还要重要。,什么是软件测试?,软件测试执行效果不好,其中一个主要原因在于大多数的程序员一开始就把“测试”这个术语的定义搞错了。,“测试”究竟是什么?,“测试”术语的错误理解,软件测试就是证明软件不存在错误的过程。 软件

2、测试的目的在于证明软件能够正确完成其预定的功能。 软件测试就是建立一个“软件做了其应该做的”信心的过程。,软件测试更为合适的定义,测试是为发现错误而执行程序的过程,不正确的理解带来的问题1,人类的行为总是倾向于具有高度目标性。 如果我们的目的是证明程序中不存在错误,那就会在潜意识中倾向于实现这个目标;也就是说,我们会倾向于选择较少导致程序失效的测试数据。 另一方面,如果我们的目标在于证明程序中存在错误,我们设计的测试数据就有可能更多的发现问题。,“成功的测试”和“不成功的测试”,没有发现错误的测试用例是一次“成功的测试”? 发现了错误的测试用例是一次“不成功的测试”?,“成功的测试”,如果在测

3、试某段程序时发现了错误,而且这些错误是可以修复的,就将这次合理设计并得到有效执行的测试称作是“成功的”。如果本次测试可以最终确定再无其他可查出的错误,同样也被称作是“成功的”。,“不成功的测试”,所谓“不成功的”测试,仅指未能适当的对程序进行检查,在大多数情况下,未能找出错误的测试被认为是“不成功的”,这是因为认为软件中不包含错误的观点基本上是不切实际的。,不正确的理解带来的问题2,“软件测试就是证明软件不存在错误的过程”,这个定义带来的第二个问题:对于几乎所有的程序,甚至是非常小的程序, 这个目标实际上也是无法达到的。,不正确的理解带来的问题3,“软件测试就是证明软件做了其该应该做的的过程”

4、,此类定义所带来的第三个问题是,程序即使能够完成预定的功能,也仍然可能隐藏错误。 程序可能做了其不应该做的,这也是程序中的错误。,白盒测试,白盒测试检查程序的内部结构。这种测试策略对程序的逻辑结构进行检查,从中获取测试数据。 为了完全测试程序,理想的情况是将程序中所有可能的控制流路径至少执行一次。这种方法通常称为穷举路径测试。,穷举路径测试,穷举路径测试即完全的测试? 程序中不同逻辑路径的数量可能达到天文数字。 即使可以测试到程序中的所有路径,程序可能仍然存在着错误: 即使是穷举路径测试也决不能保证程序符合其设计规范。 程序可能会因为缺少某些路径而存在问题。穷举路径测试当然不能发现缺少了哪些必

5、需路径。 穷举路径测试可能不会暴露数据敏感错误。,例1,a,b,左图描述的是一个有着10-20行程序的语句,包含一个迭代20次的DO循环。 从 ab之间所有不同路径的数量,大约是1014: 520 + 519 + + 51,设计测试用例,软件测试中最重要的因素是设计和生成有效的测试用例。由于时间和成本的约束,软件测试中最关键的问题是: 在所有可能的测试用例中,哪个子集最有可能发现最多的错误?,测试用例设计方法,黑盒测试 等价类划分 边界值分析 因果图分析 错误猜测,白盒测试 语句覆盖 判定覆盖 条件覆盖 判定/条件覆盖 多重条件覆盖,例2(Code),public void foo(int a

6、, int b, int x) if (a1 ,例2(流程图),a1 AND b=0,x = x/a,a=2 OR X1,x = x +1,A,C,B,E,D,Y,Y,N,N,语句覆盖,语句覆盖准则要求编写足够的测试用例,使得程序中每条语句都被执行一次。 通过编写单个的测试用例遍历程序路径ACE,可以执行到每一条语句。 在A点处设置 a = 2, b = 0, x = 3 ,每条语句可以执行一次。,语句覆盖的不足,语句覆盖准则是合理的白盒测试中较弱的准则。 在本例中,存在以下不足: 1.如果第一个判断应该是“或”,而不是“与”;不能发现该错误; 2.如果第二个判断应该是“x 0”,而不是“x

7、1”;不能发现该错误; 3.程序中存在一条 x 未发生改变的路径:ABD,如果这是个错误,它也不会被发现。,判定覆盖,判定覆盖或分支覆盖较强一些的准则。该准则要求必须编写足够的测试用例,使得每一个判断都至少有一个为真和为假的输出结果。换句话说就是每条分支路径都必须至少遍历一次。 当程序中包含有多重选择的判断时(如包含switch case 语句的C/C+程序),判定/分支覆盖要求将所有判断的每个可能结果都至少执行一次,以及将程序或子程序的每个入口点都至少执行一次。,判定覆盖例子,在例2流程图中,两个涵盖了路径ACE和ABD,或涵盖了路径ACD和ABE的测试用例就可以满足判定覆盖的要求。 如果选

8、择后一种情况,两个测试用例的输入是: a = 3, b = 0, x = 3 a = 2, b = 1, x = 1,判定覆盖的不足,判定覆盖是一种比语句覆盖更强的准则,但仍然存在相当不足。 在本例中: 1.我们仅有50的可能性遍历到那条 x 未发生变化的路径。 2.如果第二个判断存在错误(例如把 x 1 写成了 x 1),那么前面例子中的两个测试用例都无法找出这个错误。,条件覆盖,比判定覆盖更强一些的准则是条件覆盖。在条件覆盖情况下,要编写足够的测试用例以确保将一个判断中的每个条件的所有可能的结果至少执行一次。 同覆盖测试一样,为保证让每条语句都执行到,对这条准则的补充就是对程序和子程序的每

9、个入口点都至少调用一次。,条件覆盖例子,在例2中有4个条件: a 1、b = 0、a = 2 及 x 1 因此需要足够的测试用例,使得在点 A 处出现 a 1, a 0 的情况,在点 B 处出现 a = 2, a 2, x 1, x = 1 的情况。 用例及其遍历的路径如下: a = 2, b = 0, x = 4 ACE a = 1, b = 1, x = 1 ABD,条件覆盖和判断覆盖对比,条件覆盖通常要比判定覆盖更强一些。因为,条件覆盖可能(但并不总是这样)会使判断中的每个条件都取到两个结果(“真”和“假”),而判定覆盖却做不到这一点。 例:DO k=0 to 50 WHILE (J+K

10、QUEST) 在上述语句中,存在一个两重分支(执行循环体,或者跳出循环体)。使用判定覆盖测试,将k=0执行到k=51即可满足该准则。使用条件覆盖准则,就需要设计一个测试用例为J+KQUEST 产生一个为假的结果。,条件覆盖不足,条件覆盖并不总是满足判定覆盖准则。 例如,测试判断条件 IF (A & B),条件覆盖准则将要求编写两个测试用例:A 为真,B为假;A为假,B为真。但这两个测试用例并不能使IF 语句中的THEN 被执行到。,条件覆盖不足,例2中,如果选用如下测试用例: a = 1, b = 0, x = 3 ABE a = 2, b = 1, x = 1 ABE,这两个可选的测试用例涵

11、盖了全部的条件结果,却仅涵盖了四个判断结果中的两个(这两个测试用例都涵盖到了路径ABE,因而不会执行第一个判断结果为真的路径,以及第二个判断结果为假的路径)。,判定/条件覆盖,判定/条件覆盖准则要求设计出充足的测试用例,将一个判断中的每个条件的所有可能的结果至少执行一次,将每个判断的所有可能的结果至少执行一次,将每个入口点都至少调用一次。,判定/条件覆盖例子,例2中有4个条件:a 1、b = 0、a = 2 及 x 1 ;有两个判断,第一个判断的分支为B、C;第二个判断的分支为D、E。 因此需要足够的测试用例,使得在点 A 处出现 a 1, a 0 的情况,在点 B 处出现 a = 2, a

12、2, x 1, x = 1 的情况;并覆盖全部的分支路径。 用例及其遍历的路径如下: 1. a = 2, b = 0, x = 4 ACE 2. a = 1, b = 1, x = 1 ABD,判定/条件覆盖不足,判定/条件覆盖准则的一个缺点是尽管看上去所有条件的所有结果似乎都执行到了,但由于有些特定的条件会屏蔽掉其他的条件,常常不能全部都执行到。,例2(机器码流程图),a 1,b = 0,a = 2,x 1,x = x/a,x = x+1,Y,Y,Y,Y,N,N,N,N,H,I,J,K,1. a = 2, b = 0, x = 4 ACE 2. a = 1, b = 1, x = 1 ABD

13、,A,C,B,E,D,多重条件覆盖,多重条件覆盖准则要求设计出充足的测试用例,将每个判定中的所有可能的条件结果的组合,以及所有的入口点都至少执行一次。,例3,NOTFOUND=TRUE; DO I=1 to TABSIZE WHILE (NOTFOUND); / Search TABLE searching logic END,针对上面的伪代码程序,要测试四种情况: 1. I TABSIZE,并且NOTFOUND为真; 4. I TABSIZE,并且NOTFOUND为假;,多重条件覆盖例子,针对例2,测试用例必须覆盖以下8种组合: 1. a1, b=0 5. a=2, x1 2. a1, b0

14、 6. a=2, x2, x1 4. a0 8. a2, x=1 以下4组测试用例可以覆盖上述8种组合: a=2, b=0, x=4 ACE 覆盖组合1,5 a=2, b=1, x=1 ABE 覆盖组合2,6 a=1, b=0, x=2 ABE 覆盖组合3,7 a=1, b=1, x=1 ABD 覆盖组合4,8,多重条件覆盖不足,多重条件覆盖仍旧有可能不能覆盖全部路径。 如在例2中,采用多重条件覆盖生成的4个测试用例中仍旧没有覆盖 ACD 路径。,简单的准则,对于包含每个判定只存在一种条件的程序,最简单的测试准则就是设计出足够数量的测试用例,实现: 1.将每个判断的所有结果都至少执行一次; 2

15、.将所有的程序入口都至少调用一次,以确保全部的语句都至少执行一次。 对于包含多重条件判断的程序,最简单的测试准则是设计出足够数量的测试用例,将每个判断的所有可能的条件结果的组合,以及所有的入口点都至少执行一次。,单元测试,单元测试(或模块测试)是对程序中的单个子程序或过程进行测试的过程。 单元测试的目的是将模块的功能与定义模块的功能规格说明或接口规格说明进行比较。为了再次强调所有测试过程的目的,这里的测试目标不是为了说明模块符合其规格说明,而是为了揭示出模块与其规格说明存在着矛盾。,测试用例设计,在为模块测试设计测试用例时,需要使用两种类型的信息:模块的规格说明和模块的源代码。规格说明一般都规

16、定了模块的输入和输出参数以及模块的功能。 模块测试的测试用例的设计过程一般如下: 使用一种或多种白盒测试方法分析模块的逻辑结构,生成测试用例;然后使用黑盒测试方法对照模块的规格说明以补充测试用例。,三角形问题,三角形程序接受三个整数 a、b 和 c 作为输入,用做三角形的边。程序的输出是由这三条边确定的三角形类型:等边三角形、等腰三角形、不等边三角形或非三角形。,1. Program triangle 2. Dim a,b,c As Integer 3. Dim IsATriangle As Boolean Step1: 获得输入 4. Output(“输入3个整数作为三角形的三个边长“) 5. Input(a,b,c) 6. Output(“边A长度为:“,a) 7. Output(“边B长度为:“,b) 8. Output(“边C长度为:“,c) Step2: 判断是否是三角形 9. If (ab) AND (ac) AND (bc) 17. Then Output(“不等边三角形“) 18

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号