logo资料库

数据流和控制流测试比较.docx

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
数据流测试和控制流 测试的比较 专业:软件工程 班级: 姓名: 学号:
首先,在软件测试中包含有黑盒测试和白盒测试两种测试。 黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中, 把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程 序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能 适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻 辑结构,主要针对软件界面和软件功能进行测试。 白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一 种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内 部的东西以及里面是如何运作的。"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进 行测试。"白盒"法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构, 从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。 而本文我们要讨论的两种测试都来自于白盒测试。 先来说说控制流测试: 控制流测试基本路径测试和循环测试是最常用且最有效的测试技术。在模块中应对每一 条独立执行路径进行测试,单元测试的基本任务是保证模块中每条语句至少执行一次。此时 设计测试用例是为了发现因错误计算、不正确的比较和不适当的控制流造成的错误。此时基 本路径测试和循环测试是最常用且最有效的测试技术。 常见错误: 1.误解或用错了算符优先级; 2.混合类型运算; 3.变量初值错; 4.精度不够; 5.表达式符号错。 目的: 6.不同数据类型的对象之间进行比较; 7.错误地使用逻辑运算符或优先级; 8.因计算机表示的局限性,期望理论上相等而实际上不相等的两个量相等; 9.比较运算或变量出错; 10.循环终止条件或不可能出现; 11.迭代发散时不能退出; 12.错误地修改了循环变量。 用例来说明控制流测试: (1)画出控制流图 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) 1 2 3 4 5 6 7 8 9
x=y+10; else x=y+20; } } 画出其程序流程图和对应的控制流图如下: 10 11 12 13 14 (2)计算圈复杂度 有以下三种方法计算圈复杂度: A 流图中区域的数量对应于环型的复杂性; B 给定流图 G 的圈复杂度 V(G),定义为 V(G)=E-N+2,E 是流图中边的数量,N 是流图 中结点的数量; C 给定流图 G 的圈复杂度 V(G),定义为 V(G)=P+1,P 是流图 G 中判定结点的数量。 (3)导出测试用例 根据上面的计算方法,可得出四个独立的路径。(一条独立路径是指,和其他的独立路 径相比,至少引入一个新处理语句或一个新判断的程序通路。V(G)值正好等于该程序的独立 路径的条数。 路径 1:4-14 路径 2:4-6-7-14 路径 3:4-6-8-10-13-4-14 路径 4:4-6-8-11-13-4-14 根据上面的独立路径,去设计输入数据,使程序分别执行到上面四条路径。 (4)准备测试用例 为了确保基本路径集中的每一条路径的执行,根据判断结点给出的条件,选择适当的数
据以保证某一条路径可以被测试到,满足上面例子基本路径集的测试用例是: 路径 1: 4-14 输入数据:iRecordNum=0,或者取 iRecordNum<0 的某一个值 预期结果:x=0 路径 2: 4-6-7-14 输入数据:iRecordNum=1,iType=0 预期结果:x=2 路径 3 : 4-6-8-10-13-4-14 输入数据:iRecordNum=1,iType=1 预期结果:x=10 路径 2: 4-6-8-11-13-4-14 输入数据:iRecordNum=1,iType=2 预期结果:x=20 介绍完控制流测试,我们接着说数据流测试: 数据流测试,他与路径测试的区别在于,路径测试基本上是从纯数学的角度上来分析的, 数据流测试则是利用了变量之间的关系,通过定义使用路径和程序片得到一系列的测试指标 用于衡量功能性测试的覆盖率。 数据流测试与数据流图没有任何的关系。数据流并不研究任何的路径,而是把关注点放 在了变量接受值的点和使用(或引用)这些值的点的结构性测试形式。数据流的测试主要包括 两类,一类是定义使用路径和程序片两种数据流测试方法,这两种方法都形式化了测试人员 的直觉行为(和分析),他们都接近与测试用例。 什么是测试人员的直觉行为(和分析)?从早期的数据流测试分析所应用的领域可以看出 一些端倪: 1、变量被定义,但是从来没有使用(引用) 2、所使用的变量没有被定义 3、变量在使用之前被定义两次 从以上三方面来看,早期的数据流测试大概就是用来检测我们现在写程序时候常常会 出现的一些 warning——"您所定义的变量未被使用等"之内的问题,这些问题光靠简单的语 法分析器或者是语义分析器是无法检测出来的,我想这个是不是就是数据流的功能呢?现在 一般都是依靠静态分析来得到这些异常问题的。
基于数据流的基本的概念等东西倒是非常的简单,我下面阐述一下几个比较重要的关于 数据流的概念,还是按照定义使用路径和程序片两类区分。 首先要明确一个假设,数据流的假设还是和路径的假设一致,程序图是一个单入口,单 出口,并且不允许有从某个结点到其自身的边。定义使用路径: a,DEF(v,n),定义结点,变量 v 在结点 n 处定义,定义包括输入语句,赋值语句(等号左 侧),过程调用都是定义结点的例子,如果执行这些语句,变量的值往往会发生变化。 b,USE(v,n),使用结点,变量 v 在结点 n 处被使用,使用包括输出语句、赋值语句(等号 右侧)、条件语句、循环语句、过程调用语句都是结点的使用语句,如果执行这类语句,值 不会被改变。 c,P-use 当且进当 USE(v,n)是谓词使用,比如 a>=2,对于 P-use 的程序图出度>=2 d,C-use 当且仅当 USE(v,n)是计算使用,对于 C-use 的程序图入度<=1 e,定义使用路径:开始结点是 DEF(v,n),结束结点是 USE(v,n)的路径 f,清除路径,当定义结点和清除结点中间没有其他的定义结点的时候为清除路径。 定义使用路径也是一组指标,包括全路径、全定义-使用路径、全使用、全计算使用/部 分谓词使用、全谓词使用/部分谓词使用、全定义、全谓词使用、全边、全结点,这些都是 通过对定义使用路径的定义得到的一些测试指标,与前面的 DD 路径一样是用来检测功能性 测试覆盖率的。 程序片: 程序片的概念倒是很简单,就一个 S(V,n)就是说结点 n 之前的所有对 V 中的变量值做出 贡献的所有语句片段的总和。很明显的,做出贡献的一定是上面所述的 USE(v,n),但是要注 意的是这里的使用路径包括直接和间接的。举个例子说明。比如说在结点n 有个变量a=a+b+c, 那么很明显的知道这里影响 a 的值包括 a,b,c,所以自然要将在结点 n 前影响到值 a,b,c 三个变 量的所有结点都算进去,知道出现一个常量语句,例如 b=2230,那么说明没有什么再影响 b 了。 程序片的一个最大的使用我认为是用来排除程序片段的,比如说现在有两个程序片,一 个是第 8 行的 v,一个是第 10 行的 v,假设第 8 行和第 10 行之间没有任何常量对 v 进行赋值, 那么 p2=(p1,9,10),这里假设第 9 行和第 10 行影响了 v 的值,那么很自然的想到,如果 8 行 之前的程序片 p1 中的变量 v 没有发生问题,而第 10 行的程序片 p2 出现了问题,那么变量 v 的异常必然在 p2-p1 这段程序片上。因此程序片能够很快定位出异常,这个和我们在调试 程序的时候的直觉是一致的。另外有个知识点,如果两个不同结点的变量的 v 的程序片 p1
和 p2 相等,那么对应的路径就是清除路径。 如此数据流测试的基本概念就完结了,数据流测试往往应用于计算密集的程序,数据流 能够很方便的描述程序的部分片段结构,定义使用路径具有和程序片相似的性质,如果 p1 是包含了 p2 的一条定义使用路径 ,如果 p2 没有出现问题,那么问题必然出现在 p1-p2 这 段路径上了。然后片与定义使用路径一个区别在于片并不能很好的反应测试用例,这个也很 容易理解,因为片是反应局部状况的,而定义使用路径则是基于路径的,路径是具有结构化 性质指标的。这些就是基于数据流测试的全部。 总结:以上便是我的控制流测试和数据流测试的比较。在做这次作业期间,我结合老师 所讲,并进行了大量的查找资料,终于完成了这次作业。我想说,老师所要求的这次作业, 课本上讲的并不详细,这体现了老师并不死板教条而是因材施教,结合我们的情况给我们讲 了真正重要的知识,让我们在完成这次作业时能够真正对所学知识有所理解!
分享到:
收藏