第07课 白盒测试(1)—逻辑覆盖测试
白盒测试中的逻辑覆盖与数据流分析

白盒测试中的逻辑覆盖与数据流分析在软件开发过程中,白盒测试是一种对软件内部结构进行测试的方法。
它通过检查程序代码以及探索可执行路径来验证软件是否按照预期执行。
逻辑覆盖与数据流分析是白盒测试中重要的技术手段,本文将探讨它们的原理和应用。
一、逻辑覆盖逻辑覆盖是一种测试策略,它通过执行测试用例来验证程序中的逻辑是否正确。
逻辑覆盖关注的是程序中的判断语句,例如if语句、switch语句等。
在进行逻辑覆盖测试时,需要考虑以下几个方面:1.1 语句覆盖语句覆盖是最基本的逻辑覆盖准则,要求每个语句至少执行一次。
通过执行测试用例,可以确认程序中的每个语句是否被执行,并检查是否存在语法错误或逻辑缺陷。
1.2 判定覆盖判定覆盖是指每个判断语句的真假两种情况都至少被执行一次。
在这种覆盖下,可以验证每个判断语句的逻辑正确性,并检查条件是否能够触发正确的执行路径。
1.3 条件覆盖条件覆盖要求每个布尔表达式的取值组合都至少被测试一次。
这种覆盖可以检查每个布尔条件的正确性,包括非常规的边界条件和复杂的逻辑结构。
1.4 判定/条件覆盖判定/条件覆盖要求每个判断语句及其相关的布尔表达式取值组合都至少被执行一次。
通过这种覆盖,可以进一步验证判断语句与相关布尔表达式之间的关系是否正确。
1.5 路径覆盖路径覆盖要求每个可能的路径都至少被测试一次。
这种覆盖可以发现程序中所有的执行路径,包括正常路径和异常路径,从而验证程序的整体逻辑正确性。
二、数据流分析数据流分析是一种通过检查程序中的变量之间的依赖关系来判断程序执行过程中可能出现的错误的方法。
它关注的是程序中数据的传递和使用,用于分析数据的使用方式和变量之间的关系。
常用的数据流分析包括以下几种:2.1 定义-使用关系分析定义-使用关系分析用于确定变量在程序中的定义点和使用点,以及变量在执行过程中的取值范围。
通过分析变量的定义和使用关系,可以找出可能出现的未定义变量、变量类型不匹配和变量作用域错误等问题。
白盒测试法:逻辑覆盖与路径覆盖

⽩盒测试法:逻辑覆盖与路径覆盖⼀、实验⽬的(1)掌握逻辑覆盖和路径覆盖测试的基本⽅法⼆、实验要求(1)完成程序的编写(2)运⽤逻辑覆盖和基本路径覆盖测试的覆盖准则设计被测程序的测试⽤例,并运⾏测试⽤例检查程序的正确与否三、实验内容(1)设计程序的逻辑覆盖测试⽤例,语句覆盖、条件覆盖、分⽀覆盖、分⽀/条件覆盖、条件组合覆盖。
(2)设计程序的基本路径覆盖测试⽤例(要求绘制控制流图,利⽤三种⽅式计算圈复杂度)。
(3)编写程序进⾏实际测试,并给出测试结果。
伪代码程序如下:1 Input(X)2 If A>1 and B=0 then3 X=X/A4 End if5 If A=2 then6 X=X+17 else8 X=X-19 End if10 Output(X)解决⽅案流程图源程序:import java.util.Scanner;public class Baihe{public static void main(String[] args) {int A=2;int B=0;Scanner scan = new Scanner(System.in);int x1 = scan.nextInt();if ((A>1)&&(B==0)){x1/=A;}if (A==2){x1+=1;}else{x1-=1;}System.out.println(x1); }}环形复杂度=9-7+2=4路径1: 1-4-6-7路径2: 1-4-5-7路径3: 1-2-4-5-7路径4: 1-2-3-4-5-7其他: 1-2-4-6-71-2-3-4-6-7。
白盒测试技术中,最强的逻辑覆盖法

白盒测试技术中,最强的逻辑覆盖法在软件开发领域,白盒测试是一种测试方法,旨在检验软件内部结构和逻辑是否符合设计要求。
其中,逻辑覆盖法是一种重要的测试技术,通过设计测试用例来确保程序的各个逻辑路径都被验证。
逻辑覆盖法的作用逻辑覆盖法旨在覆盖程序中所有可能的逻辑路径,以检测程序的正确性和完整性。
通过针对不同的逻辑路径设计测试用例,可以有效地发现潜在的错误和异常逻辑,从而提高软件的质量和可靠性。
逻辑覆盖法的分类在白盒测试领域,逻辑覆盖法主要包括以下几种常见的技术:1.语句覆盖(Statement Coverage):确保每个语句至少被执行一次。
2.判定覆盖(Decision Coverage):确保每个判定语句的每个可能结果至少被覆盖一次。
3.条件覆盖(Condition Coverage):确保每个条件表达式的每个可能取值至少被覆盖一次。
4.路径覆盖(Path Coverage):确保程序中的每条可能路径都被覆盖。
最强的逻辑覆盖法在众多逻辑覆盖技术中,路径覆盖被认为是最强大的一种方法。
路径覆盖要求测试用例覆盖程序中的每一条可能路径,包括循环、分支和异常处理等所有可能情况。
尽管路径覆盖测试用例数量通常比较庞大,但它可以帮助发现隐藏在程序逻辑中的深层次问题。
实际应用在实际软件测试中,通常会结合多种逻辑覆盖技术,根据具体的测试需求和复杂度来选择合适的测试方法。
例如,对于简单的函数或模块,语句覆盖可能已经足够;而对于复杂的系统或关键性代码,可能需要采用路径覆盖等更加细致的技术。
结语逻辑覆盖法作为白盒测试的重要技术之一,在软件开发过程中具有重要意义。
选择合适的逻辑覆盖方法并设计有效的测试用例,可以帮助提高软件质量、减少缺陷,并最终实现更可靠的软件产品。
在实践中不断摸索和探索,将逻辑覆盖法运用到软件测试的实践中,发挥其最大的效果,推动软件质量持续改进。
白盒测试逻辑覆盖法用例

白盒测试逻辑覆盖法用例白盒测试逻辑覆盖法是一种软件测试方法,旨在通过覆盖代码的不同路径和逻辑分支,发现潜在的错误和漏洞。
本文将介绍什么是白盒测试逻辑覆盖法,以及如何使用该方法生成全面、有效的测试用例。
白盒测试逻辑覆盖法是基于源代码的测试方法,测试人员需要了解程序的内部结构和工作原理。
这种方法可以帮助测试人员检查代码的各个分支和条件语句,以确保每个分支都被测试到。
在使用白盒测试逻辑覆盖法生成测试用例时,有几个关键概念需要理解。
首先是语句覆盖(Statement Coverage),即测试用例要尽可能覆盖程序中的每个语句。
其次是判定覆盖(Branch Coverage),即测试用例要至少覆盖每个条件语句的真和假两种情况。
最后是路径覆盖(Path Coverage),即测试用例要覆盖程序中的每条可能路径。
为了生成全面、生动的测试用例,测试人员可以根据以下步骤进行操作。
首先,测试人员需要分析程序的逻辑结构,了解程序中的条件语句、循环语句和函数调用等。
可以使用流程图或者源代码分析工具来辅助分析。
在分析过程中,要特别注意程序中的边界情况和异常处理。
其次,根据分析结果,测试人员可以制定测试用例的生成策略。
可以按照语句覆盖、判定覆盖和路径覆盖的要求,设计测试用例,确保每个分支和路径都被覆盖到。
可以使用不同的输入数据和参数组合,测试程序的各种情况。
第三,测试人员需要实施测试用例,运行程序进行测试。
可以使用调试工具来跟踪程序的执行,检查各个变量的值和程序的执行路径。
需要注意记录测试过程中的输入数据、实际结果和预期结果,以便后续分析和比对。
最后,测试人员需要对测试结果进行评估和整理。
可以比对实际结果和预期结果,查找差异和错误。
还可以根据测试结果,优化测试用例和测试策略,并反复执行测试,直到程序的每个分支和路径都得到覆盖。
通过使用白盒测试逻辑覆盖法,测试人员可以生成全面、有效的测试用例,发现潜在的错误和漏洞。
这种方法在软件开发的早期阶段使用效果最佳,可以帮助开发人员及时修复问题,提高软件的质量和稳定性。
13.白盒测试(1)—逻辑覆盖测试

SWPU
6每条可能的路径都至少执行一次。 路径覆盖 每条可能的路径都至少执行一次。
入口
A> 1 AND B=0 F A=2 OR X > 1 F 返回
T
X=X/A
Test cases: ① A=1 , B=1 , ② A=1 , B=1 , ③ A=3 , B=0 , ④ A=2 , B=0 ,
X=1 X=2 X=1 X=4
T
X=X/A
T
X=X+1
路径: ( ) ( ) ( ) ( ) 路径:P1(TT)P2(FF)P3(FT)P4(TF)
SWPU
1 语句覆盖
设计足够的测试用例, 设计足够的测试用例,使 得程序中的每个语句至少执行 一次。 一次。
SWPU
1 语句覆盖
入口
A 用例1 2 2 B 0 0 X 4 3
A> 1 AND B=0 F A=2 OR X > 1 F 返回
左图是具有某程序的流程图,假设循环10次,请 计算一下有多少条程序执行通路?假设由图中得 到的所有路径都是可执行路径,执行一次循环大 约需要10微秒(奔腾4 1.7G),且一年365天每 天24小时不停机,请回答:如果循环次数为10的 话,遍历图中所有路径需要多长时间? 结论是:41+42+43+……+410,需要14秒左右的时 间 如果循环次数为20次,100次时,结果又如何? 结论是:循环20次,需要约4072小时,循环100 次则大约需要6.79*1047年
SWPU
5 条件组合覆盖
设计足够的测试用例, 设计足够的测试用例,使 得每个判定中的条件的各种可 能组合都至少出现一次。 能组合都至少出现一次。
SWPU
白盒测试逻辑覆盖标准是多少

白盒测试逻辑覆盖标准是多少白盒测试是一种测试方法,旨在检查软件系统的内部结构和代码。
在进行白盒测试时,测试人员会详细研究软件系统的源代码,并设计测试用例来确保代码的逻辑正确性和完整性。
而逻辑覆盖标准则是评估白盒测试覆盖程度的一项指标。
在白盒测试中,逻辑覆盖标准通常指的是代码覆盖率,即代码中被测试用例执行到的比例。
逻辑覆盖标准可以分为以下几种类型:1.语句覆盖(Statement Coverage):要求每个代码语句都至少执行一次。
通过语句覆盖可以检查代码中是否存在未执行的语句或代码逻辑错误。
2.判定覆盖(Decision Coverage):要求每个条件语句的每个可能取值至少执行一次。
判定覆盖可以检查条件语句的覆盖程度,确保代码中的分支逻辑正确。
3.条件覆盖(Condition Coverage):要求每个条件语句中的每个条件都取到true和false两种取值。
条件覆盖可以帮助检测条件表达式的覆盖情况,确保每种条件组合都被测试到。
4.路径覆盖(Path Coverage):要求覆盖代码中的所有可能执行路径。
路径覆盖是最全面的覆盖标准,可以确保每条代码路径都被测试到。
在实际的软件测试过程中,根据项目需求和代码复杂度的不同,可以选择不同的逻辑覆盖标准来评估测试覆盖程度。
通常情况下,语句覆盖是最基本的覆盖标准,而判定覆盖和条件覆盖则可以进一步提高测试覆盖度。
路径覆盖则通常用于对关键路径进行深度测试,确保系统的稳定性和安全性。
总的来说,逻辑覆盖标准对于白盒测试至关重要,可以帮助测试人员评估测试用例的全面性和准确性,提高测试效率和质量。
在进行白盒测试时,选择合适的逻辑覆盖标准并设计相应的测试用例是至关重要的,只有经过充分的覆盖测试,才能有效地发现潜在的代码缺陷和逻辑错误,确保软件系统的质量和稳定性。
白盒测试-逻辑覆盖测试

16
测试用例(2)
假如根据定义设计测试用例如下:
测试用例
x=2、y=6、z=5
通过路径
acd
条件取值
-T1、T2、-T3、T4
覆盖分支
cd
x=4、y=5、z=5
abd
T1、-T2、T3、-T4
bd
17
分支-条件测试概念
入口
• 设计足够的测试用例,使得判 断中每个条件的所有可能取值 至少执行一次,同时每个判断 的真假分支至少执行一次,即 要求各个判断的所有可能的条 件取值组合至少执行一次。
30
循环测试-嵌套循环
• 嵌套循环:
1. 从最内层循环开始,将其它循环 设置为最小值; 2. 对最内层循环使用简单循环,而 使外层循环的叠代参数(即循环 计数)最小,并为范围外或排除 的值增加其它测试; 3. 由内向外构造下一个循环的测试, 但其它的外层循环为最小值,并 使其它的嵌套循环为“典型”值; 4. 继续直到测试所有的循环。
c
x==4 || y>5
d 语句块2 语句块3 出口
14
e
条件覆盖-设计用例
测试用例的输入为: { x=4、y=6、z=5} { x=2、y=5、z=5} { x=4、y=5、z=15}
程序执行的路径是:abd 程序执行的路径是:ace 程序执行的路径是:acd
入口 a x>3 && z<10 b 语句块1
丢失了一条路径abe
24
路径测试
入口
• 路径测试就是设计足够多的测试 用例,覆盖被测试对象中的所有 可能路径。
a x>3 && z<10
b 语句块1
c
软件白盒测试-逻辑覆盖测试与循环覆盖测试

软件白盒测试-逻辑覆盖测试与循环覆盖测试1.1逻辑覆盖测试逻辑覆盖测试主要是针对程序的内部逻辑结构设计测试用例的技术,它通过运行测试用例达到逻辑覆盖的目的。
逻辑覆盖包括以下六种类型。
➢语句覆盖。
➢判定覆盖。
➢条件覆盖。
➢判定-条件覆盖。
➢条件组合覆盖。
➢路径覆盖。
接下来,以下面的函数为例进行介绍。
void doWork(int x,int y,int z){int k=0,j=0;if((x>3)&&(z<10)){k=x*y-1;j=k*k;}if((x==4)||(y>5)){j=x*y+10;}j=j%3;}函数的流程图如图1.1所示。
图1.1示例流程图为了做简略说明,分别对各个判断的取真、取假分支编号为b、c、d、e。
1.1.1语句覆盖语句覆盖就是设计若干个测试用例,运行被测试程序,使得每一条可执行语句至少执行一次。
这里所谓的“若干个”,自然是越少越好。
为了对上面的函数进行语句覆盖,根据概念,只要设计一个测试用例就可以覆盖三个执行语句块中的语句。
针对程序的判断语句,可在入口处设计测试用例。
测试用例的输入为:{x=4、y=5、z=5}。
程序执行的路径是:abd。
从程序中每个语句都得到执行这一点来看,语句覆盖的方法似乎能够较全面地检验每一个语句,但它也绝不是完美的。
例如,在第一个判断中错误地把&&写成了||,则上面的测试用例仍可以覆盖所有的执行语句。
语句覆盖在测试程序时,除去对检查不可执行语句有一定作用外,并没有排除被测试程序包含错误的风险,因为被测程序并非语句的无序堆积,语句之间还存在着许多联系。
实际上,与后面将要介绍的其他逻辑覆盖相比较,语句覆盖是最弱的逻辑覆盖准则。
1.1.2判定覆盖判定覆盖(也称为分支覆盖),指设计若干个测试用例,运行被测程序,使程序中每个判断的取真分支和取假分支至少各执行一次。
根据上面的定义,对于上面的程序,只要设计两个测试用例,就可以满足判定覆盖的要求。
第4章(1)白盒测试方法1-逻辑覆盖法解析

{(A=2) or (X>1)} = not (A>1) and (A=2) or
not (A>1) and (X>1) or not (B=0) and (A=2) or not (B=0) and (X>1)
• 白盒测试将被测程序看作一个打开的 盒子,测试者能够看到被测源程序, 可以分析被测程序的内部结构,此时 测试的焦点集中在根据其内部结构设 计测试用例。
• 又称为 结构测试 或 逻辑驱动测试
白盒测试遵循的原则 Logo
• 采用白盒测试方法必须遵循以下几条原则,才 能达到测试的目的:
➢ 保证一个模块中的所有独立路径至少被测试一 次。
• 测试用例可以针对黑盒测试设计用例,也可以 针对白盒测试设计用例,我今天开始讲针对
白盒测试的用例设计方法。
• 华为的评价标准
引例:为什么要进行白盒测试? Logo
如果所有软件错误的根源都可以追溯 到某个唯一原因,那么问题就简单了。 然而,事实上一个bug 常常是由多个 因素共同导致的,如下图所示。
覆盖 a-c-e【L1】
(A==2) and (B==0) or (A>1) and (B==0) and (X/A>1)
{ not (A=2) and not (X>1) } = not (A>1) and not (A=2) and not (X>1)
or not (B=0) and not (A=2) and not (X>1)
例子 Logo
L3 :( a b e) = not {(A>1) and (B=0)} and
白盒测试逻辑覆盖

的
度的对比。纯度对比过强时,画面会出现生硬、杂乱、刺激、炫目的感觉。
对
纯度对比不足,则会造成画面的粉、灰、闷、单调的情况。
比
与
调
和
面积对比
色
彩
面积对比是指各种色块在构图中所占的量的比例关系,这与色彩本身属性
的
无关,但却影响色彩表达效果。色彩面积小易见度低,会被底色同化,难
对
以发现,而面积大,易见度高,画面容易产生刺激感。
语句覆盖测试执行了程 序中的每一个语句,似乎能 够比较全面的对程序进行检 验,但实际上,它并不是一 个测试很充分的覆盖标准, 从图中可以看出,两个判断 语句的都只执行了一个分支, 而另外一个分支根本就没有 被执行到。
语句覆盖
假设这一程序段中,两个
AND
判断语句的逻辑运算符号由于
疏忽写错了,第一个判断语句
课堂提问
试举例说明,为什么有时有的逻 辑表达式中,一个条件的的取值就可 以决定整个表达式的取值?
条件覆盖
条件覆盖就是要求判断表达式中的每一个条件都要 至少取得一次真值和一次假值,需要注意的是,每一个 条件都要至少取得一次真值和一次假值并不等于每一个 判定也都能至少取得一次真值和一次假值,即条件覆盖 并不比判定覆盖强,两者的关注点不同。
比
与
调
和
色彩调和
色
彩
色彩调和通常是指色彩的量比关系和秩序关系应该符合视觉审美要求,在保证
的
色彩变化丰富的同时,也应注重色彩关系的协调统一。以色相为基础的配色是 以色相环为基础进行思考的,用色相环上邻近的颜色进行配色,可以得到平静
对
而统一的感觉
比
与
调
和
语句覆盖
第4章(1) 白盒测试方法1-逻辑覆盖法

例 子
Logo
L2: ( a b d ) = not{(A>1) and (B=0)} and not{(A=2) or (X>1)} = { not (A>1) or not (B=0) } and { not (A=2) and not (X>1) } = not (A>1) and not (A=2) and not (X>1) or not (B=0) and not (A=2) and not (X>1)
白盒测试主要是检查程序的内部结构、 逻辑、循环和路径。常用测试用例设 计方法有:
逻辑覆盖法(逻辑驱动测试) 基本路径法
• 此外还有: –循环测试法 –程序插桩法
我们主要介绍这几种
Logo
• A. • B. • C. • D.
逻辑覆盖法 基本路径测试法 循环测试 程序插桩技术
A 逻辑覆盖法
语句覆盖率的问题
• 能达到很高的语句覆盖率 • 语句覆盖率看似很高,却有严重缺陷 :
• if(x!=1) { statements; ……; } else { statement; }
Logo
}99句
测试用例:
x = 2
语句覆盖率99%
}1句
50%的分支没有达到
语句覆盖总结
Logo
• 【优点】 :可以很直观地从源代码得到测 试用例,无须细分每条判定表达式。 • 【缺点】 :由于这种测试方法仅仅针对程 序逻辑中显式存在的语句,但对于隐藏的 条件是无法测试的。如在多分支的逻辑运 算中无法全面的考虑。语句覆盖是最弱的 逻辑覆盖。
• 华为的评价标准
引例:为什么要进行白盒测试?
Logo
如果所有软件错误的根源都可以追溯 到某个唯一原因,那么问题就简单了。 然而,事实上一个bug 常常是由多个 因素共同导致的,如下图所示。
逻辑覆盖法_软件测试技术

语句覆盖率
语句覆盖率
已执行的可执行语句占程序中可执行语句总 数的百分比
复杂的程序不可能达到语句的完全覆盖 语句覆盖率越高越好
语句覆盖测试用例
达到语句覆盖 100%的测试用例 A=1 B=1 X=1
未达到语句覆盖 100%的测试用例 A=0 B=1 X=0
语句覆盖的优点
入口 a No (x>3)&&(z<10) b Y es 执行语句块1 e c
(x= =4)||(y >5) d Y es 执行语句块2
No
执行语句块3
出口
2.2判定覆盖(Decision Coverage)
比语句覆盖稍强的覆盖标准是判定覆盖。 判定覆盖的含义是:设计足够多的测试 用例,使程序中的每个判定至少都获得 一次“真值”或“假值”。
练习
void DoWork(int x,int y,int z) { int k=0,j=0; if((x>3)&&(z<10)) { k=x*y-1; //语句块1 j=sqrt(k); } if((x= =4)||(y>5)) { j=x*y+10; //语句块2 } j=j%3; //语句块3 }
白盒测试的方法
程序结构分析; 逻辑覆盖测试; 基本路径测试; 白盒测试根据程序的控制结构设计导出测 试用例,主要用于软件程序的验证。 需要全面了解程序内部的逻辑结构,对所 有逻辑路径进行测试,是一种穷举路径 的测试方法。
白盒测试的原则
保证一个模块中的所有独立路径至少被 测试一次; 所有逻辑值均需测试真(True)和假 (False)两种情况; 检查程序的内部数据结构,保证其结构 的有效性; 在取值上、下边界,即可操作范围内运 行所有循环.
测试用例设计

A=1,B=1,x=1
这两组数据不仅满足条件覆盖的要求,而且也满足判
定覆盖的要求。但并不是所有的满足条件覆盖要求的数据
都满足判定覆盖的要求。下面的两组数据满足条件覆盖的
要求:
A=1,B=0,x=3; A=2,B=1,x=1
但是这组数据不满足判定覆盖的要求。为了解决这个
08:57:05问题,可以采用下面的判定/条件覆盖。(abe,abd没走C )
8
5、条件组合覆盖
条件组合覆盖就是设计足够的测试用例,使得
每个判定中的条件的各种可能组合都至少出现一次。
可能的条件组合:
相应的输入数据:
(1)A>1,B=0 (2)A>1,B≠0 (3)A≤1,B=0 (4)A≤1,B≠0 (5)A=2,x>1 (6)A=2,x≤1 (7)A≠2,x>1 (8)A≠2,x≤1
08:57:05 都至少出现一次
3
1、语句覆盖
设计足 够的调试用 例,使得程 序中的每个 语句至少执 行一次。
08:57:05
4
左图中共有4条路径: P1(ace)、P2(abd), P3(abe)、P4(acd)。
P1 正 好 满 足 语 句 覆 盖 的条件。可以设计如下的 输入数据:
A=2,B=0,x=4 提问:其他语句满足语 句覆盖条件吗?
就可以满足判定覆盖要求。可以设计如下两组输入数据:
A=2,B=0,x=4
A=1,B=1,x=1
也可以让测试用例测试路径P3(abe)和P4(acd)。
相应的两组输入数据如下:
A=2,B=1,x=1
A=4,B=0,x=4
判定覆盖比语句覆盖强,但是仍不能保证判断条件的
正确性。例如:第二个判断条件中的x>1若错写成了x<1,
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
入口
A> 1 AND B=0 F A=2 OR X > 1 F
T
X=X/A
T
X=X+1
返回
路径:P1(TT)P2(FF)P3(FT)P4(TF)
1 语句覆盖
设计足够的测试用例,使 得程序中的每个语句至少执行 一次。
1 语句覆盖
入口
A
用例1 2 2
B
0 0
X
4 3
A> 1 AND B=0 F A=2 OR X > 1 F
白盒测试的基本概念 什么是白盒测试
把程序看成装在一 个透明的白盒子里, 程序的结构和处理 过程完全可见,按 照程序的内部逻辑 测试程序,以检查 程序中的每条通路 是否都能按照预先 要求正确工作。
不可能进行彻底的白盒测试
左图是具有某程序的流程图,假设循环10次,请 计算一下有多少条程序执行通路?假设由图中得 到的所有路径都是可执行路径,执行一次循环大
返回
4 判定/条件覆盖
同时满足判定覆盖的和条件 覆盖的逻辑覆盖称为判定/条件覆 盖。它的含义是: 设计足够的测 试用例,使得判定中的每个条件 都取到各种可能的值,而且每个 判定表达式也都取到各种可能的 结果。
4 判定/条件覆盖
入口
用例1
A B X
2
1
0
1
4
1
A> 1 AND B=0 F A=2 OR X > 1 F
X=1 X=2 X=1 X=4
T
X=X+1
路径:P1(TT)P2(FF)P3(FT)P4(TF)
习题
1. 在用白盒法设计测试用例时,常用的6种覆盖标准是语 句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组 合覆盖、路径覆盖. 假设A和B是两种覆盖准则,我们用包含,被包含,相同 和互不包含来形容他们之间的关系: 语句覆盖——判定覆盖 语句覆盖——条件覆盖 判定覆盖——条件覆盖 判定覆盖——判定/条件覆盖 判定/条件覆盖——条件组合覆盖
白盒测试的常用方法
逻辑覆盖
路径分析 测试
循环、条 件分支
…
逻辑覆盖
逻辑覆盖是以程序的内部逻辑结构为基础的测试用例设 计技术,属于白盒测试。它要求测试人员十分清楚程序的逻 辑结构,考虑的是测试用例对程序内部逻辑覆盖的程度。 语句覆盖 判定覆盖 弱
条件覆盖
判定/条件覆盖 条件组合覆盖 路径覆盖
覆盖
路径:P1(TT)P2(FF)P3(FT)P4(TF)
3 条件覆盖
设计足够的测试用例,在 语句覆盖的基础上使得程序判 定中的每个条件能获得各种可 能的结果。
3 条件覆盖
入口
A> 1 AND B=0 F A=2 OR X > 1 F
T
X=X/A
T
X=X+1
返回
将每一个条件都 列出来: T1 A>1 T1 A<=1 T2 B=0 T2 B!=0 T3 A=2 T3 A!=2 X>1 T4 X<=1 T4
E. ⑤
F. ⑧
总 结
逻辑覆盖技术
发 现 错 误 能 力 由 弱 到 强 语句覆盖:每条语句至少执行一次 判定覆盖:每个判定的每个分支至少执行一次 条件覆盖:每个判定的每个条件应取到各种可能的值 判定-条件覆盖:同时满足判定覆盖和条件覆盖 条件组合覆盖:每个判定中各条件的每一种组合至少出 现一次 路径覆盖:使程序中每一条可能的路径至少执行一次
2 判定覆盖(分支覆盖)
入口
还有其它可能吗? 有!例如:301,211这 两组用例
A 用例1 用例2 2 1 B 0 1 X 4 1
A> 1 AND B=0 F A=2 OR X > 1 F
T
X=X/A
?
T X=X+1
返回
判定覆盖比语句覆 盖强,但是仍不能保证 判断条件的正确性。例 从定义上 如:第二个判断条件中 可知:判 的x>1若错写成了x<1, 定覆盖包 能否测试出来? 含了语句
覆盖程度从 低到高排列
强
覆盖准则的作用
说明
用于描述在测试过程中,被测对象被测试的程度,
有时候也称为软件测试覆盖准则或者测试数据完
备准则,可以:
1. 作为测试停止的标准,用于衡量测试是否充分; 2. 作为选取测试数据的依据,满足相同覆盖准则的测 试数据是等价的.
逻辑覆盖例题
程序如下: function js(float A,float B,float X) { if(( A>1)&&(B=0)) X=X/A; if((A==2)||(X>1)) X=X+1; }
约需要10微秒(奔腾4 1.7G),且一年365天每
天24小时不停机,请回答:如果循环次数为10的 话,遍历图中所有路径需要多长时间? 结论是:41+42+43+……+410,需要14秒左右的时 间 如果循环次数为20次,100次时,结果又如何? 结论是:循环20次,需要约4072小时,循环100 次则大约需要6.79*1047年
3 条件覆盖 测试用例 覆盖分支 条件取值
T1, T 2, T 3, T 4
覆盖路径 P1(TT)
(204)(213) A>1, B=0, A=2, X>1
(101)(101) A<=1,B=0, A!=2, X<=1 (211)(212) A>1, B!=0, A=2 ,X<=1
T1, T 2, T 3, T 4
5 条件组合覆盖
设计足够的测试用例,使 得每个判定中的条件的各种可 能组合都至少出现一次。
5 条件组合覆盖 可能的条件组合: (1)A>1,B=0 (2)A>1,B≠0 (3)A≤1,B=0 (4)A≤1,B≠0 (5)A=2,x>1 (6)A=2,x≤1 (7)A≠2,x>1 (8)A≠2,x≤1 相应的输入数据: A=2,B=0,x=4 满足(1)和(5) A=2,B=1,x=1 满足(2)和(6) A=1,B=0,x=2 满足(3)和(7) A=1,B=1,x=1 满足(4)和(8)
供选择的答案 A:① 语句覆盖 ② 条件覆盖 ③ 判定覆盖 ④ 路径覆盖 B~F:① Ⅰ和Ⅱ组 ② Ⅱ和Ⅲ组 ③ Ⅲ和 Ⅳ组 ④ Ⅰ和 Ⅳ组 ⑤ Ⅰ、 Ⅱ、 Ⅲ组 ⑥ Ⅱ、 Ⅲ、 Ⅳ组 ⑦ Ⅰ、 Ⅲ、 Ⅳ ⑧ Ⅰ、 Ⅱ、 Ⅳ组
解答:A. ④ B. ⑤ C. ⑧
D. ④
T
X=X/A
输出
?
T X=X+1
返回
路径:P1(TT)P2(FF)P3(FT)P4(TF)
只包含了 P1一条 第一个判断中的 逻辑运算符 路径,所以语句 “AND”若错写 覆盖的覆盖程度 成了“OR”,能否 是最弱的 测试出来?
2 判定覆盖
设计足够的测试用例,使 得在语句覆盖的基础上,程序 中每个判定的取“真”分支和 取“假”分支至少都执行一次 ,判定覆盖又称分支覆盖。
练习一
1.如图显示某程序的逻辑结构。试为它设计足够
的测试用例,分别实现对程序的判定覆盖、条件 覆盖和条件组合覆盖。
覆盖种类
Байду номын сангаас判定覆盖
需满足的条件
A>0, B=0 A>0, B0或 A0, B=0或 A0, B0 以下四种情况各出现一次 B=0 B0
测试数据
A=2, B=0 A=2, B=1或 A=0, B=0或 A=-1, B=1 A=2,B=0 A=-1,B=1 A=2, B=0 A=2, B=1
P2(FF)
T1, T 2, T 3, T 4
P3(FT)
3 条件覆盖
入口
用例1 用例2 A 2 1 A 用例1 用例2 1 2 B 0 1 B 0 1 X 4 1 X 3 1
A> 1 AND B=0 F A=2 OR X > 1 F
T
X=X/A
T
X=X+1
思考: 判定覆盖和条件 覆盖的关系
?
是否满足判定覆 盖?
• 2.白盒测试 白盒测试:已知产品的内部工作过程,可以通 过测试证明每种内部操作是否符合设计规格要求, 所有内部成分是否以经过检查。 软件的白盒测试是对软件的过程性细节做细致 的检查,它允许测试人员利用程序内部的逻辑结构 及有关信息,设计或选择测试用例,对程序所有逻 辑路径进行测试,通过在不同点检查程序状态,确 定实际状态是否与预期的状态一致。因此白盒测试 又称为结构测试或逻辑驱动测试。
T
X=X/A
用例2
T
X=X+1
返回
判定/条件覆盖仍有缺陷。从表面上看, 它测试了所有条件的所有可能结果,但事实上 并不是这样。因为某些条件掩盖了另一些条件。 例如,在逻辑表达式中,如果“与”表达式中 某一条件为“假”,则整个表达式的值为 “假”,这个表达式中另外的几个条件就不起 作用了。同样地,如果在“或”表达式中,某 一条件为“真”,则整个表达式的值为“真”, 其它条件也就不起作用了。因此,采用判定/ 条件覆盖时,逻辑表达式中的错误不一定能测 试出来。
显然,满足条件组合覆盖的测试数据,也一定满足判定 覆盖、条件覆盖和判定/条件覆盖标准。
5 条件组合覆盖 TEST CASES: A=2,B=0,x=4 A=2,B=1,x=1 A=1,B=0,x=2 A=1,B=1,x=1
入口
A> 1 AND B=0 F A=2 OR X > 1 F
T
X=X/A
?
第3章 白盒测试方法
把程序看成装在一个透明的白盒子里,程序的结构和处理 过程完全可见,按照程序的内部逻辑测试程序,以检查程 序中的每条通路是否都能按照预先要求正确工作。