白盒测试用例设计方法
白盒测试有哪些测试方法

白盒测试的常见测试方法白盒测试是软件测试中的一种重要方法,旨在检查程序的内部结构、逻辑和代码覆盖率。
通过深入了解程序的内部工作原理,白盒测试可以发现潜在的设计缺陷和编码错误。
下面介绍了几种常见的白盒测试方法:1. 语句覆盖测试语句覆盖测试是一种基本的白盒测试方法,确保每个代码语句至少被执行一次。
测试人员通过设计测试用例,以覆盖程序中的所有语句,从而验证代码的正确性。
2. 判定覆盖测试判定覆盖测试也称为分支覆盖测试,旨在确保程序中所有可能的条件判断语句都被测试到。
测试用例需要覆盖每个条件的不同取值,以确保程序在各种条件下能够正确运行。
3. 条件覆盖测试条件覆盖测试是判定覆盖测试的进一步扩展,除了测试每个条件判断语句外,还要确保每个条件的各种组合情况都被覆盖到。
这样可以有效地捕捉到逻辑错误和边界情况。
4. 路径覆盖测试路径覆盖测试是白盒测试中最严格的一种方法,需要覆盖程序中所有可能的执行路径。
通过分析程序的控制流图,设计测试用例以覆盖每条路径,可以发现隐藏在代码中的逻辑错误和潜在的漏洞。
5. 边界值分析边界值分析是一种常用的白盒测试方法,用于确定在边界情况下程序的行为。
通过测试最小和最大边界值、边界附近的数值情况,可以检测程序是否正确处理了特殊情况。
总结白盒测试是一种全面而严格的测试方法,通过对程序内部结构进行深入分析,可以有效地检测程序中的潜在问题。
以上介绍的几种测试方法是白盒测试中常用的手段,测试人员可以根据实际情况选择适合的方法来提高测试效率和覆盖率。
通过综合运用这些方法,可以确保软件产品质量,提高用户体验。
白盒测试语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖(转)

⽩盒测试语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖(转)转⾃:⽩盒作为测试⼈员常⽤的⼀种测试,越来越受到测试⼯程师的重视。
⽩盒测试并不是简单的按照⽤例,⽽是需要根据不同的测试,结合不同的测试对象,适合的⽅法进⾏测试。
因为对于不同复杂度的代码逻辑,可以衍⽣出许多种执⾏路径,只有适当的测试⽅法,才能帮助我们从代码的迷雾森林中找到正确的⽅向。
本⽂介绍六种⽩盒⼦测试⽅法:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖。
⽩盒测试的概述 由于逻辑错误和不正确假设与⼀条路径被运⾏的可能性成反⽐。
由于我们经常相信某逻辑路径不可能被执⾏, ⽽事实上,它可能在正常的情况下被执⾏。
由于代码笔误是随机且⽆法杜绝的,因此我们要进⾏⽩盒测试。
⽩盒测试⼜称结构测试,透明盒测试、逻辑驱动测试或代码的测试。
⽩盒测试是⼀种测试⽤例设计⽅法,盒⼦指的是被测试的,⽩盒指的是盒⼦是可视的,你清楚盒⼦内部的东西以及⾥⾯是运作的。
⽩盒的测试⽤例需要做到: ·保证⼀个模块中的所有独⽴路径⾄少被使⽤⼀次 ·对所有逻辑值均需测试 true 和 false ·在上下边界及可操作范围内运⾏所有循环 ·检查内部结构以确保其有效性 ⽩盒测试的⽬的:通过检查软件内部的逻辑结构,对软件中的逻辑路径进⾏覆盖测试;在程序不同地⽅设⽴检查点,检查程序的状态,以确定实际运⾏状态与预期状态是否⼀致。
⽩盒测试的特点:依据软件设计说明书进⾏测试、对程序内部细节的严密检验、针对特定条件设计测试⽤例、对软件的逻辑路径进⾏覆盖测试。
⽩盒测试的步骤: 1.测试计划阶段:根据需求说明书,制定测试进度。
2.测试设计阶段:依据程序设计说明书,按照⼀定规范化的⽅法进⾏软件结构划分和设计测试⽤例。
3.测试执⾏阶段:输⼊测试⽤例,得到测试结果。
4.测试总结阶段:对⽐测试的结果和代码的预期结果,错误原因,找到并解决错误。
软件测试实验报告白盒测试

预期结果
1
array[8,9,10,11] key10
1-2-3-4-5-6-8-10-11-4-5-6-7
7
2
array[8,9,10,11] key25
1-2-3-4-5-6-8-10-11-4-5-6-8-10-11-4-12
-1
3
array[8,9,10,11] key8
1-2-3-4-5-6-8-9-4-5-6-7
2
A=12,B=12,C=12
12459
等边三角形
3
A=12,B=12,C=15
124679
等腰三角形
4
A=13,B=14,C=15
124689
一般三角形
2.
publicclassrer {
publicstaticvoidmain(String []args){
intarray[]={8,9,10,11};
5
条件覆盖
编号
输入数据
路径
预期结果
1
array[8,9,10,11] key10
1-2-3-4-5-6-8-10-11-4-5-6-7
7
2
array[8,9,10,11] key25
1-2-3-4-5-6-8-10-11-4-5-6-8-10-11-4-12
-1
3
array[8,9,10,11] key8
一般三角形
1、a+b<=c,a+c<=b,b+c<=a记T1、T2,T3第一个判定的取真分支
2、a+b>c,a+c<=b,b+c<=a记-T1、T2,T3,第一个判定的取假分支
白盒与黑盒的测试方法

白盒与黑盒的测试方法
白盒测试和黑盒测试是软件测试领域中常用的两种测试方法,它们的差异主要体现在测试者对系统实现的了解程度上。
白盒测试,也称为结构测试或透明测试,是基于对系统内部结构和代码的了解进行测试的方法。
白盒测试者通常可以访问和了解系统的源代码和设计文档,从而可以了解系统的内部逻辑、控制流等细节。
白盒测试通常通过以下方法来测试系统:
1. 代码覆盖:通过检查测试用例是否覆盖了代码中的各个语句、分支、路径等,以评估测试的完整性。
2. 路径分析:通过分析系统的控制流图,识别出可能的执行路径并设计测试用例。
3. 边界值测试:通过针对输入和输出的边界值进行测试,以验证系统在边界条件下的正确性。
4. 单元测试:测试系统的各个独立模块,以确保每个模块的功能正确。
黑盒测试,也称为功能测试或封闭测试,是基于对系统外部行为的观察和分析进行测试的方法。
黑盒测试者对系统的内部结构和实现方式不了解,只能根据系统的功能规格和需求进行测试。
黑盒测试通常通过以下方法来测试系统:
1. 等价类划分:将输入值划分为等价类,选择代表性的测试用例进行测试。
2. 边界值分析:识别出输入和输出的边界值,设计测试用例以验证系统在边界条件下的正确性。
3. 功能性测试:测试系统是否按照规格和需求文档中描述的功能进行正确操作。
4. 错误处理测试:测试系统对于无效输入、异常情况或错误操作的处理是否正确。
总的来说,白盒测试注重系统内部的覆盖和逻辑正确性,而黑盒测试注重系统的外部功能和用户体验。
两种测试方法在实际应用中通常会结合使用,以提高测试的全面性和有效性。
白盒测试黑盒测试区别举例

白盒测试和黑盒测试的区别举例在软件测试领域,白盒测试和黑盒测试是两种常见的测试方法,它们在测试目的、实施方式和适用场景上有着明显的区别。
本文将从具体举例分析白盒测试和黑盒测试的差异,帮助读者更好地理解两者之间的区别。
白盒测试白盒测试又称为结构化测试或逻辑驱动测试,是一种基于程序内部逻辑和结构进行测试的方法。
它侧重于理解代码的内部工作原理和逻辑结构,通过检查程序的代码、路径覆盖率等方面来评估测试质量。
举例来说,假设有一个简单的函数用于计算两个数的和:def add(x, y):result = x + yreturn result在白盒测试中,测试人员会针对上述函数编写测试用例,覆盖不同的路径和边界条件,以保证程序的逻辑正确性。
比如,测试用例可以包括输入两个正数、两个负数、一个正数一个负数等情况。
黑盒测试黑盒测试又称为功能测试或行为驱动测试,是一种基于软件需求和规格说明进行测试的方法。
测试人员不需要了解程序的内部工作原理,而是通过输入输出的观察来评估程序的正确性。
继续以上述加法函数的例子,黑盒测试则关注函数的功能是否符合预期需求。
测试人员会编写测试用例,根据输入和输出的关系来验证函数的正确性,而不考虑函数内部的实现细节。
例如,黑盒测试的测试用例可能包括输入两个正数、两个负数、一个正数一个负数等情况,观察输出结果是否符合预期的加法运算结果。
白盒测试和黑盒测试的区别1.测试对象不同:白盒测试关注程序的内部结构和逻辑,而黑盒测试关注程序的功能和用户需求。
2.测试重点不同:白盒测试侧重于路径覆盖和代码执行逻辑,黑盒测试侧重于功能是否符合需求。
3.测试用例设计方法不同:白盒测试需要了解程序内部结构,设计测试用例以覆盖不同路径和边界条件;黑盒测试则通过需求规格设计测试用例,验证程序的功能是否正确。
4.测试人员角色不同:白盒测试需要有编程和代码理解能力的测试人员,而黑盒测试相对更容易上手,适合非技术人员进行测试。
软件测试常见面试题及答案

软件测试常见面试题及答案软件测试常见面试题及答案1、白箱测试和黑箱测试是什么?什么是回归测试?答题建议:简述下概念即可。
2、单元测试、集成测试、系统测试的侧重点是什么?答题建议:围绕重点简单概括即可。
如下:单元测试的重点是系统的模块,包括子程序的正确性验证等。
集成测试的重点是模块间的衔接以及参数的传递等。
系统测试的重点是整个系统的运行以及与其他软件的兼容性。
3、设计用例的方法、依据有那些?答题建议:测试分为白盒测试和黑盒测试,回答时,要注意分开说。
白盒测试用例设计有如下方法:基本路径测试、等价类划分、边界值分析、覆盖测试、循环测试、数据流测试、程序插桩测试、变异测试。
依据就是详细设计说明书及其代码结构。
黑盒测试用例设计方法:基于用户需求的测试、功能图分析方法、等价类划分方法、边界值分析方法、错误推测方法、因果图方法、判定表驱动分析方法、正交实验设计方法。
依据是用户需求规格说明书,详细设计说明书。
4、一个测试工程师应具备那些素质和技能?答题建议:一个好的测试工程师,不仅要基础扎实,对自身的性格、责任心都有非常高的要求。
具体如下:(1)掌握基本的测试基础理论(2)本着找出软件存在的问题的态度进行测试,即客观吧,不要以挑刺形象出现(3)可熟练阅读需求规格说明书等文档(4)以用户的观点看待问题(5)有着强烈的质量意识(6)细心和责任心(7)良好的有效的沟通方式(与开发人员及客户)(8)具有以往的测试经验(9)能够及时准确地判断出高危险区在何处.5、集成测试通常都有那些策略?答题建议:大致说四点即可,当然说全更好。
集成测试有十种策略:(1)大爆炸集成(2)自顶向下集成(3)自底向上集成(4)三明治集成(5)分层集成(6)基干集成(7)基于功能的集成(8)基于消息的集成(9)基于风险的集成(10)基于进度的集成.。
软件测试案例-白盒测试覆盖案例
测试用例 通过路径
条件取值
x=4、y=6、z=5 abd
T1、T2、T3、T4
覆盖分支 bd
x=2、y=5、z=11 ace
-T1、-T2、-T3、- ce T4
分支条件覆盖从表面来看,它测试了所有条件的取值,
但是实际上某些条件掩盖了另一些条件。例如对于条件表达 式(x>3)&&(z<10)来说,必须两个条件都满足才能确定表达 式为真。如果(x>3)为假则一般的编译器不在判断是否 z<10了。对于第二个表达式(x= =4)||(y>5)来说,若 x==4测试结果为真,就认为表达式的结果为真,这时不再检 查(y>5)条件了。因此,采用分支条件覆盖,逻辑表达式 中的错误不一定能够查出来了。
ace
-T1、-T2、-T3、-T4 4和8
上面的测试用例覆盖了所有条件的可能取值的组合,覆 盖了所有判断的可取分支,但是却丢失了一条路径abe。
路径测试:
路径测试就是设计足够多的测试用例,覆盖被测试对象 中的所有可能路径。
在上面的测试用例中再添加一个测试用例则可对程序进 行了全部的路径覆盖。
测试用例 x=4、y=6、z=5 x=4、y=5、z=15 x=2、y=6、z=15 x=5、y=6、z=5
测试用例的输入为: { x=4、y=5、z=5} { x=2、y=5、z=5}
上面的两个测试用例虽然能够满足条件覆盖的要求,但 是也不能对判断条件进行检查,例如把第二个条件y>5错误 的写成y<5,、上面的测试用例同样满足了分支覆盖。
条件覆盖
条件覆盖就是设计若干个测试用例,运行被测试对象, 使得程序中每个判断的每个条件的可能取值至少执行一次。
白盒测试方法
白盒测试方法白盒测试是软件测试中的一种重要测试方法,它主要是针对软件内部结构进行测试的一种方法。
相对于黑盒测试,白盒测试更加关注软件的内部逻辑结构和代码覆盖率。
在软件开发过程中,白盒测试可以有效地发现代码中的错误和逻辑缺陷,保障软件质量和稳定性。
本文将介绍一些常见的白盒测试方法,帮助大家更好地理解和应用白盒测试。
首先,静态分析是一种常见的白盒测试方法。
静态分析是通过对软件源代码和设计文档进行分析,发现潜在的问题和错误。
静态分析可以通过代码审查、静态代码分析工具等方式进行,帮助开发人员发现代码中的潜在问题,提高代码质量。
静态分析可以在软件开发的早期阶段就发现问题,有助于提高软件的稳定性和安全性。
其次,代码覆盖率分析也是一种常用的白盒测试方法。
代码覆盖率分析是通过对软件的测试用例进行执行,统计代码执行的覆盖率情况。
通过代码覆盖率分析,可以了解测试用例对代码的覆盖情况,帮助测试人员发现未覆盖的代码逻辑,提高测试用例的完整性和有效性。
同时,代码覆盖率分析也可以帮助开发人员了解代码的执行情况,有助于发现代码中的潜在问题。
此外,路径覆盖测试也是白盒测试中的重要方法之一。
路径覆盖测试是通过测试用例覆盖软件中的所有可能执行路径,以发现潜在的逻辑错误和异常情况。
路径覆盖测试可以帮助测试人员全面了解软件的执行路径,发现代码中可能存在的逻辑错误,提高软件的质量和稳定性。
路径覆盖测试需要充分理解软件的逻辑结构和执行路径,设计合理的测试用例,以达到全面覆盖的测试效果。
最后,基本块覆盖也是白盒测试中常用的一种方法。
基本块覆盖是通过测试用例覆盖软件中的基本块,以发现代码中的潜在错误和逻辑缺陷。
基本块是指不包含分支语句的最小代码块,通过覆盖基本块可以帮助测试人员发现代码中可能存在的逻辑错误和异常情况。
基本块覆盖测试需要设计合理的测试用例,以覆盖软件中的所有基本块,帮助发现潜在的问题,提高软件的质量和稳定性。
总结来说,白盒测试是软件测试中的重要方法,通过对软件内部结构和代码的测试,可以帮助发现潜在的问题和错误,提高软件的质量和稳定性。
黑盒和白盒测试方法
黑盒和白盒测试方法黑盒测试介绍黑盒测试(black—box testing)又称功能测试、数据驱动测试或基于规范的测试。
用这种方法进行测试时,被测程序被当作看不见内部的黑盒。
在完全不考虑程序内部结构和内部特性的情况下,测试者仅依据程序功能的需求规范考虑确定测试用例和推断测试结果的正确性。
因此黑盒测试是从用户观点出发的测试,黑盒测试直观的想法就是既然程序被规定做某些事,那我们就看看它是不是在任何情况下都做的对。
完整的“任何情况”是无法验证的,为此黑盒测试也有一套产生测试用例的方法,以产生有限的测试用例而覆盖足够多的“任何情况”。
由于黑盒测试不需要了解程序内部结构,所以许多高层的测试如确认测试、系统测试、验收测试都采用黑盒测试。
黑盒测试首先是程序通常的功能性测试。
要求:每个软件特性必须被一个测试用例或一个被认可的异常所覆盖;用数据类型和数据值的最小集测试;用一系列真实的数据类型和数据值运行,测试超负荷、饱和及其他“最坏情况”的结果;用假想的数据类型和数据值运行,测试排斥不规则输入的能力;对影响性能的关键模块,如基本算法、应测试单元性能(包括精度、时间、容量等)。
不仅要考核“程序是否做了该做的?”还要考察“程序是否没做不该做的2”同时还要考察程序在其他一些情况下是否正常。
这些情况包括数据类型和数据值的异常等等。
下述几种方法:(a)等价类划分,(b)因果图方法,(c)边值分析法,(d)猜错法,(e)随机数法,就是从更广泛的角度来进行黑盒测试。
每一个方法都力图能涵盖更多的“任何情况”,但又各有长处,综合使用这些方法,会得到一个较好的测试用例集。
1.等价类划分等价类划分是一种典型的黑盒测试方法。
等价类是指某个输入域的集合。
它表示对揭露程序中的错误来说,集合中的每个输入条件是等效的。
因此我们只要在一个集合中选取一个测试数据即可。
等价类划分的办法是把程序的输入域划分成若干等价类,然后从每个部分中选取少数代表性数据当作测试用例。
白盒测试的概念和方法是什么
白盒测试的概念和方法是什么白盒测试是一种软件测试方法,也称为结构化测试或透明盒测试。
与黑盒测试不同,白盒测试是在了解被测试软件内部结构的基础上进行的测试。
1. 白盒测试的概念白盒测试是一种测试方法,旨在检查软件的内部逻辑和结构。
测试人员需要了解软件的内部代码、数据结构和算法,以便设计测试用例。
白盒测试通常由开发人员或专业测试人员执行。
它可以帮助发现程序中的错误和潜在缺陷,提高软件的质量和可靠性。
2. 白盒测试的方法2.1 静态分析在白盒测试中,静态分析是一种重要的方法。
它通过检查代码和文档来分析软件的内部结构。
在静态分析过程中,测试人员会审查源代码、设计文档和其他相关文档,以发现潜在的问题和错误。
2.2 单元测试单元测试是白盒测试的一种重要形式,旨在验证软件中的单个模块或单元是否按照预期工作。
单元测试通常由开发人员编写和执行,是软件开发过程中的关键组成部分。
通过单元测试可以及早发现和解决代码中的错误,提高软件的质量和稳定性。
2.3 集成测试集成测试是白盒测试的另一种重要形式,旨在验证多个模块之间的交互是否正确。
在集成测试过程中,测试人员会测试软件的不同部分之间的通信和数据交换,以确保系统作为一个整体的功能正常。
集成测试有助于发现模块集成时可能出现的问题和错误。
2.4 覆盖率分析覆盖率分析是白盒测试中常用的一种技术,用于衡量测试用例对代码的覆盖程度。
通过分析代码的覆盖率,测试人员可以确定哪些部分的代码已经被测试过,哪些部分还需要进一步测试,以及测试的质量和完整性。
覆盖率分析有助于提高测试用例的设计和执行效率。
结语白盒测试是一种重要的软件测试方法,可以帮助开发人员和测试人员发现代码中的问题和错误,提高软件的质量和可靠性。
通过静态分析、单元测试、集成测试和覆盖率分析等方法,测试人员可以充分了解软件的内部结构,有效地测试软件的功能和性能。
要做好白盒测试工作,测试人员需要具备扎实的技术功底和丰富的经验,确保软件开发过程中的质量和效率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
白盒测试用例设计方法 一、白盒测试 根据软件产品的内部工作过程,在计算机上进行测试,以证实每种内部操作是否符合设计规格要求,所有内部成分是否已经过检查。这种测试方法就是白盒测试。白盒测试把测试对象看做一个打开的盒子,允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。
不论是黑盒测试,还是白盒测试,都不可能把所有可能的输入数据都拿来进行所谓的穷举测试。因为可能的测试输入数据数目往往达到天文数字。下面让我们看两个例子。
假设一个程序P有输入X和Y及输出Z,参看图10-4-1。在字长为32位的计算机上运行。如果X 、Y只取整数,考虑把所有的X 、Y值都做为测试数据,按黑盒测试方法进行穷举测试,力图全面、无遗漏地“挖掘”出程序中的所有错误。这样做可能采用的测试数据组(Xi,Yi)的最大可能数目为:。如果程序P测试一组X、Y数据需要 1毫秒,且一天工作24小时,一年工作365天,要完成264组测试,需要5亿年。
图 10-4-1 黑盒子 而对一个具有多重选择和循环嵌套的程序,不同的路径数目也可能是天文数字。设给出一个如图 10-4-2所示的小程序的流程图,其中包括了一个执行达20次的循
环。那么它所包含的不同执行路径数高达 条,若要对它进行穷举测试,覆盖所有的路径。假使测试程序对每一条路径进行测试需要1毫秒,同样假定一天工作24小时,一年工作365 天,那么要想把如图 10-4-2所示的小程序的所有路径测试完,则需要3170年。 图 10-4-2 白盒测试中的穷举测试 以上的分析表明,实行穷举测试,由于工作量过大,实施起来是不现实的。任何软件开发项目都要受到期限、费用、人力和机时等条件的限制,尽管为了充分揭露程序中所有隐藏错误,需要针对所有可能的数据进行测试,但事实告诉我们,这样做是不可能的。
软件工程的总目标是充分利用有限的人力、物力资源,高效率、高质量、低成本地完成软件开发项目。在测试阶段既然穷举测试不可行,为了节省时间和资源,提高测试效率,就必须要从数量极大的可用测试用例中精心地挑选少量的测试数据,使得采用这些测试数据能够达到最佳的测试效果,能够高效率地把隐藏的错误揭露出来。
二、逻辑覆盖 逻辑覆盖是以程序内部的逻辑结构为基础的设计测试用例的技术。属白盒测试。这一方法要求测试人员对程序的逻辑结构有清楚的了解,甚至要能掌握源程序的所有细节。由于覆盖测试的目标不同,逻辑覆盖又可分为:语句覆盖、判定覆盖、判定-条件覆盖、条件组合覆盖及路径覆盖。
1.语句覆盖 语句覆盖就是设计若干个测试用例,运行被测程序,使得每一可执行语句至少执行一次。这种覆盖又称为点覆盖,它使得程序中每个可执行语句都得到执行,但它是最弱的逻辑覆盖准,效果有限,必须与其他方法交互使用。
2.判定覆盖 判定覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次。判定覆盖又称为分支覆盖。 判定覆盖只比语句覆盖稍强一些,但实际效果表明,只是判定覆盖,还不能保证一定能查出在判断的条件中存在的错误。因此,还需要更强的逻辑覆盖准则去检验判断内部条件。
3.条件覆盖 条件覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个判断的每个条件的可能取值至少执行一次。
条件覆盖深入到判定中的每个条件,但可能不能满足判定覆盖的要求。 4.判定-条件覆盖 判定-条件覆盖就是设计足够的测试用例,使得判断中每个条件的所有可能取值至少执行一次,同时每个判断本身的所有可能判断结果至少执行一次。换言之,即是要求各个判断的所有可能的条件取值组合至少执行一次。
判定-条件覆盖有缺陷。从表面上来看,它测试了所有条件的取值。但是事实并非如此。往往某些条件掩盖了另一些条件。会遗漏某些条件取值错误的情况。为彻底地检查所有条件的取值,需要将判定语句中给出的复合条件表达式进行分解,形成由多个基本判定嵌套的流程图。这样就可以有效地检查所有的条件是否正确了。
图 10-4-3(a) 复合判定的例子 图 10-4-3(b) 改为单个条件判定的嵌套结构的例子 5.多重条件覆盖 多重条件覆盖就是设计足够的测试用例,运行被测程序,使得每个判断的所有可能的条件取值组合至少执行一次。
这是一种相当强的覆盖准则,可以有效地检查各种可能的条件取值的组合是否正确。它不但可覆盖所有条件的可能取值的组合,还可覆盖所有判断的可取分支,但可能有的路径会遗漏掉。测试还不完全。
6.路径测试 路径测试就是设计足够的测试用例,覆盖程序中所有可能的路径。这是最强的覆盖准则。但在路径数目很大时,真正做到完全覆盖是很困难的,必须把覆盖路径数目压缩到一定限度。下面我们做一分析。
三、关于控制结构测试的一些讨论 1.分支结构的路径数 当程序中判定多于一个时,形成的分支结构可以分为两类:嵌套型分支结构和连锁型分支结构。如图 10-4-4所示。对于嵌套型分支结构,若有n个判定语句,则需要n+1个测试用例;但对连锁型分支结构,若有n个判定语句,则需要有 个测试用例,去覆盖它的 条路径。当n较大时将无法测试。 (a)嵌套型分支结构 (b)连锁型分支结构 图 10-4-4 分支的两种类型 为减少测试用例的数目,可采用试验设计法,抽取部分路径进行测试。由于抽样服从均匀分布,因此,在假定各条路径的重要性相同,或暂不明确各条路径的重要性的情况下可以做到均匀抽样。如果明确了各条路径的重要性,还可以采取加权的办法,筛选掉部分路径,再用如下的措施进行抽样。具体步骤如下:
(1) 设耦合型分支结构中有n个判定,计算满足关系式的最小自然数m;
(2) 设,取正交表L4,并利用它设计测试数据。 例如,一个耦合型分支结构中有三个判定语句P1,P2,P3。它全部路径是23=8条。先计算的t,得t= 4。取正交表L4,如图10-4-5(a)所示,把每一 列当做一个判定,每一行当做可取的测试用例,则正交表L4最多可取三个判定,分别代之以P1,P2,P3。判定P1,P2,P3的取假分支和取真分支分别记作S1、S2;S3、S4;S5、S6,用各个判定的取假分支取代正交表L4中的“0”,用取真分支取代正交表中的“1”,就建立起一个测试路径矩阵,如图 10-4-5(b)所示。这样,测试路径数目从条减少到3+1=4条。
图 10-4-5(a) 正交表L4 图 10-4-5(b) 路径抽样矩阵 2.条件测试的策略 程序中的条件分为简单条件和复合条件。简单条件是一个布尔变量或一个关系表达式(可加前缀NOT),复合条件由简单条件通过逻辑运算符(AND、OR、NOT)和括号连接而成。如果条件出错,至少是条件中某一成分有错。条件中可能的出错类型有:布尔运算符错、布尔变量错、布尔括号错、关系运算符错、算术表达式错。
如果在一个判定的复合条件表达式中每个布尔变量和关系运算符最多只出现一次,而且没有公共变量,应用一种称之为BRO(分支与关系运算符)的测试法可以发现多个布尔运算符或关系运算符错,以及其他错误。
BRO策略引入条件约束的概念。设有n个简单条件的复合条件C,其条件约束为,其中是条件C中第i个简单条件的输出约束。如果 在C的执行过程中,其每个简单条件的输出都满足D中对应的约束,则称条件C的条件约束D由C的执行所覆盖。特别地,布尔变量或布尔表达式的输出约束必须是真(t)或假(f);关系表达式的输出约束为符号>、=、<。
(1) 设条件为。其中是布尔变量, 的输出约束为 ,在此,和或为t或为f。则 是可能的一个约束。覆盖此约束的测试(一次运行)将令 为t,为f。BRO策略要求对 的可能约束集合 中的每一个,分别设计一组测试用例。如果布尔运算符有错,这三组测试用例的运行结果必有一组导致 失败。
(2) 设条件为。其中是布尔表达式,和是算术表达式,的输出约束为,在此,或为t或为f;则是<、= 或>。因此,只有与中的不同,可以修改 的约束集合,导出的约束集合。因为在中,“t”相当于“=”,“f”相当于“<”或“>”,则的约束集合为 。据此设计4组测试用例,检查中可能的布尔或关系运算符中的错误。
(3) 设条件为。其中都是算术表达式, 的输出约束为 ,在此,和的约束均为<、=、>。 中只有与中的不同,可以修改 的约束集合,导出的约束集合。因为在 中,“t” 相当于“>”,"f"相当于“<”或“=”,则 的约束集合为 。根据这个约束集合设计测试用例,就能够检测 中的关系运算符中的错误。
3.循环测试 循环分为4种不同类型:简单循环、连锁循环、嵌套循环和非结构循环,见图 10-4-6。 图 10-4-6 循环的分类 对于简单循环,测试应包括以下几种,其中的n表示循环允许的最大次数。 (1) 零次循环:从循环入口直接跳到循环出口。 (2) 一次循环:查找循环初始值方面的错误。 (3) 二次循环:检查在多次循环时才能暴露的错误。 (4) m次循环:此时的m<n,也是检查在多次循环时才能暴露的错误。 ·最大次数循环、比最大次数多一次的循环、比最大次数少一次的循环。 对于嵌套循环,不能将简单循环的测试方法简单地扩大到嵌套循环,因为可能的测试数目将随嵌套层次的增加呈几何倍数增长。这可能导致一个天文数字的测试数目。下面给出一种有助于减少测试数目的测试方法。
·除最内层循环外,从最内层循环开始,置所有其他层的循环为最小值; ·对最内层循环做简单循环的全部测试。测试时保持所有外层循环的循环变量为最小值。另外,对越界值和非法值做类似的测试。
·逐步外推,对其外面一层循环进行测试。测试时保持所有外层循环的循环变量取最小值,所有其它嵌套内层循环的循环变量取“典型”值。
·反复进行,直到所有各层循环测试完毕。