第四章-白盒测试及其用例的设计汇总
第四章 白盒测试用例设计方法
本科《软件测试与质量保证》
SEI of ECNU 孙海英 版权所有©
4-13
基本路径(选第一条基本路经希 望二直结点尽可能的多)
形式化定义
路径p=vb, v1, v2, ..., vn, ve是由有顺序的一系列节点组成且节点之间 存在这样的关系{<vb, v1>, <v1,v2>, ..., <vn, ve>} ⊆ E 一条路径p=vb, v1, v2, ..., vn, ve是一条基本路径当且仅当p中不包含 两个子序列s1,s2, s1=s2 且 length(s1)>1 and length(s2)>1. s1,s2
本科《软件测试与质量保证》 SEI of ECNU 孙海英 版权所有© 4-3
不可能进行彻底的白盒测试
左图是具有某程序的流程图,假设循环10次,请计算一 下有多少条程序执行通路?假设由图中得到的所有路径 都是可执行路径,执行一次循环大约需要10微秒(奔腾 4 1.7G),且一年365天每天24小时不停机,请回答: 如果循环次数为10的话,遍历图中所有路径需要多长时 间? 结论是:41+42+43+……+410,需要14秒左右的时间 如果循环次数为20次,100次时,结果又如何? 结论是:循环20次,需要约4072小时,循环100次则 大约需要6.79*1047年
1. 2.
是一条从起始节点到终止节点的路径 至少包含一条其它基本路径没有包含的边
SEI of ECNU 孙海英 版权所有© 4-14
本科《软件测试与质量保证》
基本路径
基本路径
1. 2. 3. 4. 5.
1-2-11 1-2-3-4-5-6-10-2-11 1-2-3-4-5-7-10-2-11 1-2-3-8-9-10-2-11 1-2-3-8-10-2-11
白盒测试测试用例设计
白盒测试测试用例设计1. 简介白盒测试是一种软件测试方法,通过检查软件的内部结构和代码来验证其功能的正确性。
在白盒测试中,测试用例需要针对软件的源代码进行设计,以确保覆盖所有可能的路径和条件。
本文将介绍白盒测试测试用例的设计过程和方法。
2. 测试目标白盒测试的主要目标是验证软件的内部逻辑是否正确,能够覆盖所有的代码路径并检查各种条件下的正确性。
通过设计有效的测试用例,可以发现潜在的错误并提高软件质量。
3. 测试用例设计步骤3.1 分析代码首先需要对软件的源代码进行分析,了解每个模块的功能和内部逻辑。
通过代码分析可以确定哪些部分需要进行测试,以及可能存在的边界条件和特殊情况。
3.2 确定测试条件根据代码分析的结果,确定需要测试的条件和路径。
这些条件可以包括函数的输入范围、边界值、异常情况等。
3.3 设计测试用例根据确定的测试条件,设计具体的测试用例。
测试用例应该覆盖不同的条件和路径,以确保软件在各种情况下都能正确运行。
3.4 确认测试用例设计好测试用例后,需要经过仔细审查和确认,确保每个测试用例都能有效地检查软件的功能。
4. 示例假设有一个简单的函数用于计算两个数的和:def add(a, b):return a + b基于这个函数,可以设计以下测试用例: - 输入正整数:测试a和b都为正整数的情况。
- 输入负整数:测试a和b都为负整数的情况。
- 输入零:测试a或b 为零的情况。
- 输入浮点数:测试a和b为浮点数的情况。
- 输入特殊字符:测试a或b包含特殊字符的情况。
5. 结论白盒测试是一种重要的软件测试方法,通过设计有效的测试用例可以帮助发现潜在问题并提高软件质量。
在测试用例设计过程中,需要仔细分析代码、确定测试条件并设计具体的测试用例,以确保软件在各种情况下都能正确运行。
希望本文对读者在白盒测试测试用例设计方面有所帮助。
白盒测试用例设计方法
1白盒测试用例设计方法1.1白盒测试简介白盒测试又称结构测试、逻辑驱动测试或基于程序的测试,一般多发生在单元测试阶段。
白盒测试方法主要包括逻辑覆盖法,基本路径法,程序插装等。
这里重点介绍一下常用的基本路径法,对于逻辑覆盖简单介绍一下覆盖准则。
1.2基本路径法在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出独立路径集合,从而设计测试用例,设计出的测试用例要保证在测试中程序的每一个可执行语句至少执行一次。
在介绍基本路径测试方法(又称独立路径测试)之前,先介绍流图符号:图1如图1所示,每一个圆,称为流图的节点,代表一个或多个语句,流程图中的处理方框序列和菱形决策框可映射为一个节点,流图中的箭头,称为边或连接,代表控制流,类似于流程图中的箭头。
一条边必须终止于一个节点,即使该节点并不代表任何语句,例如,图2中两个处理方框交汇处是一个节点,边和节点限定的范围称为区域。
图2任何过程设计表示法都可被翻译成流图,下面显示了一段流程图以及相应的流图。
注意,程序设计中遇到复合条件时(逻辑or, and, nor 等),生成的流图变得更为复杂,如(c)流图所示。
此时必须为语句IF a OR b 中的每一个a和b 创建一个独立的节点。
(c)流图独立路径是指程序中至少引进一个新的处理语句集合,采用流图的术语,即独立路径必须至少包含一条在定义路径之前不曾用到的边。
例如图(b)中所示流图的一个独立路径集合为:路径1:1-11路径2:1-2-3-4-5-10-1-11路径3:1-2-3-6-8-9-10-1-11路径4:1-2-3-6-7-9-10-1-11上面定义的路径1,2,3 和4 包含了(b)流图的一个基本集,如果能将测试设计为强迫运行这些路径,那么程序中的每一条语句将至少被执行一次,每一个条件执行时都将分别取tru e 和false(分支覆盖)。
白盒测试及其用例的设计
但当判断条件较为复杂时,它未必能发现每个条件的错误:
((x>3)&&(z<10))为真和为假各取一次(但并不管是怎么取到的)
2. 判定覆盖(也称为分支覆盖):设计若干个测试用例,运 行所测程序,使程序中每个判断的取真分支和取假分支各 至少执行一次; 判定覆盖是把程序中每个分支都覆盖到;
if (x>=0) y=x;
白盒法需要了解程序的内部结构和详细的处 理过程,它按照程序内部逻辑测试程序,检 验程序中每条通路是否按预定要求正确工作。
对于白盒测试,即使每条路径都测试了,程序仍 可能有错。再如由于疏忽漏写了路径,白盒测试也发 现不了。
所以,白盒法不能使测试达到彻底。为了用有限 的测试发现更多的错误,需精心设计测试用例。黑盒 法、白盒法是设计测试用例的基本策略,每一种方法 对应着多种设计测试用例的技术,每种技术可达到一 定的软件质量标准要求。
6. 路径覆盖:设计足够多的测试用例,运行所测程序,要覆盖 程序中所有可能的路径 它是最强的覆盖准则,但只有在程序中有多个复杂分支时, 才能看出和之前几种覆盖的区别
void DoWork(int x,int y,int z)
{
int k=0,j=0;
if((x>3)&&(z<10))
{
k=x*y-1; //语句块1
x4y5z5abdx2y5z5ace上面的两个测试用例虽然能够满足分支覆盖的要求但是也不能实现对判断条件的检查效果如果把第二个条件y5错误地写成y5上面的测试用例同样满足了分支覆盖即查不出写错了这个事实使程序中每个判断的取真分支和取假分支至少执行一次条件覆盖就是设计若干个测试用例运行被测试对象使得程序中每个判断的每个条件的所有可能取值至少执行一次
白盒测试用例设计.doc
2. 自盒测试方法白盒测试以程序的内部逻辑为依据.合理的白盒测试 , 就是要选取足够的测试用例,对源代码实现比较充分的覆盖,以便尽可能多地发现程序中的错误。
1) 逻辑覆盖法 (LOGICCOVERAGE)逻辑覆盖是一组覆盖方法的总称。
按照由低到高对程序逻辑覆盖的程度,又可区分为以下几种覆盖一语句覆盖 : 使被测程序的每条语句至少执行一次 ;一判定覆盖: 使被测程序的每一分支至少执行一次 , 故又称分支覆盖 ;一条件覆盖 : 要求判定中的每个条件均按“真”、“假”两种结果至少执行一次。
如果判定中仅含一个条件 , 条件覆盖也就是判定覆盖 ; 但若判定中包含两个或更多的每件 , 情况就不同了。
例如对于判定表达式(A > 1)AND (B=0)要求所选的测试用例能使① A > 1; ② A <1; ③ B=0; 和④ B!=0。
这 4 种结果至少各出现一次。
而在判定覆盖中 , 只要求 (A > l)AND (B=O) 为 " 真 " 出现一次 , 为 " 假 " 也出现一次。
简言之 , 后者把判定看成一个整体 , 前者却要求分别考虑判定中的每一个条件。
一条件组合覆盖:这是覆盖程度比前 3 种都强的一种覆盖。
它与条件覆盖的区别是 , 它不是简单地要求每个条件都出现 " 真 " 与 " 假 " 两种结果 , 而是要求让这些结果的所有可能组合都至少出现一次。
仍以判定 |(A > 1)AND (B=O)为例,条件(A >1)可出现2种结果,(B=0)也可能有2种结果,两者相与,将出现2*2=4种可能的组合。
即:A>1,B=0 产生“真”AND“真”A>1,B!=0 产生“真”AND“假”A<1,B=0 产生“假”AND“真”A<=1,B!=0 产生“假”AND“假”以上共介绍了4种覆盖。
白盒测试及用例设计
白盒测试白盒测试(White-box Testing,又称逻辑驱动测试,结构测试)是把测试对象看作一个打开的盒子。
利用白盒测试法进行动态测试时,需要测试软件产品的内部结构和处理过程,不需测试软件产品的功能。
白盒测试又称为结构测试和逻辑驱动测试。
白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。
其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。
六种覆盖标准:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖发现错误的能力呈由弱至强的变化。
语句覆盖每条语句至少执行一次。
判定覆盖每个判定的每个分支至少执行一次。
条件覆盖每个判定的每个条件应取到各种可能的值。
判定/条件覆盖同时满足判定覆盖条件覆盖。
条件组合覆盖每个判定中各条件的每一种组合至少出现一次。
路径覆盖使程序中每一条可能的路径至少执行一次。
白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能,白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。
"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。
"白盒"法是穷举路径测试。
在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。
贯穿程序的独立路径数是天文数字。
但即使每条路径都测试了仍然可能有错误。
第一,穷举路径测试决不能查出程序违反了设计规范,即程序本身是个错误的程序。
第二,穷举路径测试不可能查出程序中因遗漏路径而出错。
第三,穷举路径测试可能发现不了一些与数据相关的错误。
白盒测试六种覆盖方法摘要:白盒测试作为测试人员常用的一种测试方法,越来越受到测试工程师的重视。
白盒测试并不是简单的按照代码设计用例,而是需要根据不同的测试需求,结合不同的测试对象,使用适合的方法进行测试。
4(2)第4章 白盒测试用例2-基本路径法
TC3
TC4
练习题
Logo
• 根据左图给出的程序流程 图,完成以下要求:
(1)画出相应的控制流 图。
(2)计算环形复杂度。
(3)给出相应的图矩阵。 (4)找出程序的独立 路径集合。
f b
c
3
d
4
e
5
• 在控制流图中只 有两种图形符号, 它们是: 1. 节点:以标有编 号的圆圈表示。 2. 控制流线或弧: 以箭头表示。
1. 程序的控制流图
Logo
节点
1、标有编号的圆圈 2、程序流程图中矩形框所表示的处 理 3、菱形表示的两个甚至多个出口判 断 4、多条流线相交的汇合点
1. 程序的控制流图
设计测试用例
Logo
• 根据上一步得出的独立路径,涉及测试用例, 如下: 输入数据 预期输出 TC1 TC2 irecordnum=0 itype=0 irecordnum=1 itype=0 irecordnum=1 itype=1 irecordnum=1 itype=2 x=0 y=0 x=0 y=0 x=10 y=0 x=0 y=20
Logo
X=X/A
2
3
( a ) 流程图
1
A>1
B=0
2
X=X/A
4 (d ) 流程图 c 对应的流图
3
( c ) 详细流程图
1. 程序的控制流图
Logo
1. 程序的控制流图
Logo
2. 程序环路复杂性
Logo
• 环路复杂性即McCabe复杂性度量,在 进行程序的基本路径测试时,从程序 的环路复杂性可导出程序基本路径集 合中的独立路径条数。
• 程序的环路复杂性给出了程序基本 路径集中的独立路径条数,这是确 保程序中每个可执行语句至少执行 一次所必需的测试用例数目的上界。
白盒测试及用例的设计
条件覆盖率
详细描述
为了提高条件覆盖率,可以增加 更多的测试用例或优化现有的测 试用例。
04
总结词
高条件覆盖率意味着测试用例对 程序中的条件进行了全面的测试, 但并不能保证所有可能的条件结 果都已覆盖。
01 03
总结词
条件覆盖率是衡量测试用例覆盖 程序中条件语句(如if、while等) 中的条件的程度的指标。
TestNG是Java语言的测试框架,具有灵活的测试用例 管理功能。
详细描述
TestNG支持多种测试类型,如单元测试、集成测试和 端到端测试。它提供了丰富的断言方法和数据驱动测试 ,有助于提高测试效率和代码覆盖率。
案例三:使用Selenium进行白盒测试
总结词
Selenium是一个用于Web应用程序 的自动化测试框架。
边界值分析法
总结词
边界值分析法是一种白盒测试用例设计方法 ,它关注输入域的边界值,通过测试边界值 和附近的值来验证软件的健壮性。
详细描述
边界值分析法主要针对输入域的边界值进行 测试,因为这些值在软件中往往容易出现问 题。通过测试边界值和附近的值,可以有效 地发现软件在处理异常情况时的缺陷和错误 。这种方法有助于提高测试的覆盖率,确保
详细描述
Selenium支持多种浏览器和操作系统, 能够模拟用户操作,如点击、输入等。 通过编写测试脚本,可以实现对Web 应用程序的全面白盒测试,确保功能 和用户体验的正确性。
感谢您的观看
THANKS
缺陷跟踪与修复
缺陷管理
对发现的问题进行跟踪管理,确保问题得到及时修复。
缺陷验证
对修复的问题进行验证,确保问题已被正确修复。
白盒测试中的测试用例设计与管理
白盒测试中的测试用例设计与管理在软件开发过程中,测试是一个至关重要的环节,能够帮助发现和修复潜在的错误和缺陷。
而测试用例的设计与管理则是测试工作中的关键步骤之一,它能够确保测试的全面性和有效性。
本文将探讨白盒测试中的测试用例设计与管理。
一、测试用例设计测试用例设计是测试工作中的核心步骤,它需要经过多方面的考虑和分析。
下面是一些常用的测试用例设计方法和技巧。
1. 功能测试用例设计功能测试用例是验证软件功能是否按照需求规格书中所定义的行为来工作的测试用例。
它可以从需求规格中提取出的功能点出发,设计相应的测试用例。
例如,在一个电商网站中,可以设计以下功能测试用例:用户登录、商品搜索、加入购物车等。
2. 边界值测试用例设计边界值测试用例是通过考察输入值的边界情况来设计的测试用例。
这是因为在边界处常常存在问题,边界条件测试能够发现潜在的边界错误。
例如,对于一个要求输入1-100之间整数的功能,可以设计以下边界值测试用例:输入1, 输入100, 输入0, 输入101。
3. 异常测试用例设计异常测试用例是为了测试系统在异常情况下的行为而设计的测试用例。
它主要是通过模拟系统可能出现的异常情况,如输入非法字符、输入空值等,来进行测试。
例如,对于一个验证邮箱格式的功能,可以设计以下异常测试用例:输入@符号、输入无效字符等。
二、测试用例管理测试用例管理是测试过程中必不可少的一环,它有助于提高测试的效率和质量。
下面是一些测试用例管理的方法和工具。
1. 用例编号和描述为了方便测试用例的管理和跟踪,可以为每个测试用例分配一个唯一的编号,并在描述中详细说明用例的目的、输入和预期结果。
这样可以使测试用例更加清晰和易于理解。
2. 测试用例库建立一个测试用例库,将所有的测试用例按模块和功能进行分类,以便于管理和查找。
可以使用Excel、测试管理工具等来创建和维护这个测试用例库。
3. 优先级和执行状态为测试用例设置优先级和执行状态,以帮助测试团队确定测试的重点和安排执行计划。
白盒测试用例设计方法
白盒测试用例设计方法随着互联网行业的发展,人们对软件品质的要求也越来越高,因此软件测试也显得尤为重要。
目前,软件测试中最为重要的一种方式就是白盒测试,它着力于分析内部结构和行为,并设计出恰当的测试用例,以便确定软件是否满足用户和开发者的需求。
白盒测试用例设计是指帮助开发者定义和构建测试用例的过程,以便检查软件是否正常工作。
由于每个软件的结构和行为都不尽相同,因此白盒测试的用例设计方法也有多种不同的形式。
白盒测试用例设计方法包括以下几种:一、基于流程的测试用例设计方法基于流程的测试用例设计方法是根据软件系统用户交互的流程来设计测试用例,它关注的是用户操作的输入和输出。
二、基于数据的测试用例设计方法基于数据的测试用例设计方法是根据不同的数据输入情况来设计测试用例,关注的是软件对不同类型的输入数据的处理情况。
三、基于状态的测试用例设计方法基于状态的测试用例设计方法是根据软件系统的状态来设计测试用例,它关注的是软件系统在处理不同状态时的行为是否符合预期。
四、基于安全性的测试用例设计方法基于安全性的测试用例设计方法是根据安全性要求来设计测试用例,关注的是软件系统的安全性。
白盒测试用例设计是一项非常复杂的工作,需要综合考虑软件结构、行为和安全性等多方面因素。
它不仅要求开发者具备足够的测试知识,而且还要求他们拥有测试分析和思维分析能力。
另外,白盒测试用例设计师还需要充分了解软件、技术和规范,并对软件测试工具和方法有较深入的了解。
如果由于忽略上述重要因素而导致测试用例无法有效覆盖软件的所有功能,将有可能破坏软件的品质,甚至威胁到软件的安全性。
此外,白盒测试用例设计还需要考虑到性能测试,即检查软件的性能、可用性和可靠性以确保软件的可用性。
对于性能测试用例,开发者需要牢记一些注意事项,比如:输入输出数据的量级,循环次数,记录最大,最小,平均值等等。
这些信息有助于检验软件是否具有良好的性能,以及更快更好地解决性能问题。
白盒测试的测试用例设计方法
白盒测试的测试用例设计方法白盒测试是一种测试方法,旨在验证程序内部的结构和逻辑。
在白盒测试中,测试人员需要设计有效的测试用例来全面评估系统的功能和准确性。
本文将介绍几种常用的白盒测试用例设计方法。
一、语句覆盖(Statement Coverage)语句覆盖是一种基本的白盒测试用例设计方法。
它要求测试用例能够覆盖被测试程序中的每条语句至少一次。
通过执行每个语句,可以确保程序的基本功能正常运行。
测试人员可以通过代码走查和代码覆盖率工具来确定覆盖情况。
二、判定覆盖(Decision Coverage)判定覆盖是一种更为严格的白盒测试用例设计方法。
它要求测试用例能够覆盖每个条件语句的所有可能结果,包括真值和假值。
通过判定覆盖,可以验证程序在不同条件下的正确性。
测试人员需要对每个条件进行测试设计,确保每个结果都被覆盖到。
三、条件覆盖(Condition Coverage)条件覆盖是判定覆盖的一种补充方法。
它要求测试用例能够覆盖每个独立条件的所有可能情况。
通过条件覆盖,可以确保程序在各种条件下的正确处理。
测试人员需要考虑所有可能的条件组合,并设计相应的测试用例。
四、路径覆盖(Path Coverage)路径覆盖是一种高级的白盒测试用例设计方法。
它要求测试用例能够覆盖程序中所有可能的执行路径。
通过路径覆盖,可以全面评估程序的逻辑和流程。
测试人员需要分析代码,找出程序的所有路径,并设计测试用例来覆盖这些路径。
五、边界值覆盖(Boundary Value Coverage)边界值覆盖是一种特殊的白盒测试用例设计方法。
它要求测试用例能够覆盖每个输入和输出的边界值。
通过边界值覆盖,可以检测程序对边界情况的处理是否正确。
测试人员需要确定每个输入和输出的边界,设计测试用例来验证程序的边界处理能力。
六、错误推测(Error Guessing)错误推测是一种经验主义的白盒测试用例设计方法。
它要求测试人员根据自己的经验和直觉来猜测可能存在的错误,并设计相应的测试用例来验证。
白盒测试用例设计.doc
白盒测试用例设计2.1 白盒测试用例设计对白盒测试,目前有两种测试用例设计方法,即逻辑覆盖和基本路径测试。
所谓逻辑覆盖是以程序内部的逻辑结构为基础的测试用例设计方法。
根据覆盖测试的目标不同,逻辑覆盖测试可分为:语句覆盖,判定覆盖,判定-条件覆盖,条件组合覆盖及路径覆盖。
基本路径测试是为了解决路径庞大难题,它是在程序控制流程图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。
逻辑覆盖法与基本路径测试法的区别:逻辑覆盖是通过对程序逻辑结构的遍历实现程序的覆盖,它是一系列测试过程的总称,这组测试过程逐渐进行越来越完整的通路测试。
语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖,以及修正条件/判定覆盖等都是从不同要求出发,为了设计测试用例提供依据的度量标准。
基本路径测试法是在程序控制流图的基础上,通过分析控制结构的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。
设计出的测试用例要保证在测试中程序的每个可执行语句至少执行一次。
逻辑覆盖主要针对程序中的由于判定条件所产生的分支结构进行测试; 路径覆盖只要从由于各种逻辑判定条件所形成的复杂的程序执行路径这个角度入手;即便是逻辑覆盖程度最高的条件组合覆盖,也不能保证覆盖了所有的分支组合(条件组合覆盖度量标准只考虑了每个判定内部的条件组合情况),而符合路径覆盖的一组用例,也不能完全保证它一定符合了条件组合覆盖的度量标准。
2.1.1 基本路径测试法在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例。
包括以下4个步骤和一个工具方法:1. 程序的控制流图:描述程序控制流的一种图示方法。
2. 程序圈复杂度:McCabe复杂性度量。
从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。
3. 导出测试用例:根据圈复杂度和程序结构设计用例数据输入和预期结果。
白盒测试用例设计方法
白盒测试用例设计方法一、白盒测试根据软件产品的内部工作过程,在计算机上进行测试,以证实每种内部操作是否符合设计规格要求,所有内部成分是否已经过检查。
这种测试方法就是白盒测试。
白盒测试把测试对象看做一个打开的盒子,允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。
通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。
不论是黑盒测试,还是白盒测试,都不可能把所有可能的输入数据都拿来进行所谓的穷举测试。
因为可能的测试输入数据数目往往达到天文数字。
下面让我们看两个例子。
假设一个程序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、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
锦 城
错误:
学 院
➢ 穷举路径测试无法检查出程序本身是否违反了设计规 软
范,即程序是否是一个错误的程序。
件 测
➢ 穷举路径测试不可能查出程序因为遗漏路径而出错。 试
➢ 穷举路径测试发现不了一些与数据相关的错误。
• 采用白盒测试方法必须遵循以下几条原
则: 四
➢保证一个模块中的所有独立路径至少被测试
川 大
➢ 给定控制流图G的环形复杂度—V(G),也可定义为
V(G) = P+1
其中,P是控制流图G中判定节点的数量。
环形复杂度:
5
V(G) = E-N+2 => V(G) = 10-8+2=4
or
V(G) = P+1 => V(G) = 3+1=4
7
8
9
导出独立路径集:
路径1:5-15 (iRecordNum=0)
• 图矩阵是一个方形矩阵,其维数等于控制流图
四 川
的节点数。矩阵中的每列和每行都对应于标识
大 学
的节点,矩阵元素对应于节点间的边。
锦 城
• 通常,控制流图中的结点用数字标识,边则用
学 院
字母标识。如果在控制流图中从第 i 个结点到第 软
j 个结点有一个标识为 x 的边相连接,则在对应
件 测
图矩阵的第 i 行第 j 列有一个非空的元素 x 。
11
13
路径2:5-7-8-14-5-15
(iRecordNum≥0,iType=0)
14
路径3:5-7-9-11-14-5-15
15
(iRecordNum≥0,iType=1)
路径4:5-7-9-13-14-5-15
(iRecordNum≥0,iType≠0,iType≠1)
4.2.3 图矩阵
• 图矩阵是控制流图的矩阵表示形式。
白盒测试也称结构测试或逻辑驱动测试,是针对被测 学 单元内部是如何进行工作的测试。它根据程序的控制 院
结构设计测试用例,主要用于软件或程序验证。
软
件
测
试
4.1 白盒测试方法
• 为什么要进行白盒测试?
四
假设此时开发工作已结束,程 川
序送交到测试组,没有人知道代码
大 学
中有一个潜在的被 0 除的错误。若
学 锦
径数量;确保所有语句至少执行一次的测试数量 城
学
的上界。
院
➢ 独立路径是指程序中至少引入了一个新的处理语句集
软 件
合或一个新条件的程序通路。采用流图的术语,即独 测
立路径必须至少包含一条在本次定义路径之前不曾用 试
过的边。
• 测试可以被设计为基本路径集的执行过程,但基 本路径集通常并不唯一。
计算环形复杂度的方法
7
8
9
11
13
14 15
图4-1 控制流图
1a
1b
2
4
5
四
川
大
学
锦
城
学
2
院
软 件 测 试
图4-2 复合条件的控制流图
4.2.2 环形复杂度
• 环形复杂度也称为圈复杂度,它是一种为程序逻
辑复杂度提供定量尺度的软件度量。
四
• 环形复杂度的应用——可以将环形复杂度用于基
川 大
本路径方法,它可以提供:程序基本集的独立路
• 环形复杂度以图论为基础,为我们提供了非常有
用的软件度量。可用如下三种方法之一来计算环 四
形复杂度:
川 大
➢ 控制流图中区域的数量对应于环形复杂度。
学 锦
➢ 给定控制流图G的环形复杂度—V(G),定义为
城 学
V(G) = E-N+2
院
其中,E是控制流图中边的数量,N是控制流图中的
软 件
节点数量。
测 试
锦 城
学
➢基本路径测试方法
院
软
➢程序插桩
件 测
试
4.2 程序结构分析
4.2.1 控制流图
四 川
大
学
4.2.2 环形复杂度
锦 城 学
院
4.2.3 图矩阵
软 件
测
试
4.2.1 控制流图
• 控制流图(可简称流图)是对程序流程图进行简
化后得到的,它可以更加突出的表示程序控制流 四
的结构。
川 大
• 控制流图中包括两种图形符号:节点和控制流线。学锦
锦 城
测试组采用的测试用例的执行路径 学
没有同时经过x=0和y=5/x进行测试 院
,显然测试工作似乎非常完善,测
软 件
试用例覆盖了所有执行语句,也没 测
有被 0 除的错误发生。
试
• 白盒测试法检查程序内部逻辑结构,对所
有逻辑路径进行测试,是一种穷举路径的 四
测试方法。
川 大
学
• 即使每条路径都测试过了,仍然可能存在
学
• 学习掌握白盒测试的基本路径测试法
院
实践环节
软 件
• 通过案例运用学习掌握覆盖问题的解决方法
测 试
• 运用基本路径测试方法进行实际程序测试
白盒测试是把测试对象看做一个透明的盒子,它允许
测试人员利用程序内部的逻辑结构及有关信息,设计
或选择测试用例,对程序所有逻辑路径进行测试。
四
川 大 学 锦 城
一次。
学 锦
➢所有逻辑值均需测试真 (true) 和假 (false)
城 学
两种情况。
院
软
➢检查程序的内部数据结构,保证其结构的有 件
效性。
测 试
➢在上下边界及可操作范围内运行所有循环。
• 白盒测试主要是检查程序的内部结构、逻
辑、循环和路径。常用测试用例设计方法 四
有:
川 大
学
➢逻辑覆盖法(逻辑驱动测试)
试
b
5
a
j
c 7e
8
d
15
9
f
h
11
13
g
i
14
表4-1 图矩阵
节1 2 3 4 5 6 7 8 点 (5) (7) (8) (9) (11) (13) (14) (15)
1
a
b
(5)
2
ce
(7)
3
d
(8)
4
fh
(9)
5
g
(11)
6
i
(13)
7
j
(14)
8
(15)
习题
• 根据左图给出的程序流程图,四
c
完成以下要求:
川 大
(1)画出相应的控制流图。
学 锦
(2)计算环形复杂度。
城 学
院
(3)给出相应的图矩阵。
软
(4)找出程序的独立路径集合。件
测
试
4.3 覆盖测试
4.3.1 测试覆盖率
四 川
大
学
4.3.2 逻辑覆盖法
锦 城
学
4.3.3 面向对象的覆盖
院
软
件
4.3.4 测试覆盖准则
测 试
4.3.1 测试覆盖率
城
➢ 节点由带标号的圆圈表示,可代表一个或多个语句、 学
一个处理框序列和一个条件判定框(假设不包含复合 院
条件)。
软Байду номын сангаас件
➢ 控制流线由带箭头的弧或线表示,可称为边。它代表
测 试
程序中的控制流。
常见结构的控制流图
• 对于复合条件,则可将其分解为多个单个条件,并
映射成控制流图。
具有复合条件的控制流图
5
第4章 白盒测试及其用例的设计
4.1 白盒测试方法
四
川
4.2 程序结构分析
大 学
锦
4.3 覆盖测试
城 学
院
4.4 路径测试
软
件
4.5 其他白盒测试方法
测 试
4.6 程序插桩
本章教学目标
理论环节
四
• 学习理解白盒测试方法的基本概念
川
大
• 学习理解白盒测试的覆盖理论
学
锦
• 学习掌握白盒测试的路径表达
城