




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、白盒测试,吴鸿韬 ,白盒测试,白盒测试概念 白盒测试的发展 测试覆盖标准 逻辑驱动测试 基本路径测试,白盒测试概念,白盒测试也称结构测试或逻辑驱动测试,是一种测试用例设计方法,它从程序的控制结构导出测试用例。 白盒测试使用被测单元内部如何工作的信息,允许测试人员对程序内部逻辑结构及有关信息来设计和选择测试用例,对程序的逻辑路径进行测试。基于一个应用代码的内部逻辑知识,测试是基于覆盖全部代码、分支、路径、条件。,白盒测试的主要目的:,保证一个模块中的所有独立路径至少被执行一次; 对所有的逻辑值均需要测试真、假两个分支; 对程序进行边界检查(常见的如数据结构越界检查); 检查内部数据结构以确保其有
2、效性。,白盒测试的发展,白盒测试的发展,“是否评估测试效果”指是否有覆盖率或其它评估测试效果的指标, “是否自动测试”指是否形式化描述测试操作并将它用于再次测试, “是否持续测试”指是否以按持续集成的模式开展测试, “是否调测一体”指是否将测试设计高效的融入产品编码与调试的日常实践之中。,白盒测试的发展,第1代白盒测试 在测试发展初期,测试工具很不成熟,人们通常以单步调试代替测试,或采用assert断言、print 语句等简单方式的组织测试体系,即我们所谓的第1代白盒测试,这一时期的测试是半手工的,没实现自动化,测试 效果也严重依赖测试者(或者调试者)的个人能力,缺少统一规范的评判标准。,白盒
3、测试的发展,第1 代白盒测试方法存在严重缺陷,主要有:测试过程难以重用,成功经验无法拷贝,测试结果也难以评估并用于改进,这些对于团队运作是非常致命的,白盒测试的发展,第2代白盒测试,将测试操作改用一种形式化语言(通常称为测试脚本)来表述,脚本可以组合成用例,用例可组合成测试集,用例与测试集再统一到测试工程中管理,把测试脚本保存到文件,重用问题解决了。另外,代码覆盖率功能使测试结果可以评估,能直观的看到哪些代码或分支未被覆盖,然后有针对性的增加测试设计。,白盒测试的发展,目前市面上有大量商用工具,如RTRT、CodeTest、Visual Tester、C+ Tester 等都属于这第2代白盒测
4、试工具。,白盒测试的发展,第2 代白盒测试解决了重复测试问题,但没解决持续测试问题。简单来说,重复测试使测试操作能以规范格式记录,当被测对象没变化(或变化很少)时,测试用例是可重用的,但如果源码大幅调整(甚至重构),或者按迭代模式不停追加新功能时,如何维持用例同步增长,并与源码一起同步更新,已经不是简单的增强用例复用能力就能解决的。因为代码更新与用例更新交织进行,测试用例与被测源码一样对等的成为日常工作对象,必然促使原有工作模式与测试方法产生变革,概括而言,白盒测试过程要从一次测试模式过渡到持续测试模式。,白盒测试的发展,某通信产品在V1版本编码完成时,进行过规范的单元测试活动,之后V2、V3
5、要不断增加功能、修改功能,就放弃单元测试了,当V3最后市场交付时统计发现,相对V1版本,代码修改量已达到40%。QA 从其中两个模块随机抽取100 个问题单做缺陷分析,结果发现:第一个模块有50%的问题是在V1版本单元测试结束后引入的,而另一模块也有30%问题是单元测试后引入的。,白盒测试的发展,第3 代白盒测试工具以xUnit 为代表,包括JUnit、DUnit、CppUnit 等 区别第2 代方法与第3 代方法,主要是测试理念上差别,白盒测试的发展,第4 代白盒测试尝试解决软件测试的深层次矛盾:测试的投入产出比问题。,白盒测试的发展,研发资源总是有限的,你可以把测试人员与开发人员的比例配到
6、1:1,也可以配到2:1,甚至5:1,但你做不到10:1、100:1, 如果你有钱,也有人,完全可以按100:1或更高比例配置,这时所有测试瓶颈都没了,你可以让测试人员边喝咖啡边干活,因为每新写1行代码总有人编出100行脚本测试它,还怕产品不稳定吗?,白盒测试的发展,第4 代白盒测试方法相对第3代方法,增加了将测试过程(包括测试设计、执行与改进)高效的融入开发全过程,4GWM在3个关键领域的9项关键特征,A. 第一关键域:在线测试 1、 在线测试驱动 2、 在线脚本桩 3、 在线测试用例设计、运行,及评估改进,4GWM在3个关键领域的9 项关键特征,B. 第二关键域:灰盒调测 4、 基于调用接
7、口 5、 调试即测试 6、 集编码、调试、测试于一体,4GWM在3个关键领域的9项关键特征,C. 第三关键域:持续测试 7、 测试设计先行 8、 持续保障信心 9、 重构测试设计,参考资料,wayne chan,第4代白盒测试方法介绍理论篇 领测科技 VcSmith if(x3) /语句块3,语句覆盖,为了测试语句覆盖率只要设计一个测试用例就可以把三个执行语句块中的语句覆盖了。测试用例输入为: x=4、y=5、z=5 程序执行的路径是:abd,语句覆盖,该测试用例虽然覆盖了可执行语句,但并不能检查判断逻辑是否有问题,例如在第一个判断中把 int y=0; while (iRecordNum-
8、0) if(0= =iType) x=y+2; break; else if (1= =iType) x=y+10; else x=y+20; ,基本路径测试,基本路径测试,画出其程序流程图和对应的控制流图如下,基本路径测试 - 计算圈复杂度,第二步:计算环路复杂度 环路复杂度是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的基本的独立路径数目,为确保所有语句至少执行一次的测试数量的上界。独立路径必须包含一条在定义之前不曾用到的边。 有以下三种方法计算环路复杂度: 流图中区域的数量对应于环型的复杂性; 给定流图G的环路复杂度V(G),定义为V(G)=E-N+2,E是流图中边的
9、数量,N是流图中结点的数量; 给定流图G的环路复杂度V(G),定义为V(G)=P+1,P是流图G中判定结点的数量。,基本路径测试 - 计算环路复杂度,对应上面图中的环路复杂度,计算如下: 流图中有四个区域; V(G)=10条边-8结点+2=4; V(G)=3个判定结点+1=4。,基本路径测试 - 导出测试用例,第三步:导出测试用例 根据上面的计算方法,可得出四个独立的路径。(一条独立路径是指,和其他的独立路径相比,至少引入一个新处理语句或一个新判断的程序通路。V(G)值正好等于该程序的独立路径的条数。) 路径1:4-14 路径2:4-6-7-14 路径3:4-6-8-10-13-4-14 路径
10、4:4-6-8-11-13-4-14 根据上面的独立路径,去设计输入数据,使程序分别执行到上面四条路径。,基本路径测试 - 准备测试用例,第四步:准备测试用例 为了确保基本路径集中的每一条路径的执行,根据判断结点给出的条件,选择适当的数据以保证某一条路径可以被测试到,满足上面例子基本路径集的测试用例是:,基本路径测试 - 准备测试用例,路径1:4-14 输入数据:iRecordNum0,或者 取iRecordNum0的某一个值 预期结果:x0 路径2:4-6-7-14 输入数据:iRecordNum1,iType0 预期结果:x2 路径3:4-6-8-10-13-4-14 输入数据:iReco
11、rdNum1,iType1 预期结果:x10 路径4:4-6-8-11-13-4-14 输入数据:iRecordNum1,iType2 预期结果:x20,void Sort(int iRecordNum,int iType) int x=0; int y=0; while (iRecordNum- 0) if(0= =iType) x=y+2; break; else if(1= =iType) x=y+10; else x=y+20; ,基本路径测试,必须注意,一些独立的路径,往往不是完全孤立的,有时它是程序正常的控制流的一部分,这时,这些路径的测试可以是另一条路径测试的一部分。,工具方法:
12、图形矩阵,导出控制流图和决定基本测试路径的过程均需要机械化,为了开发辅助基本路径测试的软件工具,称为图形矩阵(graph matrix)的数据结构很有用。 利用图形矩阵可以实现自动地确定一个基本路径集。一个图形矩阵是一个方阵,其行/列数控制流图中的结点数,每行和每列依次对应到一个被标识的结点,矩阵元素对应到结点间的连接(即边)。在图中,控制流图的每一个结点都用数字加以标识,每一条边都用字母加以标识。如果在控制流图中第i个结点到第j个结点有一个名为x的边相连接,则在对应的图形矩阵中第i行/第j列有一个非空的元素x。,工具方法:图形矩阵,对每个矩阵项加入连接权值(link weight),图矩阵就
13、可以用于在测试中评估程序的控制结构,连接权值为控制流提供了另外的信息。最简单情况下,连接权值是 1(存在连接)或0(不存在连接),但是,连接权值可以赋予更有趣的属性: 执行连接(边)的概率。 穿越连接的处理时间。 穿越连接时所需的内存。 穿越连接时所需的资源。,工具方法:图形矩阵,根据上面的方法对例4画出图形矩阵如下:,工具方法:图形矩阵,连接权为“1”表示存在一个连接,在图中如果一行有两个或更多的元素“1”,则这行所代表的结点一定是一个判定结点,通过连接矩阵中有两个以上(包括两个)元素为“1”的个数,就可以得到确定该图圈复杂度的另一种算法。,基本路径测试再举例,例5:下例程序流程图描述了最多
14、输入50个值(以1作为输入结束标志),计算其中有效的学生分数的个数、总分数和平均值。,步骤1:导出过程的流图。,步骤2:确定环形复杂性度量V(G): 1)V(G)= 6 (个区域) 2)V(G)=EN+2=1612+2=6 其中E为流图中的边数,N为结点数; 3)V(G)=P+1=5+1=6 其中P为谓词结点的个数。在流图中,结点2、3、5、6、9是谓词结点。,基本路径测试再举例,基本路径测试再举例,步骤3:确定基本路径集合(即独立路径集合)。于是可确定6条独立的路径: 路径1:1-2-9-10-12 路径2:1-2-9-11-12 路径3:1-2-3-9-10-12 路径4:1-2-3-4-
15、5-8-2 路径5:1-2-3-4-5-6-8-2 路径6:1-2-3-4-5-6-7-8-2,基本路径测试再举例,步骤4:为每一条独立路径各设计一组测试用例,以便强迫程序沿着该路径至少执行一次。 1)路径1(1-2-9-10-12)的测试用例: scorek=有效分数值,当k i ; scorei=1, 2i50; 期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。,基本路径测试再举例,2)路径2(1-2-9-11-12)的测试用例: score 1 = 1 ; 期望的结果:average = 1 ,其他量保持初值。 3)路径3(1-2-3-9-10-12
16、)的测试用例: 输入多于50个有效分数,即试图处理51个分数,要求前51个为有效分数; 期望结果:n1=50、且算出正确的总分和平均分。,基本路径测试再举例,4)路径4(1-2-3-4-5-8-2)的测试用例: scorei=有效分数,当i100, k i ; 期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。,基本路径测试再举例,6)路径6(1-2-3-4-5-6-7-8-2)的测试用例: scorei=有效分数, 当i50; 期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。,作业,为以下流程图所示的程序段设计一组测试
17、用例,要求分别满足语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖。,作业,根据左图给出的程序流程图,完成以下要求: (1)画出相应的控制流图。 (2)计算环形复杂度。 (3)给出相应的图矩阵。 (4)找出程序的独立路径集合。,控制结构测试的变种,前面所述的基本路径测试技术是控制结构测试技术之一。尽管基本路径测试简单高效,但是,其本身并不充分。下面讨论控制结构测试的其他变种,这些测试覆盖并提高了白盒测试的质量。 条件测试 数据流测试 循环测试。 推荐参考资料 Roger S. Pressman,软件工程-实践者的研究方法,循环测试,循环测试是一种白盒测试技术,注重于循环构造的有
18、效性。 有四种循环:简单循环,串接(连锁)循环,嵌套循环和不规则循环。,循环测试,循环测试 - 简单循环,对于简单循环,测试应包括以下几种,其中的n表示循环允许的最大次数。 (1) 零次循环:从循环入口直接跳到循环出口。 (2) 一次循环:查找循环初始值方面的错误。 (3) 二次循环:检查在多次循环时才能暴露的错误。 (4) m次循环:此时的mn,也是检查在多次循环时才能暴露的错误。 (5) n(最大)次数循环、n+1(比最大次数多一)次的循环、n-1(比最大次数少一)次的循环。,循环测试 - 嵌套循环,对于嵌套循环,不能将简单循环的测试方法简单地扩大到嵌套循环,因为可能的测试数目将随嵌套层次
19、的增加呈几何倍数增长。这可能导致一个天文数字的测试数目。下面是一种有助于减少测试数目的测试方法。 从最内层循环开始,设置所有其他层的循环为最小值; 对最内层循环做简单循环的全部测试。测试时保持所有外层循环的循环变量为最小值。另外,对越界值和非法值做类似的测试。 逐步外推,对其外面一层循环进行测试。测试时保持所有外层循环的循环变量取最小值,所有其它嵌套内层循环的循环变量取“典型”值。 反复进行,直到所有各层循环测试完毕。 对全部各层循环同时取最小循环次数,或者同时取最大循环次数。对于后一种测试,由于测试量太大,需人为指定最大循环次数。,循环测试 - 串接循环,对于串接循环,要区别两种情况。 如果
20、各个循环互相独立,则串接循环可以用与简单循环相同的方法进行测试。 如果有两个循环处于串接状态,而前一个循环的循环变量的值是后一个循环的初值。则这几个循环不是互相独立的,则需要使用测试嵌套循环的办法来处理。,循环测试 - 非结构循环,对于非结构循环,不能测试,应重新设计循环结构,使之成为其它循环方式,然后再进行测试。,测试用例自动生成,model-driven的测试,可以从从UML-diagram自动生成test case,其中最成熟的是从state diagram生成 基于形式化语言的测试用例自动生成 面向路径的测试数据生成方法,基于形式化语言的测试用例自动生成,在测试用例自动生成方面,Tsa
21、i等提出了从关系代数查询表示的规格说明中自动生成测试用例的方法,Weyuker等提出了基于布尔规格说明的测试数据自动生成方法。此外,基于Z语言的测试用例生成技术也己经非常成熟。但这些测试用例生成方法,因为形式化程度太高而难于得到广泛的应用。,面向路径的测试数据生成方法,面向路径的测试数据生成方法,首先确定一条经过给定语句的程序路径,然后在输入域中寻找输入数据,使得在此输入之下,程序执行沿该路径进行,从而使得给定语句被执行。面向路径的测试数据生成又分为符号执行和实际程序执行两类。遗传算法,贪婪算法,总结:,“白盒”法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。“白盒”法是穷举路径测试。在使
22、用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。但即使每条路径都测试了仍然可能有错误。 第一、穷举路径测试决不能查出程序违反了设计规范,即程序本身是个错误的程序; 第二、穷举路径测试不可能查出程序中因遗漏路径而出错。 第三、穷举路径测试可能发现不了一些与数据相关的错误。,控制结构测试,路径测试,利用流图表示控制逻辑 根据流图标识独立路径 确定覆盖测试路径上界的计算(环复杂度计算) 用基本路径法导出测试案例的步骤,条件测试,数据流 测试,循环测试,分支测试:真假分支必须至少执行一次的路径策略 域测试:对于大于、小于和等于值的测试路径
23、策略,由变量的定义到变量的使用,构成DU链,覆盖每个DU链至少一次。用此方法为包含循环和嵌套语句的程序选择测试路径的策略,对于简单循环、嵌套循环、串接循环和无结构循环的路径选择策略,白盒测试工具:,内存资源泄漏检查:Numega中的bouncechecker,Rational的Purify等; 代码覆盖率检查:Numega中的truecoverage,Rational的Purecoverage,Telelogic公司的logiscope,Macabe公司的Macabe等; 开源覆盖率测试软件gCov等。,Parasoft白盒测试工具集 Jtest Java 代码分析和动态类、组件测试 Jcon
24、tract Java 实时性能监控以及分析优化 C+ Test C,C+ 代码分析和动态测试 CodeWizard C,C+ 代码静态分析 Insure+ C,C+ 实时性能监控以及分析优化,.test .Net 代码分析和动态测试 logiscopec/c+ Verlog公司的静态、动态分析工具 还有testbed、Cantata c/c+等 Rational工具集中的puricoverage和purify、quantify,Compuware白盒测试工具集 BoundsChecker C+,Delphi API和OLE错误检查、指针和泄露错误检查、内存错误检查 TrueTime C+,Ja
25、va,Visual Basic 代码运行效率检查、组件性能的分析 FailSafe Visual Basic 自动错误处理和恢复系统 Jcheck M$ Visual J+ 图形化的纯种和事件分析工具 TrueCoverage C+,Java,Visual Basic 函数调用次数、所占比率统计以及稳定性跟踪 SmartCheck Visual Basic 函数调用次数、所占比率统计以及稳定性跟踪 CodeReview Visual Basic 自动源代码分析工具,测试用例,IEEE 829标准 编写用于输入的实际数值和预期输出结果数值,测试用例还明确指出使用具体测试用例产生的测试程序的任何限
26、制,白盒测试的发展,设计测试用例,先通过脚本构造被测函数的输入参数,修改特定全局变量,使被测函数处于某特定运行环境下,这两步属于测试驱动。然后调用被函数,最后判断测试结果,因为运行被测函数可能影响输入参数、全局变量与返回值,所以判断用例是否运行通过,观察对象也是这三者。在用例设计过程中,我们并不关心函数内局部变量如何声明,也不关心函数内逻辑过程如何处理,只关心被测对象的输入与输出,这是一种典型的黑盒思维模式。准确来说,4GWM是一种灰盒测试方法,尽管操作方式是黑盒的,但测试设计是白盒的,因为看得见源码,测试设计可以有针对性的进行,测试过程评估也是白盒的,运行一遍用例后,查看哪些代码行有没跑到,
27、再有针对性补充用例。所以,我们从整体来看,4GWM是介于黑盒与白盒之间的灰盒测试。,条件测试,条件测试方法注重于测试程序中的条件。是检查程序模块中所包含逻辑条件的测试用例设计方法。 条件 程序中的条件分为简单条件和复合条件。 简单条件是一个布尔变量或一个可能带有NOT(“!”)操作符的关系表达式。关系表达式的形式如: E1关系操作符E2 其中E1和E2是算术表达式,而关系操作符是下列之一:“”、“”、“=”、“”(“!=”)、“”、或“”。 复合条件由简单条件通过逻辑运算符(AND、OR、NOT)和括号连接而成,不含关系表达式的条件称为布尔表达式。 所以条件的成分类型包括布尔操作符、布尔变量、
28、布尔括弧(括住简单或复杂条件)、关系操作符或算术表达式。,条件测试,条件的错误类型 如果条件不正确,则至少有一个条件成分不正确,这样,条件的错误类型如下: 布尔操作符错误(遗漏布尔操作符,布尔操作符多余或布尔操作符不正确); 布尔变量错误; 布尔括弧错误; 关系操作符错误; 算术表达式错误。,条件测试,条件测试的目的 条件测试是测试程序条件错误和程序的其他错误。如果程序的测试集能够有效地检测程序中的条件错误,则该测试集可能也会有效地检测程序中的其他错误。此外,如果测试策略对检测条件错误有效,则它也可能有效地检测程序错误。,条件测试,条件测试策略 穷举测试 (条件组合) 有n个变量的布尔表达式需
29、要2n个可能的测试(n0)。这种策略可以发现布尔操作符、变量和括弧的错误,但是只有在n很小时实用。 分支测试 分支测试可能是最简单的条件测试策略,它是真假分支必须至少执行一次的路径策略,对于复合条件C,C的真分支和假分支以及C中的每个简单条件都需要至少执行一次。,条件测试 - 分支测试,域测试(Domain testing) 域测试是对于大于、小于和等于值的测试路径策略。域测试要求从有理表达式中导出三个或四个测试,有理表达式的形式如: E1关系操作符E2 需要三个测试分别用于计算E1的值是大于、等于或小于E2的值。如果关系操作符错误,而E1和E2正确,则这三个测试能够发现关系算子的错误。 为了
30、发现E1和E2的错误,计算E1小于或大于E2的测试应使两个值间的差别尽可能小。,条件测试,BRO(branch and relational)测试 如果在一个判定的复合条件表达式中每个布尔变量和关系运算符最多只出现一次,而且没有公共变量,应用一种称之为BRO(分支与关系运算符)的测试法可以发现多个布尔运算符或关系运算符错,以及其他错误。 BRO策略引入条件约束的概念。设有n个简单条件的复合条件C,其条件约束为D= (D1,D2,Dn) ,其中Di(0in)是条件C中第i个简单条件的输出约束。如果在C的执行过程中,其每个简单条件的输出都满足D中对应的约束,则称条件C的条件约束D由C的执行所覆盖。
31、 对于布尔变量或布尔表达式B,B的输出约束必须是真(t)或假(f);对于关系表达式,其输出约束为符号、=、。,条件测试,作为简单的例子,考虑条件 C1B1B2 其中B1和B2是布尔变量。C1的输出约束为(D1,D2),其中D1和D2是“T”或“F”,值(T,F)是C1可能的一个约束,覆盖此约束的测试(一次运行)将令B1为t,B2为f。BRO测试策略要求约束集(t,t),(f,t),(t,f),(f,f)由C1的执行所覆盖。如果布尔运算符有错,这四组测试用例的运行结果必有一组导致C1失败。,条件测试,作为第二个例子,考虑 C2B1(E3=E4) 其中B1是布尔表达式,而E3和E4是算术表达式。C
32、2的条件约束形式如(D1,D2),其中D1是“T”或“F”,D2是,=或。除了C2的第二个简单条件是关系表达式以外,C2和C1相同,所以可以修改C1的约束集(T,T),(F,T),(T,F),(F,F),得到C2的约束集,注意(E3=E4)的“T”意味着“=”,而(E3=E4)的“F”意味着“”或“”。分别用(T,=)和(F,=)替换(T,T)和(F,T),并用(T,)和(T,)替换(T,F),用(F,)和(F,)替换(F,F),就得到C2的约束集: (T,=),(F,=),(T,),(T,) ,(F,),(F,) 。 上述条件约束集的覆盖率将保证检测C2的布尔和关系算子的错误。,条件测试,作
33、为第三个例子,考虑 C3(E1E2)(E3=E4) 其中E1、E2、E3和E4是算术表达式。C3的条件约束形式如(D1,D2),其中D1和D2是、=或。除了C3的第一个简单条件是关系表达式以外,C3和C2相同,所以可以修改C2的约束集得到C3的约束集,结果为 (,=),(=,=),(,=),(,),(,), (,),(=,),(,), (,),(=,),(,) 去掉重复,结果为: (,=),(=,=),(,=),(,),(,),(=,),(,), (=,),(,) 上述条件约束集能够保证检测C3的关系操作符的错误。,数据流测试,数据流测试方法按照程序中的变量定义和使用的位置来选择程序的测试路径
34、。 为了说明数据流测试方法,假设程序的每条语句都赋予了独特的语句号,而且每个函数都不改变其参数和全局变量。对于语句号为S的语句, DEF(S)=X语句S包含X的定义 USE(S)=X语句S包含X的使用 如果语句S是if或循环语句,它的DEF集为空,而USE集取决于S的条件。如果存在从S到S的路径,并且该路径不含X的其他定义,则称变量X在语句S处的定义在语句S仍有效。,数据流测试,变量X的定义使用链(或称DU链)形式如X,S,S,其中S和S是语句号,X在DEF(S)和USE(S)中,而且语句S定义的X在语句S有效。 一种简单的数据流测试策略是要求覆盖每个DU链至少一次。我们将这种策略称为DU测试
35、策略。已经证明DU测试并不能保证覆盖程序的所有分支,但是,DU测试不覆盖某个分支仅仅在于如下之类的情况:if-then-else中的then没有定义变量,而且不存在else部分。这种情况下,if语句的else分支并不需要由DU测试覆盖。 数据流测试策略可用于为包含嵌套if和循环语句的程序选择测试路径,为此,考虑使用DU测试为如下的伪程序片段选择测试路径:,数据流测试,proc x B1; do while C1 if C2 then if C4 then B4; else B5; endif; else if C3 then B2; else B3; endif; endif; enddo;
36、B6; end proc;,数据流测试,为了用DU测试选择控制流图的测试路径,需要知道程序中条件或块中的变量定义和使用。假设变量X定义在块B1,B2,B3,B4和B5的最后一条语句之中,并在块B2,B3,B4,B5和B6的第一条语句中使用。DU测试策略要求执行从每个Bi(0i5)到Bj(0j6)的最短路径(这样的测试也覆盖了条件C1,C2,C3和C4中的变量使用)。尽管有25条X的DU链,只需5条路径覆盖这些DU链。原因在于可用5条从Bi(0i5)到B6的路径覆盖X的链,而这5条链包含循环的迭代就可以覆盖其他的DU链。,数据流测试,注意如果要用分支测试策略为上述的程序选择测试路径,并不需要另外的信息。为了选择BRO测试的路径,只需知道每个条件和块的结构。(选择程序的路径之后,需要决定该路径是否实用于该程序,即是否存在执行该路径的至少一个输入)。 由于变量的定义和使用,程序中的语句都彼此相关,所以数据流测试方法能够有效地发现错误,但是,数据流测试的覆盖率测度和路径选择比条件测试更为困难。,其他程序结构的测试方法,域测试 针对域错误,对输入空间进行分析,选择适当的测试点,检验输入空间中的每个输入是否产生正确的结果。 假设限制过多,难以运用到实际中。 符
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 衡阳三中高一数学试卷
- 胸痛患者护理健康宣教
- 2024年西安市第七十一中学教师招聘笔试真题
- 2024年山东裕隆矿业集团有限公司招聘笔试真题
- 速冻厂出售设备合同范本
- 2024年济南护理职业学院辅导员考试真题
- 机场防爆板采购合同范本
- 中式铺床的说课课件
- 杭州房屋转让合同协议书
- 起草合伙协议入伙协议书
- 外贸知识培训课件
- 苏教版四年级下册数学计算题每日一练带答案(共30天)
- 贵州省黔东南苗族侗族自治州(2024年-2025年小学六年级语文)部编版期末考试(下学期)试卷及答案
- 浙江省宁波市九校2024-2025学年高二上学期期末联考数学试题 含答案
- 《上海市室内装饰装修施工合同示范文本模板(2025版)》
- 2025-2030年中国建设工程质量检测行业发展态势与前景规划研究报告
- 典当行借款合同范本模板(2025年)
- IT项目外包人员管理制度
- 《医药数理统计》期末考试复习题库(含答案)
- 锅炉风烟系统
- 经导管主动脉瓣置换术中国专家共识(2020-更新版)
评论
0/150
提交评论