您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 述职报告 > 第四章 白盒测试及其用例的设计1
四川大学锦城学院软件测试第4章白盒测试及其用例的设计4.1白盒测试方法4.2程序结构分析4.3覆盖测试4.4路径测试4.5其他白盒测试方法4.6程序插桩四川大学锦城学院软件测试本章教学目标理论环节•学习理解白盒测试方法的基本概念•学习理解白盒测试的覆盖理论•学习掌握白盒测试的路径表达•学习掌握白盒测试的基本路径测试法实践环节•通过案例运用学习掌握覆盖问题的解决方法•运用基本路径测试方法进行实际程序测试四川大学锦城学院软件测试白盒测试是把测试对象看做一个透明的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。白盒测试也称结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件或程序验证。四川大学锦城学院软件测试4.1白盒测试方法•为什么要进行白盒测试?假设此时开发工作已结束,程序送交到测试组,没有人知道代码中有一个潜在的被0除的错误。若测试组采用的测试用例的执行路径没有同时经过x=0和y=5/x进行测试,显然测试工作似乎非常完善,测试用例覆盖了所有执行语句,也没有被0除的错误发生。四川大学锦城学院软件测试•白盒测试法检查程序内部逻辑结构,对所有逻辑路径进行测试,是一种穷举路径的测试方法。•即使每条路径都测试过了,仍然可能存在错误:穷举路径测试无法检查出程序本身是否违反了设计规范,即程序是否是一个错误的程序。穷举路径测试不可能查出程序因为遗漏路径而出错。穷举路径测试发现不了一些与数据相关的错误。四川大学锦城学院软件测试•采用白盒测试方法必须遵循以下几条原则:保证一个模块中的所有独立路径至少被测试一次。所有逻辑值均需测试真(true)和假(false)两种情况。检查程序的内部数据结构,保证其结构的有效性。在上下边界及可操作范围内运行所有循环。四川大学锦城学院软件测试•白盒测试主要是检查程序的内部结构、逻辑、循环和路径。常用测试用例设计方法有:逻辑覆盖法(逻辑驱动测试)基本路径测试方法程序插桩四川大学锦城学院软件测试4.2程序结构分析4.2.1控制流图4.2.2环形复杂度4.2.3图矩阵四川大学锦城学院软件测试4.2.1控制流图•控制流图(可简称流图)是对程序流程图进行简化后得到的,它可以更加突出的表示程序控制流的结构。•控制流图中包括两种图形符号:节点和控制流线。节点由带标号的圆圈表示,可代表一个或多个语句、一个处理框序列和一个条件判定框(假设不包含复合条件)。控制流线由带箭头的弧或线表示,可称为边。它代表程序中的控制流。常见结构的控制流图•对于复合条件,则可将其分解为多个单个条件,并映射成控制流图。具有复合条件的控制流图515141311987图4-1控制流图四川大学锦城学院软件测试1a52421b图4-2复合条件的控制流图四川大学锦城学院软件测试4.2.2环形复杂度•环形复杂度也称为圈复杂度,它是一种为程序逻辑复杂度提供定量尺度的软件度量。•环形复杂度的应用——可以将环形复杂度用于基本路径方法,它可以提供:程序基本集的独立路径数量;确保所有语句至少执行一次的测试数量的上界。独立路径是指程序中至少引入了一个新的处理语句集合或一个新条件的程序通路。采用流图的术语,即独立路径必须至少包含一条在本次定义路径之前不曾用过的边。•测试可以被设计为基本路径集的执行过程,但基本路径集通常并不唯一。四川大学锦城学院软件测试计算环形复杂度的方法•环形复杂度以图论为基础,为我们提供了非常有用的软件度量。可用如下三种方法之一来计算环形复杂度:控制流图中区域的数量对应于环形复杂度。给定控制流图G的环形复杂度—V(G),定义为V(G)=E-N+2其中,E是控制流图中边的数量,N是控制流图中的节点数量。给定控制流图G的环形复杂度—V(G),也可定义为V(G)=P+1其中,P是控制流图G中判定节点的数量。515141311987导出独立路径集:路径1:5-15(iRecordNum=0)路径2:5-7-8-14-5-15(iRecordNum≥0,iType=0)路径3:5-7-9-11-14-5-15(iRecordNum≥0,iType=1)路径4:5-7-9-13-14-5-15(iRecordNum≥0,iType≠0,iType≠1)环形复杂度:V(G)=E-N+2=V(G)=10-8+2=4orV(G)=P+1=V(G)=3+1=4四川大学锦城学院软件测试4.2.3图矩阵•图矩阵是控制流图的矩阵表示形式。•图矩阵是一个方形矩阵,其维数等于控制流图的节点数。矩阵中的每列和每行都对应于标识的节点,矩阵元素对应于节点间的边。•通常,控制流图中的结点用数字标识,边则用字母标识。如果在控制流图中从第i个结点到第j个结点有一个标识为x的边相连接,则在对应图矩阵的第i行第j列有一个非空的元素x。515141311987节点1(5)2(7)3(8)4(9)5(11)6(13)7(14)8(15)1(5)ab2(7)ce3(8)d4(9)fh5(11)g6(13)i7(14)j8(15)abcdefghij表4-1图矩阵四川大学锦城学院软件测试习题•根据左图给出的程序流程图,完成以下要求:(1)画出相应的控制流图。(2)计算环形复杂度。(3)给出相应的图矩阵。(4)找出程序的独立路径集合。c四川大学锦城学院软件测试4.3覆盖测试4.3.1测试覆盖率4.3.2逻辑覆盖法4.3.3面向对象的覆盖4.3.4测试覆盖准则四川大学锦城学院软件测试4.3.1测试覆盖率•测试覆盖率:用于确定测试所执行到的覆盖项的百分比。其中的覆盖项是指作为测试基础的一个入口或属性,比如语句、分支、条件等。•测试覆盖率可以表示出测试的充分性,在测试分析报告中可以作为量化指标的依据,测试覆盖率越高效果越好。但覆盖率不是目标,只是一种手段。•测试覆盖率包括功能点覆盖率和结构覆盖率:功能点覆盖率大致用于表示软件已经实现的功能与软件需要实现的功能之间的比例关系。结构覆盖率包括语句覆盖率、分支覆盖率、循环覆盖率、路径覆盖率等等。四川大学锦城学院软件测试•逻辑覆盖是以程序内部的逻辑结构为基础的设计测试用例的技术。它属白盒测试。•根据覆盖目标的不同,可分为:语句覆盖判定覆盖条件覆盖判定-条件覆盖条件组合覆盖路径覆盖4.3.2逻辑覆盖法四川大学锦城学院软件测试•语句覆盖–选择足够多的测试用例,使得程序中的每个可执行语句至少执行一次。•判定覆盖•条件覆盖•判定-条件覆盖•条件组合覆盖•路径覆盖四川大学锦城学院软件测试•语句覆盖•判定覆盖–通过执行足够的测试用例,使得程序中的每个判定至少都获得一次“真”值和“假”值,也就是使程序中的每个取“真”分支和取“假”分支至少均经历一次,也称为“分支覆盖”。•条件覆盖•判定-条件覆盖•条件组合覆盖•路径覆盖四川大学锦城学院软件测试•语句覆盖•判定覆盖•条件覆盖–设计足够多的测试用例,使得程序中每个判定包含的每个条件的可能取值(真/假)都至少满足一次。•判定-条件覆盖•条件组合覆盖•路径覆盖四川大学锦城学院软件测试•语句覆盖•判定覆盖•条件覆盖•判定-条件覆盖–设计足够多的测试用例,使得程序中每个判定包含的每个条件的所有情况(真/假)至少出现一次,并且每个判定本身的判定结果(真/假)也至少出现一次。(满足判定/条件覆盖的测试用例一定同时满足判定覆盖和条件覆盖。)•条件组合覆盖•路径覆盖四川大学锦城学院软件测试•语句覆盖•判定覆盖•条件覆盖•判定-条件覆盖•条件组合覆盖–通过执行足够的测试用例,使得程序中每个判定的所有可能的条件取值组合都至少出现一次。(满足组合覆盖的测试用例一定满足判定覆盖、条件覆盖和判定/条件覆盖。)•路径覆盖四川大学锦城学院软件测试•语句覆盖•判定覆盖•条件覆盖•判定-条件覆盖•条件组合覆盖•路径覆盖–设计足够多的测试用例,要求覆盖程序中所有可能的路径。四川大学锦城学院软件测试逻辑覆盖法(续)组合覆盖判断/条件覆盖判断覆盖条件覆盖语句覆盖intDoWork(intx,inty,intz){intk=0,j=0;if((x3)&&(z10)){k=x*y-1;j=sqrt(k);}//语句块1if((x==4)||(y5)){j=x*y+10;}//语句块2j=j%3;//语句块3returnj;}四川大学锦城学院软件测试X3&&z10执行语句块1执行语句块2X==4||y5执行语句块3FFTTabdce四川大学锦城学院软件测试•L1(abd)={x3andz10}and{x=4ory5}={x3andz10andx=4}or{x3andz10andy5}={x=4andz10}or{x3andz10andy5}四川大学锦城学院软件测试•L2(acd)={x3andz10}and{x=4ory5}={x3orz10andx=4}or{x3andz10andy5}={x=4andz≥10}or{z≥10andy5}or{x≤3andy5}四川大学锦城学院软件测试•L3(abe)={x3andz10}and{x=4ory5}={x3andz10}and{x=4andy5}={x3andz10andx≠4andy≤5}四川大学锦城学院软件测试•L4(ace)={x3andz10}and{x=4ory5}={x3orz10}and{x=4andy5}={x≤3andx≠4andy≤5}or{z≥10andx≠4andy≤5}四川大学锦城学院软件测试语句覆盖•语句覆盖就是设计若干个测试用例,运行被测程序,使得每一可执行语句至少执行一次。选择执行路径:L1(abd)设计测试用例:输入:{4,6,5}预计输出:{1}实际输出:{?}如果将第一个条件中的and改为or,或将第二个条件中的or改为and,该测试用例测试不出错误。语句覆盖可以保证程序中的每个语句都得到执行,但发现不了判定中逻辑运算的错误,即它并不是一种充分的检验方法。可以说语句覆盖是最弱的逻辑覆盖准则。四川大学锦城学院软件测试判定覆盖•判定覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次。•判定覆盖又称为分支覆盖。选择执行路径:L1(abd)L4(ace)设计测试用例:输入:{4,6,5}覆盖L1{2,5,5}覆盖L4预计输出:{1},{0}实际输出:{}就判定覆盖而言,即使一个布尔表达式含有多个逻辑表达式,也只需要测试每个布尔表达式的值为真和假两种情况就可以了。四川大学锦城学院软件测试判定覆盖•分析:上述两个测试用例不仅满足了判定覆盖,同时还做到语句覆盖。从这点看似乎判定覆盖比语句覆盖更强一些,但仍然无法确定判定内部条件的错误。例如把第二个判定中的条件y5错误写为y5,使用上述测试用例,照样能按原路径执行而不影响结果。因此,需要有更强的逻辑覆盖准则去检验判定内的条件。四川大学锦城学院软件测试判定覆盖(续)16352789410•说明:以上仅考虑了两出口的判断,我们还应把判定覆盖准则扩充到多出口判断(如Case语句)的情况。因此,判定覆盖更为广泛的含义应该是使得每一个判定获得每一种可能的结果至少一次。四川大学锦城学院软件测试条件覆盖•条件覆盖就是设计若干测试用例,在执行被测程序后,要使每个判定中每个条件的可能值至少满足一次。•对DoWork函数的各个判定的各种条件取值加以标记。对于第一个判定((x3)&&(z10)):条件x3取真值记为T1,取假值记为T1条件z10取真值记为T2,取假值记为T2对于第二个判定((x==4)||(y5)):条件x==4取真值记为T3,取假值记为T3条件y5取真值记为T4,取假值记为T4四川大学锦城学院软件测试TRUEFALSEX3{4,6,5}{2,5,5}Z10{4,6,5}X==4{4,6,5}{2,5,5}Y5{4,6,5}{2,5,5}{2,5,15}
本文标题:第四章 白盒测试及其用例的设计1
链接地址:https://www.777doc.com/doc-3315829 .html