逻辑覆盖路径分析白盒测试方法.ppt_第1页
逻辑覆盖路径分析白盒测试方法.ppt_第2页
逻辑覆盖路径分析白盒测试方法.ppt_第3页
逻辑覆盖路径分析白盒测试方法.ppt_第4页
逻辑覆盖路径分析白盒测试方法.ppt_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

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

文档简介

1,一、白盒测试 二、动态测试基本概念 三、逻辑覆盖 四、路径分析,白盒测试方法,2,一、白盒测试,此方法把测试对象看做一个透明的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。 通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。,3,(一)静态白盒测试,静态白盒测试是在不执行的条件下有条理地仔细审查软件设计、体系结构和代码,从而找出软件缺陷的过程。 好处: 尽早发现软件缺陷。 为黑盒测试员提供思路。,4,(一)静态白盒测试,审查是正式、严格、具有深度的技术评审,以便尽可能准确地确定问题之所在。 审查过程的目的: 在软件开发过程中尽可能早地发现问题。 确保对需要重做部分达成一致意见。 验证任何重做部分满足预先定义的准则。,此阶段主要进行代码评审,5,(一)静态白盒测试,为什么要坚持编码标准和规范? 可靠性。 可读性/维护性 移植性,6,(一)静态白盒测试,通用代码审查清单 数据引用错误; 数据声明错误; 计算错误; 比较错误; 控制流程错误; 子程序参数错误; 输入/输出错误; 其他检查。,7,(一)静态白盒测试,数据引用错误 是否引用了未初始化的变量? 数组和字符串的下标是整数值吗? 是否在应该使用常量的地方使用了变量? 变量是否被赋予不同类型的值? 为引用的指针分配内存了吗? 、,8,(一)静态白盒测试,数据声明错误 所有变量都赋予正确的长度和类型了吗? 变量是否在声明的同时进行了初始化? 存在声明过、但从未引用或者只引用过一次的变量吗? 在特定模块中所有变量都显示声明了吗?,9,(一)静态白盒测试,计算错误 计算中是否使用了不同数据类型的变量? 计算中是否了解和考虑到编译器对类型或长度不一致的变量的转换规则? 在数值计算过程中是否可能出现溢出? 除数/模是否可能为零? 变量的值是否超过有意义的范围? 对于包含多个操作数的表达式,求值的次序是否混乱,运算优先级对吗?,10,(一)静态白盒测试,比较错误 比较的正确吗? 存在分数或者浮点值之间的比较吗?如果有,精确问题会影响比较吗? 每一个逻辑表达式都正确表达了吗?逻辑计算如期进行了吗?求值次序有疑问吗? 逻辑表达式的操作是逻辑值吗?,11,(一)静态白盒测试,控制流程错误 如果程序包含beginend和 do while 等语句组,end是否对应? 程序、模块、子程序和循环能否终止? 可能存在永远不停的循环吗? 循环可能从不执行吗?,12,(一)静态白盒测试,子程序参数错误 子程序接受的参数类型和大小与调用代码发送的匹配吗? 如果子程序有多个入口点,引用的参数是否与当前入口点没有关联? 常量是否当作形参传递,意外在子程序中改动?,13,(一)静态白盒测试,输入/输出错误 软件是否严格遵守外部设备读写数据的专用格式? 文件或者外部不存在或者未准备好的错误情况有处理吗? 软件是否处理外部设备未连接、不可用,或者读写过程中存储空间占满等情况?,14,(二)动态白盒测试,动态白盒测试是指利用查看代码功能和实现方式得到的信息来确定哪些要测试,哪些不要测试,如何开展测试。 动态白盒测试的另一个常用名称是结构测试,因为软件测试员可以查看并使用代码的内部结构,从而设计和执行测试。,15,软件人员使用白盒测试方法,主要想对程序模块进行如下的检查: 对程序模块的所有独立的执行路径至少测试一次; 对所有的逻辑判定,取“真”与取“假”的两种情况都至少测试一次; 在循环的边界和运行界限内执行循环体; 测试内部数据结构的有效性,等。,16,对一个具有多重选择和循环嵌套的程序,不同的路径数目可能是天文数字。给出一个小程序的流程图,它包括了一个执行20次的循环。 包含的不同执行路径数达520条,对每一条路径进行测试需要1毫秒,假定一年工作365 24小时,要想把所有路径测试完,需3170年。,17,18,二、动态测试基本概念,控制流图 环形复杂性 图矩阵,19,1. 程序的控制流图,符号为控制流图的一个结点,表示一个或多个无分支的语句。箭头为边,表示控制流的方向。,20,在选择或多分支结构中,分支的汇聚处应有一个汇聚结点。 边和结点圈定的部分叫做区域,当对区域计数时,图形外的区域也应记为一个区域。 如果判断中的条件表达式是由一个或多个逻辑运算符 (OR, AND, NAND, NOR) 连接的复合条件表达式,则需要改为一系列只有单个条件的嵌套的判断(针对详细流程图)。,21,22,23,2. 程序环形复杂性,程序的环形(圈)复杂性给出了程序基本路径集中的独立路径条数,这是确保程序中每个可执行语句至少执行一次所必需的测试用例数目的上界。 从控制流图来看,一条独立路径是从入口到出口至少包含有一条在其它独立路径中从未有过的边的路径。,24,例如,在图示的控制流图中,一组独立的路径是 path1:1 - 11 path2:1 - 2 , 3 - 4 , 5 - 10 - 1 - 11 path3:1 - 2 , 3 - 6 - 8 - 9 - 10 - 1 - 11 path4:1 - 2 , 3 - 6 - 7 - 9 - 10 - 1 - 11 路径 path1,path2,path3,path4组成了控制流图的一个基本路径集。,25,环形复杂性的三种计算方法,1)、流图G的环形复杂性V(G)=流图中区域的数量 2)、流图G的环形复杂性V(G)E-N+2,E是流图中边的数量,N是流图中节点的数量 3)、流图G的复杂性V(G)P1,P是流图中判定节点的数量,26,3. 图矩阵,为便于在机器上表示和处理控制流图,开发辅助基本路径测试的软件工具,可把流图转化为矩阵形式,即图矩阵。 图矩阵是一个正方形矩阵,其大小等于流图的节点数。,a,c,b,d,f,e,27,三、逻辑覆盖,逻辑覆盖是以程序内部的逻辑结构为基础的设计测试用例的技术。它属白盒测试。,语句覆盖 判定覆盖 条件覆盖,判定条件覆盖 条件组合覆盖 路径覆盖,28,例,29,L1,例,L2,L3,L4,30,31,32,e,33,34,语句覆盖,语句覆盖就是设计若干个测试用例,运行被测程序,使得每一可执行语句至少执行一次。 在图例中,正好所有的可执行语句都在路径L1上,所以选择路径 L1设计测试用例,就可以覆盖所有的可执行语句。,35,如果将第一个条件中的and改为or,或将第二个条件中的or改为and,该测试用例测试不出错误。,36,判定覆盖,判定覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次。 判定覆盖又称为分支覆盖。 对于图例,如果选择路径L1和L2,就可得满足要求的测试用例:,37,【(2, 0, 4),(2, 0, 3)】覆盖 ace【L1】 【(1, 1, 1),(1, 1, 1)】覆盖 abd【L2】,38,如果选择路径L3和L4,还可得另一组可用的测试用例: 【(2, 1, 1),(2, 1, 2)】覆盖 abe【L3】 【(3, 0, 3),(3, 0, 1)】覆盖 acd【L4】,39,【(2, 1, 1),(2, 1, 2)】覆盖 abe【L3】 【(3, 0, 3),(3, 0, 1)】覆盖 acd【L4】,上述两组测试用例不仅满足了“判定覆盖”,同时还做到了“语句覆盖”.但如果第二个判定条件X1,错写成X1,使用上述测试用例(2,1,1),照样能沿原路径(abe)执行,而不影响结果。,40,例,41,条件覆盖,条件覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个判断的每个条件的可能取值至少执行一次。 在图例中,我们事先可对所有条件的取值加以标记。例如, 对于第一个判断: 条件 A1 取真为 ,取假为 条件 B0 取真为 ,取假为,42,对于第二个判断: 条件A2 取真为 ,取假为 条件X1 取真为 ,取假为 测试用例 覆盖分支 条件取值 【(2, 0, 4),(2, 0, 3)】 L1(c, e) 【(1, 0, 1),(1, 0, 1)】 L2(b, d) 【(2, 1, 1),(2, 1, 2)】 L3(b, e) 或,43,测 试 用 例 覆盖分支 条件取值 【(1, 0, 3),(1, 0, 4)】 L3(b, e) 【(2, 1, 1),(2, 1, 2)】 L3(b, e) 判定条件覆盖 判定条件覆盖就是设计足够的测试用例,使得判断中每个条件的所有可能取值至少执行一次,同时每个判断中的所有可能取值至少执行一次。,44,测试用例 覆盖分支 条件取值 【(2, 0, 4),(2, 0, 3)】L1(c, e) 【(1, 1, 1),(1, 1, 1)】L2(b, d),45,条件组合覆盖,条件组合覆盖就是设计足够的测试用例,运行被测程序,使得每个判断的所有可能的条件取值组合至少执行一次。 记 A1, B0 作 A1, B0 作 A1, B0 作 A1, B0 作,46, A2, X1 作 A2, X1 作 A2, X1 作 A2, X1 作 测 试 用 例 覆盖条件 覆盖组合 【(2, 0, 4), (2, 0, 3)】(L1) , 【(2, 1, 1), (2, 1, 2)】(L3) , 【(1, 0, 3), (1, 0, 4)】(L3) , 【(1, 1, 1), (1, 1, 1)】(L2) , ,47,路径测试,路径测试就是设计足够的测试用例,覆盖程序中所有可能的路径。 测 试 用 例 通过路径 覆盖条件 【(2, 0, 4), (2, 0, 3)】 ace (L1) 【(1, 1, 1), (1, 1, 1)】 abd (L2) 【(1, 1, 2), (1, 1, 3)】 abe (L3) 【(3, 0, 3), (3, 0, 1)】 acd (L4),如图显示某程序的逻辑结构。试为它设计足够的测试用例,分别实现对程序的判定覆盖、条件覆盖和条件组合覆盖。,A0 and B=0,S1,S2,49,50,条件测试路径选择,当程序中判定多于一个时,形成的分支结构可以分为两类:嵌套型分支结构和连锁型分支结构。 对于嵌套型分支结构,若有n个判定语句,需要n+1个测试用例; 对于连锁型分支结构, 若有n个判定语句,需要有2n个测试用例,覆盖它的2n条路径。当n较大时将无法测试。,51,52,循环测试路径选择,循环分为4种不同类型:简单循环、连锁循环、嵌套循环和非结构循环。 (1) 简单循环 零次循环:从循环入口到出口 一次循环:检查循环初始值 二次循环:检查多次循环 m次循环: 检查在多次循环 最大次数循环、比最大次数多一次、少一次的循环。,53,例:求最小值,k = i; for ( j = i+1; j = n; j+ ) if ( Aj Ak ) then k = j; ,54,a,b,e,c,j=n,k=j,j+,55,测试用例选择,56,(2) 嵌套循环 对最内层循环做简单循环的全部测试。所有其它层的循环变量置为最小值; 逐步外推,对其外面一层循环进行测试。测试时保持所有外层循环的循环变量取最小值,所有其它嵌套内层循环的循环变量取“典型”值。 反复进行,直到所有各层循环测试完毕。,57,58, 对全部各层循环同时取最小循环次 数,或者同时取最大循环次数 (3) 连锁循环 如果各个循环互相独立,则可以用与简单循环相同的方法进行测试。但如果几个循环不是互相独立的,则需要使用测试嵌套循环的办法来处理。 (4) 非结构循环 这一类循环应该使用结构化程序设计方法重新设计测试用例。,59,四、路径分析 基本路径测试,基本路径测试方法把覆盖的路径数压缩到一定限度内,程序中的循环体最多只执行一次。 它是在程序控制流图的基础上,分析控制构造的环路复杂性,导出基本可执行路径集合,设计测试用例的方法。设计出的测试用例要保证在测试中,程序的每一个可执行语句至少要执行一次。,60,1. 程序的控制流图,符号为控制流图的一个结点,表示一个或多个无分支的PDL语句或源程序语句。箭头为边,表示控制流的方向。,61,在选择或多分支结构中,分支的汇聚处应有一个汇聚结点。 边和结点圈定的区域叫做区域,当对区域计数时,图形外的区域也应记为一个区域。 如果判断中的条件表达式是由一个或多个逻辑运算符 (OR, AND, NAND, NOR) 连接的复合条件表达式,则需要改为一系列只有单个条件的嵌套的判断。,62,63,64,2. 程序环路复杂性,程序的环路复杂性给出了程序基本路径集中的独立路径条数,这是确保程序中每个可执行语句至少执行一次所必需的测试用例数目的上界。 从控制流图来看,一条独立路径是至少包含有一条在其它独立路径中从未有过的边的路径。,65,例如,在图示的控制流图中,一组独立的路径是 path1:1 - 11 path2:1 - 2 - 3 - 4 - 5 - 10 - 1 - 11 path3:1 - 2 - 3 - 6 - 8 - 9 - 10 - 1 - 11 path4:1 - 2 - 3 - 6 - 7 - 9 - 10 - 1 - 11 路径 path1,path2,path3,path4组成了控制流图的一个基本路径集。,66,3. 导出测试用例,导出测试用例,确保基本路径集中的每一条路径的执行。 根据判断结点给出的条件,选择适当的

温馨提示

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

评论

0/150

提交评论