软件测试-白盒测试
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4、控制流图
常见的控制流图如图 3-1所示。 包含条件的节点被称 为判断节点(也称谓词 结点),由判断节点发 出的边必须终止于某一 个节点。 由边和结点所限定的 范围称为区域。
图3-1 常见的控制流图
一、什么是白盒测试
4、控制流图
将一个典型的程序流程图转换成控制流图
图3-2 控制流图示例
一、什么是白盒测试
白盒测试
教学目标:
了解白盒测试的定义 掌握白盒测试的常用方法
教学重点:
白盒测试的覆盖测试法和路径测试法
教学Βιβλιοθήκη Baidu点:
白盒测试案例应用
教学方法:多媒体 教学课时:6课时
白盒测试
什么是白盒测试 白盒测试的常用方法 白盒测试案例运用
一、什么是白盒测试
1、白盒测试的定义
白盒测试(White-box Testing)也称作结 构测试或逻辑驱动测试,它是知道产品的 内部工作过程,可通过测试来检测产品内 部动作是否按照规格说明书的规定正常进 行。按照程序内部的结构测试程序,检验 程序中的每条通路是否都能按预定要求正 确工作,而不顾它的功能。 白盒测试的主要方法有逻辑覆盖、基本路 径测试等,主要用于软件验证。
二、白盒测试的常用方法
1、覆盖率测试
下面是一段简单的C语言程序,作为公共程序段来 说明五种覆盖测试的各自特点。
程序3-1: 1 If (A>1&& B==0) then 2 X=X/A 3 If (A>2|| X>1) then 4 X=X+1
逻辑运算符“&&”表示“与”的关系,逻辑运算 符“||”表示“或”的关系。其程序控制流图如图
A=2为true,记为T3; A=2为false,记为-T3; X>1为true,记为T4; X>1为false,记为-t4;
二、白盒测试的常用方法
4、条件覆盖
测试用例 Test Case 1 Test Case 5 A,B,X 2,0,3 1,1,1 执行路径 ace abd 覆盖条件 T1,T2,T3,T4 -T1,-T2,-T3,-T4
1,0,3
abd
abe
-T1,-T2,-T3,-T4
-T1,T2,-T3,T4
4,8
3,7
上述测试用例虽然同时覆盖了全部条件组合的4个分支,但是却 仅覆盖了3条路径,漏掉了路径acd。
二、白盒测试的常用方法
7、路径覆盖
路径覆盖(Path Coverage)要求设计若干测试用例, 执行被测试程序时,能够覆盖程序中所有的可能路径。 从流程图和流图中都可以看出,本例有4条可能的路径。
路径1:ace 路径2:abd 路径3:abe 路径4:acd
记为L1 记为L2 记为L3 记为L4
二、白盒测试的常用方法
7、路径覆盖
测试用例 Test Case 1 Test Case 2 Test Case 3 Test Case 4
A,B,X 2,0,3 1,0,1 2,1,1 3,0,3
这两个测试用例不但覆盖了4个条件的全部8种情况,而且将两 个判定的4个分支b、c、d、e也同时覆盖了,即同时达到了条 件覆盖和判定覆盖。
二、白盒测试的常用方法
4、条件覆盖
但是并不可以说判断覆盖是条件覆盖的子集。
测试用例 Test Case 6 Test Case 4 A,B,X 1,0,3 1,1,1 执行路径 abe abe 覆盖条件 -T1,T2,-T3,T4 T1,-T2,T3,-T4
二、白盒测试的常用方法
6、组合覆盖
测试用例 Test Case 1 Test Case 4 A,B,X 2,0,3 2,1,1 执行路径 ace abe 覆盖条件 T1,T2,T3,T4 T1,-T2,T3,-T4 覆盖组合号 1,5 2,6
Test Case 5
Test Case 6
1,1,1
1、覆盖率测试
白盒测试技术的常见方法之一就是覆盖测试,它 是利用程序的逻辑结构设计相应的测试用例。测 试人员要深入了解被测程序的逻辑结构特点,完 全掌握源代码的流程,才能设计出恰当的用例。 根据不同的测试要求,覆盖测试可以分为语句覆 盖、判断覆盖、条件覆盖、判断/条件覆盖、条件 组合覆盖和路径覆盖。
二、白盒测试的常用方法
3、判断覆盖
测试用例 Test Case 1 Test Case 2 A,B,X 2,0,3 1,0,1 (A>1)and (B=0) True False (A=2)or (X>1) True False 执行路径 ace abd
采用这一组测试用例,公共程序段的4个判断分支b,c,d, e都被覆盖到了。
二、白盒测试的常用方法
3、判断覆盖
判断覆盖(Branch Coverage)是指设计若干个测试用例, 执行被测试程序时,程序中每个判断条件的真值分支和假值 分支至少被执行一遍。在保证完成要求的情况下,测试用例 的数目越少越好。判断覆盖又称为分支覆盖。 对上述示例程序段,设计两个测试用例,使它们能通过路径 ace和abd或通过路径acd及ade,即可达到“判定覆盖”的 标准。
二、白盒测试的常用方法
4、条件覆盖
因此,在第一个判定(A>1)AND(B=0)中应考虑到各种条件取 值的情况:
A>1为true,记为T1; A>1为false,记为-T1; B=0为true,记为T2; B=0为false,记为-T2;
同样,对于第二个判定(A=2)OR(X>1)应考虑到:
一、什么是白盒测试
4、控制流图
白盒测试是针对软件产品内部逻辑结构进行测试 的,测试人员必须对测试中的软件有深入的理解, 包括其内部结构、各单元部分及之间的内在联系, 还有程序运行原理等等。因而这是一项庞大并且 复杂的工作。为了更加突出程序的内部结构,便 于测试人员理解源代码,可以对程序流程图进行 简化,生成控制流图(Control Flow Graph)。 简化后的控制流图是由节点和控制边组成的。
二、白盒测试的常用方法
3、判断覆盖
测试用例 Test Case 3 Test Case 4 A,B,X 3,0,1 2,1,3 (A>1)and (B=0) True False (A=2)or (X>1) False True 执行路径 acd abe
采用这一组测试用例,公共程序段的4个判断分支b,c,d, e也都被覆盖到了。 需要注意的是,上述两组测试用例在满足判定覆盖的同时, 还完成了语句覆盖,因此判定覆盖要比语句覆盖更强一些。 但是,此时如果程序段中的第二个判定条件X>1误写成X<1, 执行上述测试用例,原路径abe执行而不影响结果。
上表中虽然覆盖了4个内部判断式的8种真假值情况。但是这组测 试用例的执行路径是abe,仅是覆盖了判断条件的4个真假分支中 的2个。 所以,需要设计一种能同时满足判断覆盖和条件覆盖的覆盖测试 方法,即判断/条件覆盖测试。
二、白盒测试的常用方法
5、判定/条件覆盖
判断/条件覆盖是指设计若干个测试用例,执行被测试程序时, 程序中每个判断条件的真假值分支至少被执行一遍,并且每个判 断条件的内部判断式的真假值分支也要被执行一遍。
2、语句覆盖
从表面上看,语句覆盖用例测试了程序中的每一个语句 行,好像对程序覆盖得很全面,但实际上语句覆盖测试 是最弱的逻辑覆盖方法。例如,第一个判断的逻辑运算 符“&&”错误写成“||”,或者第二个判断的逻辑运算符 “||”错误地写成“&&”,这时如果仍采用Test Case 1测 试用例则程序仍按流程图上的路径ace执行;当第二个 条件语句中X>1误写成X>0时,上述的测试用例也不能 发现这一错误。 根据上述分析可知,语句覆盖测试只是表面上的覆盖程 序流程,没有针对源程序各个语句间的内在关系,设计 更为细致的测试用例。
二、白盒测试的常用方法
1、覆盖率测试
图3-3 示例程序流程图及流图
二、白盒测试的常用方法
2、语句覆盖
语句覆盖(Statement Coverage)是指设计若干个测试 用例,程序运行时每个可执行语句至少被执行一次。在 保证完成要求的情况下,测试用例的数目越少越好。 以下是针对公共程序段设计的测试用例:
一、什么是白盒测试
2、为什么不采用穷举路径测试法
穷举路径测试法无法检查出程序本身是否 违反了设计规范,即程序是否是一个错误 的程序。 穷举路径测试不能查出程序因为遗漏路径 而出错。 穷举路径测试发现不了一些与数据相关的 错误。
一、什么是白盒测试
3、白盒测试方法遵循的原则
确保一个模块中的所有独立路径至少被测 试一次。 所有逻辑值均需测试真(true)和假 (false)两种情况。 检查程序的内部数据结构,保证其结构的 有效性。 在取值上、下边界即可操作范围内运行所 有循环。
测试用例 A,B,X (A>1)and (B=0) True (A=2)or (X>1) True 执行路径
Test Case 1
2,0,3
ace(BCEF)
程序按路径a,c,e(流图上的路径BCEF或1-2-3-4-5)顺序执 行,程序中的4个语句都被执行一次,符合语句覆盖的要求。
二、白盒测试的常用方法
二、白盒测试的常用方法
6、组合覆盖
条件组合覆盖是指设计若干个测试用例,执行被测试程序时,程 序中每个判断条件的的内部判断式的各种真假组合可能都至少被 执行一遍。可见,满足条件组合覆盖的测试用例组一定满足判断 覆盖、条件覆盖和判断/条件覆盖。 在上述示例程序段中,每个判定各包含有两个条件,这两个条件 在判定中有8种可能的组合:
执行路径 ace(L1) abd(L2) abe(L3) acd(L4)
实际问题中,一个不太复杂的程序,其路径都是一个庞大的数字,要在 测试中覆盖这样多的路径是无法实现的。所以,路径覆盖测试是相对的, 要尽可能把路径数压缩到一个可承受范围。 当然,即便对某个简短的程序段做到了路径覆盖测试,也不能保证源代 码不存在其他软件问题了。其他的软件测试手段也必要的,它们之间是 相辅相成的。没有一个测试方法能够找尽所有软件缺陷,只能说是尽可 能多地查找软件缺陷。
一、什么是白盒测试
4、控制流图
控制流图的特点:
具有唯一入口节点,即源节点,表示程序段 的开始语句; 具有唯一出口节点,即汇节点,表示程序段 的结束语句; 节点由带有标号的圆圈表示,表示一个或多 个无分支的源程序语句; 控制边由带箭头的直线或弧表示,代表控制 流的方向。
一、什么是白盒测试
测试用例 Test Case 1 Test Case 5 A,B,X 2,0,3 1,1,1 执行路径 ace abd 覆盖条件 -T1,T2,-T3,T4 T1,-T2,T3,-T4 (A>1)and (B=0) True False (A=2)or (X>1) True False
上表虽然满足了判断覆盖和条件覆盖,但是没有对每个判断条件的内部判断 式的所有真假值组合进行测试。条件组合判断是必要的,因为条件判断语句 中的“与”和“或”,即“&&”和“||”,会使内部判断式之间产生抑制作用。 例如,C=A && B中,如果A为假值,那么C就为假值,测试程序就不检测B了, B的正确与否就无法测试了。同样,C=A || B中,如果A为真值,那么C就为真 值,测试程序也不检测B了,B的正确与否也就无法测试了。
A>1,B=0,记为T1,T2; A>1,B<>0,记为T1,-T2; A<=1,B=0,记为-T1,T2; A<=1,B<>0,记为-T1,-T2;
A=2,X>1,记为T3,T4; A=2,X<=1,记为T3,-T4; A<>2,X>1,记为-T3,T4; A<>2,X<=1,记为-T3,-T4;
4、控制流图
对于复合条件,可将其分解为多个单个条件,并映 射成控制流图。
一、什么是白盒测试
5、图矩阵
控制流图的矩阵表示形式,其维数等于流图的结点 数,矩阵元素对应于结点的边。 若矩阵记为M,则M(4,1)=“d”。
结点 1 2 3 b c d 流图对应的矩阵图 4
1
2 3 4
a
二、白盒测试的常用方法
二、白盒测试的常用方法
4、条件覆盖
在实际程序代码中,一个判定中通常都包含了若干个条件,如上 述示例程序段,判定(A>1)and(B=0)包含了两个条件(A>1)和 (B=0),此时,一个更强的覆盖标准是条件覆盖。 条件覆盖(Condition Coverage)是指设计若干个测试用例,执 行被测试程序时,程序中每个判断条件中的每个判断式的真值和 假值至少被执行一遍。