白盒测试技术_第1页
白盒测试技术_第2页
白盒测试技术_第3页
白盒测试技术_第4页
白盒测试技术_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第 6 6 章章 白盒测试技术白盒测试技术相关知识点软件测试方法:分为两类(1)静态测试:不要求在计算机上实际执行所测程序,主要以一些人工的模拟技术对软件进行分析和测试(2)动态测试:通过输入一组预先按照一定的测试准则构造的实例数据动态运行程序,而达到发现程序错误的过程,特点如下:必须生成测试数据来运行被测试程序,取得程序运行的真实情况、动态情况,进而进行分析测试质量依赖于测试数据生成测试数据,分析测试结果的工作量大,使开展测试工作费时、费力、费人动态测试中涉及多方面工作,人员多,设备多,数据多,要求有较好的管理和工作规程一概述1 定义白盒测试:白盒测试:也称结构测试或逻辑驱动测试,按照程序

2、内部的结构对程序进行测试,通过测试来检查产品内部动作是否按照设计规格说明书的规定正常进行,检查程序中的每条通路是否能按照预定要求正确工作。白盒测试又称为逻辑驱动测试,根据软件概要设计和详细设计说明文档生成用于白盒测试的测试用例。2 测试内容把测试对象看成是一个打开的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序的所有逻辑路径进行测试,通过不同点检查程序的状态,确定实际的状态与预期的状态一致3 测试基本技术(1)词法分析与语法分析(2)静态错误分析(3)程序插桩技术4 测试方法(1)代码检查法(2)静态结构分析法(3)静态质量度量法(4)逻辑覆盖法(5)基本路径测试法(6

3、)域测试(7)符号测试(8)Z 路径覆盖(9)程序变异5黑盒测试与白盒测试比较黑盒测试白盒测试不涉及程序结构考查程序逻辑结构用软件规格说明书生成测试用例用程序结构信息生成测试用例可适用于从单元测试到系统联调适用于单元测试和集成测试某些代码段得不到测试对所有逻辑路径进行测试二白盒测试基本技术1词法和语法分析(获取信息、作用)(1)获取信息 可以获取软件组成的重要基本因数,如变量标识符、过程标识符、常量等 组合获取的基本因数,可以得到软件的基本信息,如: 标号交叉引用表:列出各模块中出现的全部标号及标号的属性,模块以外的全局、计算标号 变量交叉引用表:列出变量定义及引用信息,变量的属性,变量类型(

4、全局、局部) 子程序、宏和函数表:列出各个子程序、宏及函数的属性,输入、输出参数信息 等价表:列出在等价语句和等值语句中出现的全部变量和标号 常数表:列出全部数字常数和字符常数(2)作用 直接从表中查出说明/使用错误,如标号交叉引用表、变量交叉引用表 为用户提供辅助信息,如子程序、宏和函数表、等价表、常数表 用来做错误预测和程序复杂度计算,如操作符和操作数的统计表2静态错误分析(类型和单位分析、引用分析、表达式分析、接口分析)用于确定在源程序中是否有某类错误或危险结构,包括以下几种:(1) 类型和单位分析对源程序的类型进行检查,为了强化检查效果,扩充一些新的数据类型,进行静态预处理程序,分析程

5、序中的类型错误(2) 引用分析 对程序中变量的引用进行检查,发现引用异常错误(如变量在定义前被引用,变量定义后未被引用) 。 采用深度优选的方法遍历程序流图的每一条路径 建立引用异常的探测工具,包括变量定义表和变量引用表(3) 表达式分析对表达式进行分析,以发现和纠正在表达式出现的错误,如: 在表达式中不正确的使用了括号造成错误 数组下标越界错误 除数为零 浮点数计算的误差(最复杂)(4) 接口分析接口一致性是程序的静态错误分析和设计分析共同研究的题目,接口分析主要对下内容时进行一致性的分析: 各模块之间接口一致性 模块与外部数据库的接口一致性 形参与实参在类型,数量,顺序,维数,使用上的一致

6、性 全局变量和公共数据区在使用上的一致性3程序插桩技术(设计时考虑的问题、探测点设置位置、断言语句)(1) 概述在动态测试中,是一种基本的测试手段,有广泛的应用主要借助向程序中插入操作,来实现测试目的的方法(即向源程序中添加一些语句(也称探测器) ,实现对程序语句的执行、变量的变化等情况进行检查)(2) 设计时考虑的问题 明确要探测哪些信息 在程序的什么部位设置探测点 需要设计多少个探测点(3) 探测点设置位置(以 Fortran 为例) 程序块的第一个可执行语句之前 entry 语句的前后 有标号的可执行语句处 循环语句之后 条件语句之后 logical if 语句之后 call 语句之后

7、go to 语句之后(4) 断言语句在程序中的特定部位插入某些用以判断变量特性的语句,使得程序执行中这些语句得以证实,从而使程序的运行特性得到证实,我们把这些插入的语句称为断言语句。三、白盒测试方法静态测试静态测试:代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、其他测试法(域测试、符号测试、Z 路径覆盖、程序变异) 。1代码检查法(1) 目的通过桌面检查,代码审查和走查方式,对以下内容进行检查 检查代码和设计的一致性 代码对标准的遵循、可读性 代码逻辑表达的正确性 代码结构的合理性 程序编写与编写标准的符合性 程序中不安全、不明确和模糊的部分 编程风格问题等(2) 代

8、码检查方式 方式名称执行人员检查内容检查过程桌面检查程序员对源程序代码进行分析、检验,并补充相关的文档,发现程序中的错误代码审查程序员和测试员组通过阅读、讨论和争议,以第一步:小组成员提前阅读设计规格成的审查小组程序进行静态分析的过程书、程序文本等相关文档第二步:召开程序审查会,开发人员读程序,审查小组讨论、发现、解决问题走查程序员和测试员组成的审查小组通过逻辑运行程序,发现问题第一步:小组成员提前阅读设计规格书、程序文本等相关文档第二步:利用测试用例,使程序逻辑运行,记录程序的踪迹,发现、讨论、解决问题(3) 代码检查项目(采用分析技术) 检查变量的交叉引用表:检查未说明的变量和违反了类型规

9、定的变量,变量的引用和使用情况 检查标号的交叉引用表:验证所有标号的正确性 检查子程序、宏、函数:验证每次调用与所调用位置是否正确,调用的子程序、宏、函数是否存在,参数是否一致 等价性检查:检查全部等价变量的类型的一致性 常量检查:确认常量的取值和数制、数据类型 标准检查:检查程序中是否违反标准的问题 风格检查:检查程序的设计风格 比较控制流:比较设计控制流图和实际程序生成的控制流图的差异 选择、激活路径:在设计控制流图中选择某条路径,到实际的程序中激活这条路径,如果不能激活,则程序可能有错 对照程序的规格说明,详细阅读源代码,比较实际的代码,从差异中发现程序的问题和错误 补充文档根据以上检查

10、项目,可以编制代码规则,规范和检查表等作为测试用例(4) 编码规范程序编写过程中必须遵守的规则,规定代码的语法格式、语法规则,如排版、注释、标识符命名、可读性、变量、函数、过程、可测性、程序效率、质量保证、代码编辑、编译、审查、代码测试、维护、宏等各方面的编码要求(5) 代码检查规则对程序逻辑结构检查时,所规定的规则,形成(6) 缺陷检查表主要包括一些容易出错的地方和在以往工作中遇到的典型错误,形成表格形式重要性审查项结论文件结构重要头文件和定义文件的名称是否合理2静态结构分析法在静态结构分析中,测试者通过使用测试工具使用测试工具分析程序源代码的系统结构、数据结构、数据接口、内部控制逻辑等内部

11、结构,生成函数调用关函数调用关系图系图、模块控制流图模块控制流图、内部文件调用关系图等各种图形图表,清晰地标识整个软件的组成结构,便于理解,通过分析这些图表,检查软件有没有存在缺陷或错误;包括控制流分析、数据据流分析、接口分析、表达式分析(1) 函数调用关系图:通过应用程序各函数之间的调用关系展示了系统的结构。列出所有函数,用连线表示调用关系,作用: 可以检查函数的调用关系是否正确 是否存在孤立的函数而没有被调用 明确函数被调用的频繁度,对调用频繁的函数可以重点检查(2) 模块控制流图:由许多结点和连接结点的边组成的图形,其中每个结点代表一条或多条语句,边表示控制流向,可以直观地反映出一个函数

12、的内部结构。*例子 1GIS 软件:存在无法执行的死代码;有多个出口,可能没有在所有出口进行内存释放与回收,有内存泄露的可能*例子 2MIS 软件:有多个出口,存在内存泄露的可能;有 10 逻辑判断结点,易出现逻辑错误,降低可靠性,可能会破坏对 CPU 操作进行优化的处理,影响其运行性能3静态质量度量法(1) 软件质量:根据 ISO/IEC9126 国际标准,包括以下六个方面: 功能性(functionality) 可靠性(reliability) 可用性(usability) 有效性(efficiency) 可维护性(maintainability) 轻便性(portability)(2)

13、质量度量模型(从上到下) 质量因素(Factors):与分类标准的计算方式相似,依据各分类标准取值组合权重方法来计算,依据结果将软件质量分为四个等级,与分类标准等级内容相同 分类标准(criteria):对某一软件质量分为不同的分类标准,每个分类标准由一系列度量规则组成,每个规则分配一个权重,每个分类标准的取值由规则的取值与权重值计算得出,依据结果将软件质量分为四个等级: 优秀(excellent):符合本模型框加中的所有规则(可以接受) 良好(good):未大量偏离模型框架中的规则(可以接受) 一般(fair):违背了模型框架中的大量规则(可以接受) 较差(poor):无法保障正常的软件可维

14、护性(不可以接受) 度量规则(Metrics):使用代码行数、注释频度等参数度量软件各种行为属性四 白盒测试方法动态测试(即设计测试用例的方法)1白盒测试的动态测试原则根据程序的控制结构设计测试用例(1 1) 保证每个模块的所有独立路径至少被使用一次保证每个模块的所有独立路径至少被使用一次(2 2) 对所有的逻辑值均测试对所有的逻辑值均测试 truetrue 和和 falsefalse(3 3) 上下边界及可操作范围内运行所有循环上下边界及可操作范围内运行所有循环(4 4) 检查内部数据结构以确保其有效性检查内部数据结构以确保其有效性2 2逻辑覆盖法逻辑覆盖法(1) 概述 逻辑覆盖是通过对程序

15、逻辑结构的遍历实现程序的覆盖(2) 分类依据覆盖源程序语句的详尽程度 语句覆盖 SC(Statement Coverage) 判定覆盖 DC(Decision coverage) 条件覆盖 CC(Condition Coverage) 条件判定组合覆盖 CDC(Condition/ Decision Coverage) 多条件覆盖 MCC (Multiple Condition Coverage) 修改条件判定覆盖 MCDC(Multiple Condition Decision Coverage)(3) 语句覆盖(SC) 选择足够多的测试数据,使被测程序中每条语句每条语句至少执行一次 缺点:

16、对程序执行逻辑的覆盖很低(4) 判定覆盖(DC) 设计足够多的测试用例,使得程序中的每一个判定程序中的每一个判定至少获得一次真值和假值,或者使得程序中的每一个取真分支或取假分支至少经历一次,因此又称分支覆盖如:A&(B|C),A|(B|C)A=T,B=T,C=TA=F,B=F,C=F 可以满足语句覆盖 缺点:主要对整个表达式最终取值进行度量,忽略了表达式内部取值(5) 条件覆盖(CC) 设计足够多的测试用例,使得每一判定语句中每个逻辑条件的可能值至少满足一次。 如:A&(B|C),A|(B|C)A=T,B=F,C=TA=F,B=T,C=F 不能够满足判定覆盖。 条件覆盖只能保证

17、每个条件至少有一次为真,而不考虑所有的判定结果。(6) 条件判定组合覆盖(CDC) 设计足够多的测试用例,使得判定中的每个条件的所有可能(真/假)至少出现一次,并且每个判定本身的判定结果也至少出现一次如:A&(B|C),A|(B|C)A=T,B=T,C=TA=F,B=F,C=F 缺点:没有考虑单个判定对整体结果的影响,无法发现逻辑错误(7) 多条件覆盖(MCC) 也称条件组合覆盖,设计足够多的测试用例,使得每个判定中条件的各种可能组合都至少出现一次(以数轴形式划分区域,提取交集,建立最少的测试用例)A&(B|C),A|(B|C)A-B-CT-T-TT- T- FT-F-TT-F

18、-FF-F-FF-F-TF-T-FF-T-T 满足条件覆盖一定满足判定覆盖、条件覆盖、条件判定组合覆盖 缺点:判定语句较多时,条件组合值比较多(8) 修正条件判定覆盖(MCDC) 每一个程序模块的入口和出口点都要考虑至少要被调用一次,每个程序的判定到所有可能的结果值要至少转换一次 程序的判定被分解为通过逻辑操作符(and,or)连接的 bool 条件,每个条件对于判定的结果值是独立的练习 1:采用多条件覆盖方法,对下程序进行白盒测试用例设计if (a 1 )&( b= = 0) x=x/a;if ( a = = 2)| (x 1 ) x=x+1;六种逻辑覆盖的强弱关系六种逻辑覆盖的强弱

19、关系在外面很多的教程都认为这六种逻辑覆盖从弱到强的排列顺序是:语句覆盖-判定覆盖-条件覆盖-判定-条件覆盖-条件组合覆盖-路径覆盖但经过上面的分析,它们之间的关系实际上可以用下图表示:达到 100CDC 要求就一定能够满足 100DC 的要求达到 100DC 要求就一定能够满足 100SC 的要求达到 100CDC 要求就一定能够满足 100CC 的要达到 100MCDC 要求就一定能够满足 100DC 的要求达到 100路径覆盖要求就一定能够满足 100DC 的要求而路径覆盖很难在该图表示出来。覆盖是一种白盒测试方法,测试人员必须拥有程序的规格说明和程序清单,以程序的内部结构为基础,来设计测

20、试案例。其基本准则是则测试案例来尽可能多地覆盖程序的内部逻辑结构,发现其中的错误和问题。所以,覆盖测试一般应用在软件测试的早期,即单元测试阶段。覆盖的几种方法或策略如表 1 所列。表 1 几种典型的覆盖策略覆盖策略定 义语句覆盖(sc)在制定测试案例时,使程序中的每个语句都至少执行1 次。其缺点是不能发现某些逻辑错误判定覆盖执行足够的测试案例,使得程序中每个判定都获得一次“真”值和“假”值,或者说使每一个分支都至少通过 1 次条件覆盖执行足够的测试案例,使得判定中的每个条件获得各种可能的结果判定/条件覆盖执行足够的测试案例,使得判定中的每个条件取得各种可能的值,并使得每个判定取得各种可能的结果

21、条件组合覆盖执行足够的测试案例,使得每个判定中的条件的各种组合都至少出现 1 次。其特点是覆盖较充分,满足条件组合覆盖的测试案例也一定满足判定覆盖、条件覆盖和判定/条件覆盖。修改的条件/判断覆盖每一个程序模块的入口和出口点都要考虑至少要被调(MCDC)用一次,每个程序的判定到所有可能的结果值要至少转换一次程序的判定被分解为通过逻辑操作符(and,or)连接的 bool 条件,每个条件对于判定的结果值是独立的从以上简要介绍可看出,这几种覆盖策略的严格程序有如下趋势: 其它一些覆盖策略还包括:修改的条件/判断覆盖(通常简称为 MCDC) 、路径覆盖、函数覆盖、调用覆盖、线性代码顺序和跳转覆盖、数据

22、流覆盖、目标代码分支覆盖、循环覆盖、关系操作符覆盖等。随着软件规模的增长,实现全面的覆盖所需的测试案例的数目也越来越庞大,因此根据被测软件对象的特点选择适当的覆盖策略是非常重要的;同时,要确定合理测试目标,达到 100%的覆盖往往要付出很大的代价,应该同形式化评审等方法结合,以发现更多的软件故障。 覆盖测试工具选取:覆盖测试工具选取:要取得较好的覆盖测试效果,需要借助一定的工具软件。这些工具软件一般具备如下的功能特点,可弥补人为测试的缺陷:分析软件内部结构,帮助制定覆盖策略及设计测试案例;与适当的编译器结合,对被测软件实施自动插装,以便在其运行过程中生成覆盖信息并收集这些信息;根据搜集的覆盖信

23、息计算覆盖率,帮助测试人员找到未被覆盖的软件部位,以改进测试案例提高覆盖率。在利用工具进行动态覆盖测试时,需要 3 个要素:测试用例、插装过的被测代码、搜集覆盖信息并进行分析的工具本身。代码插装由工具自动完成,通过执行测试用例,再由工具搜集覆盖信息并进行分析,就可以看到覆盖率指标了。图中展示实现覆盖测试的基本过程。3基本路径覆盖(1) 概述 在程序控制流图的基础上,通过分析程序控制流图的环路复杂性,导出基本可执行路径的集合,然后据此设计测试用例 设计出的测试用例要保证在测试中程序的每一条可执行语句至少执行一次(2) 程序控制流图 控制流图是描述程序控制流的一种方式 图形符号:圆圈代表一个结点

24、表示一个或多个无分支的语句或源程序语句 边和点圈定的部分叫做区域。当对区域计数时,图形外的一个部分也应记为一个区域 判断语句中的条件为复合条件时,即条件表达式由一个或多个逻辑运算符连接的逻辑表达式(a and b) ,则需要改变复合条件的判断为一系列只有单个条件的嵌套的判断 图形符号图所示(3) 程序环路复杂性 程序的环路复杂性即 McCabe 复杂性度量,简单的定义为控制流图的区域数 从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确保程序中每个可执行语句至少执行一次所必须的测试用例数目的上界 独立路径:包括一组以前没有处理的语句或条件的一条路径 通常环路复杂性可用以下三种方法

25、求得: 将环路复杂性定义为控制流图中的区域数。 设 E 为控制流图的边数,N 为图的结点数,则定义环路复杂性为 V(G)EN2。 若设 P 为控制流图中的判定结点数,则有 V(G)P1。思考题:1、什么是环形复杂度?环形复杂度就是一种为程序逻辑复杂性提供定量尺度的软件度量。将该度量用于基本路径方法,它可以提供程序基本集的独立路径数量和确保所有语句至少执行一次的上界。(4) 基本路径测试步骤 以详细设计或源代码为基础,导出程序的控制流图 计算得到控制流图 G 的环路复杂性 v(g) 确定线性无关的路径的基本集 生成测试用例,确保基本路径集中每条路径的执行五、其它白盒测试方法1、域测试(1) 概述

26、是一种基于程序结构的测试方法,基于对程序输入空间(域)的分析,选择适的测试点进行测试(2) Howden 错误分类相对于程序路径分类 域错误:程序的控制流存在错误,对于某一特定的输入可能执行的是一条错误路径,这种错误称为路径错误,也叫做域错误 计算型错误:对于特定输入执行的路径正确,但赋值语句的错误导致输出结果错误,称为计算型错误 丢失路径错误:由于程序中的某处少了一个判定谓词而引起的(3) 测试理想结果:检验输入空间的每一个输入元素是否都产生正确的结果(4) 缺点 为进行域测试对程序提出的限制过多 当程序存在很多路径时,所需的测试点很多2、符号测试(1) 概述 基本思想是允许程序的输入不仅仅

27、是具体的数值数据,而且包括符号值,符号值可以是基本的符号变量值,也可以是符号变量值的表达式。 符号测试执行的是代数运算,可以作为普通测试的一个扩充 符号测试可以看作是程序测试和程序验证的一个折衷办法(2) 测试理想情况:程序中仅有有限的几条执行路径,如果都完成了符号测试,就可把握的确认程序的正确性了(3) 缺点 分支问题 二义性问题 大程序问题3、Z 路径覆盖(1)概述对循环机制进行简化,减少路径的数量,使得覆盖所有路径成为可能,简化循环意义下的路径覆盖称为 Z 路径覆盖(2)循环简化:限制循环次数,只考虑循环一次或零次情况4、程序变异(1) 概述是一种错误驱动测试错误驱动测试:指该方法是针对

28、某类特定程序错误的,即专门测试某类错误是否存在错误驱动测试分类:程序强变异和程序弱变异(2) 优点:便于集中目标对软件危害最大的可能错误,提高测试效率,降低成本六 白盒测试综合策略1白盒测试中测试方法的选择策略(1) 在测试中,首先尽量使用测试工作进行静态结构分析(2) 采用先静态后动态的组合方式,先进行静态结构分析,代码检查和静态质量度量,然后现进行覆盖测试(3) 利用静态结构分析的结果,通过代码检查和动态测试的方法对结果进一步确认,使测试工作更为有效(4) 覆盖率测试是白盒测试的重点,使用基本路径测试达到语句覆盖标准;对于重点模块,应使用多种覆盖标准衡量代码的覆盖率(5) 不同测试阶段,侧

29、重点不同 单元测试:以代码检查、逻辑覆盖 集成测试:增加静构结构分析、静态质量度量 系统测试:根据黑盒测试结果,采用白盒测试2最少测试用例数计算 将构成循环操作的重复型结构用选择结构代替,因此在 N-S 图中只存在顺序和分支操作 N-S 图按分支结构分层,整个程序的最少测试用例数为每个分层中最少测试用例数的乘积3测试覆盖标准 Foster 的 ESTCA 覆盖标准 Woodward 等人的层次 LCSAJ 覆盖标准七、如何挑选白盒测试工具 白盒测试目前主要用在具有高可靠性要求的软件领域,例如:军工软件、航天航空软件、工业控制软件等等。白盒测试工具在选购时应当主要是对开发语言的支持、代码覆盖的深

30、度、嵌入式软件的测试、测试的可视化等。 对开发语言的支持:白盒测试工具是对源代码进行的测试,测试的主要内容包括词法分析与语法分析、静态错误分析、动态检测等。但是对于不同的开发语言,测试工具实现的方式和内容差别是较大的。目前测试工具主要支持的开发语言包括:标准 C、C、Visual C、Java、Visual J+等。下表为不同公司的不同类型的测试工具列表:表 1-1 测试工具分类功能测试功能测试性能测试性能测试白盒白盒测试管理测试管理缺陷管理缺陷管理MIMIQTPWINRUNNERLOADRUNNERTESTDIRECTORRATIONALRATIONALROBOTROBOTPURIFYTES

31、TMANAGERCLEARQUESTCOMPUWARECOMPUWAREQARUNQALOADDEVPARTNERQACENTERTRACKRECORDTELELOGICTELELOGICLOGISCOPETELELOGIC DOORSPARASOFTPARASOFTC+TESTJTESTRADVIEWRADVIEWWEBLOADTESTVIEW MANAGERMICROSOFTMICROSOFTWASSUNSUNJUNIT从表中我们可以看到,RAIONAL 公司,COMPUWARE 公司,TELELOGIC 公司,PARASOFT 公司和 SUN 公司都有自己研发的百盒测试工具,其中 PAR

32、ASOFT 公司是专门做百盒测试工具的。八、白盒测试之基本路径测试法白盒测试之基本路径测试法( (独立路径覆盖法独立路径覆盖法) )详介详介 白盒测试白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、Z 路径覆盖、程序变异。其中运用最为广泛的是基本路径测试法。基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。设计出的测试用例要保证在测试中程序的每个可执行语句至少执行一次。在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例。包

33、括以下 4 个步骤和一个工具方法:1. 程序的控制流图:描述程序控制流的一种图示方法。2. 程序圈复杂度:McCabe 复杂性度量。从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。3. 导出测试用例:根据圈复杂度和程序结构设计用例数据输入和预期结果。4. 准备测试用例:确保基本路径集中的每一条路径的执行。工具方法:图形矩阵:是在基本路径测试中起辅助作用的软件工具,利用它可以实现自动地确定一个基本路径集。程序的控制流图:描述程序控制流的一种图示方法。圆圈称为控制流图的一个结点,表示一个或多个无分支的语句或源程序语句 流

34、图只有二种图形符号:图中的每一个圆称为流图的结点,代表一条或多条语句。流图中的箭头称为边或连接,代表控制流任何过程设计都要被翻译成控制流图。如何根据程序流程图画出控制流程图?在将程序流程图简化成控制流图时,应注意:n 在选择或多分支结构中,分支的汇聚处应有一个汇聚结点。n 边和结点圈定的区域叫做区域,当对区域计数时,图形外的区域也应记为一个区域。如下图所示 n 如果判断中的条件表达式是由一个或多个逻辑运算符 (OR, AND, NAND, NOR) 连接的复合条件表达式,则需要改为一系列只有单条件的嵌套的判断。例如:1 if a or b2 x3 else4 y对应的逻辑为: 独立路径:至少沿

35、一条新的边移动的路径 基本路径测试法的步骤:o 第一步:画出控制流图流程图用来描述程序控制结构。可将流程图映射到一个相应的流图(假设流程图的菱形决定框中不包含复合条件)。在流图中,每一个圆,称为流图的结点,代表一个或多个语句。一个处理方框序列和一个菱形决测框可被映射为一个结点,流图中的箭头,称为边或连接,代表控制流,类似于流程图中的箭头。一条边必须终止于一个结点,即使该结点并不代表任何语句(例如:if-else-then结构)。由边和结点限定的范围称为区域。计算区域时应包括图外部的范围。 画出其程序流程图和对应的控制流图如下 第二步:计算圈复杂度圈复杂度是一种为程序逻辑复杂性提供定量测度的软件

36、度量,将该度量用于计算程序的基本的独立路径数目,为确保所有语句至少执行一次的测试数量的上界。独立路径必须包含一条在定义之前不曾用到的边。有以下三种方法计算圈复杂度:流图中区域的数量对应于环型的复杂性;给定流图 G 的圈复杂度 V(G),定义为 V(G)=E-N+2,E 是流图中边的数量,N 是流图中结点的数量;给定流图 G 的圈复杂度 V(G),定义为 V(G)=P+1,P 是流图 G 中判定结点的数量。 第三步:导出测试用例根据上面的计算方法,可得出四个独立的路径。(一条独立路径是指,和其他的独立路径相比,至少引入一个新处理语句或一个新判断的程序通路。V(G)值正好等于该程序的独立路径的条数

37、。) 路径 1:4-14 路径 2:4-6-7-14 路径 3:4-6-8-10-13-4-14 路径 4:4-6-8-11-13-4-14根据上面的独立路径,去设计输入数据,使程序分别执行到上面四条路径。o 第四步:准备测试用例为了确保基本路径集中的每一条路径的执行,根据判断结点给出的条件,选择适当的数据以保证某一条路径可以被测试到,满足上面例子基本路径集的测试用例是: 举例说明:例:下例程序流程图描述了最多输入 50 个值(以1 作为输入结束标志),计算其中有效的学生分数的个数、总分数和平均值。 步骤 1:导出过程的流图。 步骤 2:确定环形复杂性度量 V(G):1)V(G)= 6 (个区

38、域)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-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

39、-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)的测试用例:输入多于 50 个有效分数,即试图处理 51 个分数,要求前 51 个为有效分数;期望结果:n1=50、且算出正确的总分和平均分。4)路径 4(1-2-3-4-5-8-2)的测试用例:scorei=有效分数,当 i50;scorek

40、0, k i ;期望结果:根据输入的有效分数算出正确的分数个数 n1、总分 sum 和平均分 average。举例说明:例:下例程序流程图描述了最多输入 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 条独立的路径

41、:路径 1:1-2-9-10-12路径 2:1-2-9-11-12路径 3:1-2-3-9-10-12路径 4:1-2-3-4-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 ;期望的

42、结果:average = 1 ,其他量保持初值。3)路径 3(1-2-3-9-10-12)的测试用例:输入多于 50 个有效分数,即试图处理 51 个分数,要求前 51 个为有效分数;期望结果:n1=50、且算出正确的总分和平均分。4)路径 4(1-2-3-4-5-8-2)的测试用例:scorei=有效分数,当 i50;scorek0, k=)4. m_oper.SetCurSel(0);5. else6. 7. if (temp = = )8. m_oper.SetCurSel(1);9. else10. 11. if ( temp = = = =)12. m_oper.SetCurSel(

43、2);13. else14. 15. if( temp = = =)16. m_oper.SetCurSel(3);17. else18. 19. if ( temp = = =” )m_oper.SetCurSel(0)Path 2ReadPara(” )m_oper.SetCurSel(1)Path 3ReadPara(”=” )m_oper.SetCurSel(2)2347811121516192022232425262728Path 4ReadPara(” )m_oper.SetCurSel(3)Path 5ReadPara(”3)&(z5) )8. j=x*y+10; /语句

44、块 2 9. j=j%3; /语句块 310. LCSAJ(5 个): (1)int k=0,j=0; if ( (x3)&(z5) ) (3)if ( (x=4)|(y5) ) (4)j=x*y+10; j=j%3 (5)j=j%3 LCSAJ 路径(4 条): (1)-(2)-(4) (1)-(2)-(5) (1)-(3)-(4) (1)-(3)-(5)7、为什么要进行白盒测试?原因有三,如下:逻辑错误和不正确假设与一条程序路径被运行的可能性成反比。我们经常相信某逻辑路径不可能被执行,而事实上,它可能在正常的基础上被执行。印刷上的错误是随机的。8、白盒测试用例测试方法1、 语句(s

45、tatement)覆盖:语句覆盖是最起码的结构覆盖要求,要求设计足够多的测试用例,使得程序中每条可执行语句至少被执行一次。2、判定(branches)覆盖/分支覆盖:要求设计足够多的测试用例,使得程序中每个判定至少有一次为真值,有一次为假值,即:程序中的每个分支至少执行一次。3、条件(condition)覆盖:要求设计足够多的测试用例,使得判定中的每个条件至少有一次为真值,有一次为假值。4、判定/条件(branches/condition)覆盖:设计足够多的测试用例,使得判定中每个条件的所有可能结果至少出现一次,每个判定本身所有可能结果也至少出现一次。5、组合覆盖:要求设计足够多的测试用例,使

46、得每个判定中条件结果的所有可能组合至少出现一次。6、路径覆盖:设计足够的测试用例,覆盖程序中所有可能的路径下面举例说明:下面举例说明:语句覆盖(SC):程序中的每条词句至少执行一次如针对以下程序段,对于变量 c 的取值,至少需要(61)个测试用例才能够满足语句覆盖的要求。c = (u8_t *)q-payload)i; switch (c) case SLIP_END: sio_send(SLIP_ESC, netif-state); sio_send(SLIP_ESC_END, netif-state);break; case SLIP_ESC: sio_send(SLIP_ESC, net

47、if-state); sio_send(SLIP_ESC_ESC, netif-state); break; default: sio_send(c, netif-state); break; (61)A4 B.3B.3 C2 D 1 判定覆盖(DC)设计足够测试用例,使得程序中的每个判定至少都获得一次“真值”或“假值”,或都 说使得程序中的每一个取“真”或“假”分支至少经历一次,因些判定覆盖又称分支覆盖。A&(B|C),A|(B|C)A=T,B=T,C=TA=F,B=F,C=F针对以下 C 语言程序段,对于(MaxNum,Type)的取值,至少需要(62)个测试用例能够满足判定覆盖的

48、要求。while ( MaxNum- 0 ) if ( 10 = Type ) x = y * 2; else if ( 100 = Type ) x = y + 10; else x = y - 20; (62)A5B 4 C C 3 3 D 2 测试用例:(1,10),(1,100),(1,200)条件覆盖(CC):构造一组测试用例,使得每一判定语句中每个逻辑条件的可能值至少满足一次A&(B|C),A|(B|C)A=T,B=F,C=TA=F,B=T,C=F针对下列程序段,对于(A,B)的取值,以下(57)测试用例组合能够满足条件覆盖的要求。 IF ( ( A - 10 ) = 20

49、 AND ( B + 20 ) 10 ) THEN C = 0 IF ( ( A - 30 ) 10 AND ( B - 30 ) 10A - 30 10 B - 30 0150-10FFFT24040FTFF330-10TFTT43030TTTF条件判定组合覆盖(CDC)设计足够的测试用例,使得判定中每个条件的所有可能(真/假)至少出现一次,并且每个判定本身的判定结果(真/假)也至少出现一次。A&(B|C),A|(B|C)A=T,B=T,C=TA=F,B=F,C=F多条件覆盖(MCC)使得每个判定中条件的各种可能组合都至少出现一次。A&(B|C),A|(B|C)A-B-CT-

50、T-TT- T- FT-F-TT-F-FF-F-FF-F-TF-T-FF-T-T(2006) 多条件覆盖是一种逻辑覆盖,它的含义是设计足够的测试用例,使得每个判定中条件的各种可能组合都至少出现一次,满足多条件覆盖级别的测试用例也是满足_(26)_级别的:针对布尔表达式 A&(B|C) 执行逻辑覆盖测试,测试用例至少需要_(27)_种组合才能满足多条件覆盖的要求。(26)A A语句覆盖、判定覆盖、条件覆盖、条件判定组合覆盖B判定覆盖、条件覆盖;条件判定组合覆盖、修正条件判定覆盖C语句覆盖、判定覆盖、条件判定组合覆盖、修正条件判定覆盖D路径覆盖、判定覆盖、条件覆盖、条件判定组合覆盖 (27

51、)A6 B4 C C8 D12修正条件判定覆盖(MCDC)两个条件:每一个程序模块的入口和出口都要考虑至少要被调用一次,每个程序的判定到所有可能的结果值至少转换一次;其次,程序的判定被分解为通过逻辑操作符(and、or)连接的 bool 条件,每个条件对于判定的结果值是独立的。假设 A、B 为布尔变量,对于逻辑表达式( A & B ) ,至少需要(63)个测试用例才能完成 MCDC 覆盖。(63)A4 B B3 3 C2 D1 用例集:(T,T),(T,F),(F,T) ABA&B1TTT2TFF3FTF4FFF(2009) 针对程序段:IF( A|B|C )THEN W=W/

52、X,对于(A,B,C)的取值, (57)测试用例能够满足 MCDC(修正条件逻辑判定)的要求。 (57)A(F,T,T) (T,F,T) (T,F,F) (T,T,F) B(T,F,F) (T,T,F) (F,T,T) (F,F,F) C C(T,F,F)(T,F,F) (T,T,F)(T,T,F) (F,T,T)(F,T,T) (F,F,T)(F,F,T) D(T,F,F) (F,T,F) (F,F,T) (F,F,F)序号ABCA|B|CABC1TTTT2TTFT43TFTT4TFFT25FTTT6FTFT77FFTT68FFFF6、基本路径法(环路复杂度) 通常环路复杂性可用以下三种方法

53、求得:1、将环路复杂性定义为控制流图中的区域数。2、设 E 为控制流图的边数,N 为图的结点数,则环路复杂性为 V(G)EN2。3、若设 P 为控制流图中的判定结点数,则有 V(G)P1。 但即使每条路径都测试过了,仍然可能存在错误。因为: 穷举路径测试无法检查出程序本身是否违反了设计规范,即程序是否是一个错误的程序。 穷举路径测试不可能查出程序因为遗漏路径而出错。 穷举路径测试发现不了一些与数据相关的错误。 测试覆盖率:用于确定测试所执行到的覆盖项的百分比。其中的覆盖项是指作为测试基础的一个入口或属性,比如语句、分支、条件等。 测试覆盖率可以表示出测试的充分性,在测试分析报告中可以作为量化指

54、标的依据,测试覆盖率越高效果越好。但覆盖率不是目标,只是一种手段。 测试覆盖率包括功能点覆盖率和结构覆盖率: 功能点覆盖率大致用于表示软件已经实现的功能与软件需要实现的功能之间的比例关系。 结构覆盖率包括语句覆盖率、分支覆盖率、循环覆盖率、路径覆盖率等等。白盒测试历年考试类型(实战你能做多少?)白盒测试历年考试类型(实战你能做多少?):一、选择题:2006 年 多条件覆盖是一种逻辑覆盖,它的含义是设计足够的测试用例,使得每个判定中条件的各种可能组合都至少出现一次,满足多条件覆盖级别的测试用例也是满足_(26)_级别的:针对布尔表达式 A&(B|C) 执行逻辑覆盖测试,测试用例至少需要_

55、(27)_种组合才能满足多条件覆盖的要求。(26)A A语句覆盖、判定覆盖、条件覆盖、条件判定组合覆盖B判定覆盖、条件覆盖;条件判定组合覆盖、修正条件判定覆盖C语句覆盖、判定覆盖、条件判定组合覆盖、修正条件判定覆盖D路径覆盖、判定覆盖、条件覆盖、条件判定组合覆盖(27)A6 B4 C C8 D12 逻辑路径覆盖法是白盒测试用例的重要设计方法,其中语句覆盖法是较为常用的方法,针对下面的语句段,采用语句覆盖法完成测试用例设计,测试用例见下表,对表中的空缺项(True 或者 False),正确的选择是_(60)_。语句段:if (A & (B|C) x=l;else x=O;用例表: 用例

56、1用例 2ATRUEFALSEBFALSECTRUEA &(B|C)FALSE(60)A ATRUE FALSE TRUE BTRUE FALSE FALSECFALSE FALSE TRUEDTRUE TRUE FALSE _(61)_方法根据输出对输入的依赖关系设计测试用例。(61)A路径测试B等价类 C C因果图D边界值 针对下面程序段,边界值问题可以定位在_(62)_。1:Rem Create a 10 element integer array2:Rem lnitialize each element to -13:Dim data(10) As Integer4:Dim i

57、 As Integer5:For i=1 TO 106:data(i)=-17:Next i8:End(62) A. data(1)B B. data(0)C. data(9)D. data(10) 以下控制流图的圈复杂度 V(g)和基本圈复杂度 EV(g)是_(63)_ (63)AV(g)=5 EV(g)=1BV(g)=6 EV(g)=6CV(g)=5 EV(g)=5D DV(g)=6 EV(g)=1 2007 年阅读下列流程图:当用判定覆盖法进行测试时,至少需要设计(44)个测试用例。当用判定覆盖法进行测试时,至少需要设计(44)个测试用例。(44)A. 2 B.B. 4 C. 6 D.

58、8 以下控制流程图的环路复杂性 V(G)等于(54)。(54) A4 B B5 C6 D1 针对下列程序段,对于(A,B,C)的取值,以下(56)测试用例组合能够满足语句覆盖的要求。 IF ( ( A + 10 ) = 2 OR ( B -20 ) 10 AND ( C - 30 ) 10 ) THEN C = 0 IF ( ( A - 30 ) 10 AND ( B - 30 ) 10ANDA-3010 B-30payload)i; switch (c) case SLIP_END: sio_send(SLIP_ESC, netif-state); sio_send(SLIP_ESC_END

59、, netif-state);break; case SLIP_ESC: sio_send(SLIP_ESC, netif-state); sio_send(SLIP_ESC_ESC, netif-state); break; default: sio_send(c, netif-state); break; (61)A4 B.3B.3 C2 D 1 针对以下 C 语言程序段,对于(MaxNum,Type)的取值,至少需要(62)个测试用例能够满足判定覆盖的要求。while ( MaxNum- 0 ) if ( 10 = Type ) x = y * 2; else if ( 100 = Ty

60、pe ) x = y + 10; else x = y - 20; (62)A5B 4 C C 3 3 D 2 假设 A、B 为布尔变量,对于逻辑表达式( A & B ) ,至少需要(63)个测试用例才能完成 MCDC 覆盖。(63)A4 B B3 3 C2 D1 用例 1用例 2用例 3用例 4ATTFFBFTTFA&BFTFF(2008 年)(43) 下面为 C 语言程序,边界值问题可以定位在(45) 。 int data(3), int i, for (i=1,i=1 并且 X10)AND(Y10Y20AND(30,15) (40,10)TTTTTT(3,0) (30,30)FTTFFF(5,25) (10,20)FFFFFF(20,10) (1,100)TFTFTF(2009 年) 关于白盒测试的测试用例设计方

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论