热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

(转)白盒测试之基本路径测试方法

引用地址:http:se.csai.cntesttech200803041451591663.htm白盒测试的测试

                                引用地址:http://se.csai.cn/testtech/200803041451591663.htm

白盒测试的测试 方法 有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、Z路径覆盖、程序变异。

  其中运用最为广泛的是基本路径测试法。

  基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路 复杂性 ,导出基本可执行路径集合,从而设计测试用例的方法。

  设计出的测试用例要保证在测试中程序的每个可执行语句至少执行一次。

  在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而 设计 测试用例。包括以下4个步骤和一个工具方法:

  1. 程序的控制流图:描述程序控制流的一种图示方法。

  2. 程序圈复杂度:McCabe复杂性度量。从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。

  3. 导出测试用例:根据圈复杂度和程序结构设计用例数据输入和预期结果。

  4. 准备测试用例:确保基本路径集中的每一条路径的执行。

  工具方法:

  图形矩阵:是在基本路径测试中起辅助作用的 软件 工具,利用它可以实现自动地确定一个基本路径集。

  程序的控制流图:描述程序控制流的一种图示方法。

  圆圈称为控制流图的一个结点,表示一个或多个无分支的语句或源程序语句


图1

  流图只有二种图形符号:

  图中的每一个圆称为流图的结点,代表一条或多条语句。

  流图中的箭头称为边或连接,代表控制流

  任何过程设计都要被翻译成控制流图。

  如何根据程序流程图画出控制流程图?

  在将程序流程图简化成控制流图时,应注意:

  n 在选择或多分支结构中,分支的汇聚处应有一个汇聚结点。

  n 边和结点圈定的区域叫做区域,当对区域计数时,图形外的区域也应记为一个区域。

  如下页图所示


图2


 

n 如果判断中的 条件 表达式是由一个或多个逻辑运算符 (OR, AND, NAND, NOR) 连接的复合条件表达式,则需要改为一系列只有单条件的嵌套的判断。

  例如:

  1 if a or b

  2 x

  3 else

  4 y

  对应的逻辑为:


图3

  独立路径:至少沿 一条 新的边移动的路径


图4

基本路径测试法的步骤:

  o 第一步:画出控制流图

  流程图用来描述 程序 控制结构。可将流程图映射到一个相应的流图(假设流程图的菱形决定框中不包含复合条件)。在流图中,每一个圆,称为流图的结点,代表一个或多个语句。一个处理方框序列和一个菱形决测框可被映射为一个结点,流图中的箭头,称为边或连接,代表控制流,类似于流程图中的箭头。一条边必须终止于一个结点,即使该结点并不代表任何语句(例如:if-else-then结构)。由边和结点限定的范围称为区域。计算区域时应包括图外部的范围。


图5

  画出其程序流程图和对应的控制流图如下


图6

  o 第二步:计算圈复杂度

  圈复杂度是一种为程序逻辑 复杂性 提供定量测度的软件度量,将该度量用于计算程序的基本的独立路径数目,为确保所有语句至少执行一次的测试数量的上界。独立路径必须包含一条在定义之前不曾用到的边。

  有以下三种 方法 计算圈复杂度:

  流图中区域的数量对应于环型的复杂性;

  给定流图G的圈复杂度V(G),定义为V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量;

  给定流图G的圈复杂度V(G),定义为V(G)=P+1,P是流图G中判定结点的数量。


图7

  o 第三步:导出测 试用

  根据上面的计算方法,可得出四个独立的路径。(一条独立路径是指,和其他的独立路径相比,至少引入一个新处理语句或一个新判断的程序通路。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

  根据上面的独立路径,去 设计 输入数据,使程序分别执行到上面四条路径。

  o 第四步:准备测试用例

  为了确保基本路径集中的每一条路径的执行,根据判断结点给出的 条件 ,选择适当的数据以保证某一条路径可以被测试到,满足上面例子基本路径集的测试用例是:



图8

  举例说明:

  例:下例程序流程图描述了最多输入50个值(以–1作为输入结束标志),计算其中有效的学生分数的个数、总分数和平均值。


图9

  步骤1:导出过程的流图。


图10

  步骤2:确定环形复杂性度量V(G):

  1)V(G)= 6 (个区域)

  2)V(G)=E–N+2=16–12+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-12)的测试用例:

  score[k]=有效分数值,当k

  score[i]=–1, 2≤i≤50;

  期望 结果 :根据输入的有效分数算出正确的分数个数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…)的测试用例:

  score[i]=有效分数,当i<50;

  score[k]<0, k

  期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。

5)路径5的测试用例:

  score[i]=有效分数, 当i<50;

  score[k]>100, k

  期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。

  6)路径6(1-2-3-4-5-6-7-8-2…)的测试用例:

  score[i]=有效分数, 当i<50;

  期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。

  注意事项:

  必须注意,一些独立的路径,往往不是完全孤立的,有时它是 程序 正常的控制流的一部分,这时,这些路径的测试可以是另一条路径测试的一部分。

  方法工具:图形矩阵

  o 导出控制流图和决定基本测试路径的过程均需要机械化,为了开发辅助基本路径测试的 软件 工具,称为图形矩阵(graph matrix)的 数据结构很有用。

  利用图形矩阵可以实现自动地确定一个基本路径集。一个图形矩阵是一个方阵,其行/列数控制流图中的结点数,每行和每列依次对应到一个被标识的结点,矩阵元素对应到结点间的连接(即边)。在图中,控制流图的每一个结点都用数字加以标识,每一条边都用字母加以标识。如果在控制流图中第i个结点到第j个结点有一个名为x的边相连接,则在对应的图形矩阵中第i行/第j列有一个非空的元素x。

  对每个矩阵项加入连接权值(link weight),图矩阵就可以用于在测试中评估程序的控制结构,连接权值为控制流提供了另外的信息。最简单情况下,连接权值是 1(存在连接)或0(不存在连接),但是,连接权值可以赋予更有趣的属性:

  执行连接(边)的概率。

  穿越连接的处理 时间

  穿越连接时所需的内存。

  穿越连接时所需的资源。

  根据上面的方法对例4画出图形矩阵如下:


图11

  连接权为“1”表示存在一个连接,在图中如果一行有两个或更多的元素“1”,则这行所代表的结点一定是一个判定结点,通过连接矩阵中有两个以上(包括两个)元素为“1”的个数,就可以得到确定该图圈复杂度的另一种算法。


推荐阅读
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 移动传感器扫描覆盖摘要:关于传感器网络中的地址覆盖问题,已经做过很多尝试。他们通常归为两类,全覆盖和栅栏覆盖,统称为静态覆盖 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 2020年第十一届蓝桥杯决赛JAVA B G题“皮亚诺曲线距离“的个人题解目录
    本文是2020年第十一届蓝桥杯决赛JAVA B G题“皮亚诺曲线距离“的个人题解目录。文章介绍了皮亚诺曲线的概念和特点,并提供了计算皮亚诺曲线上两点距离的方法。通过给定的两个点的坐标,可以计算出它们之间沿着皮亚诺曲线走的最短距离。本文还提供了个人题解的目录,供读者参考。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • 本文讨论了如何使用GStreamer来删除H264格式视频文件中的中间部分,而不需要进行重编码。作者提出了使用gst_element_seek(...)函数来实现这个目标的思路,并提到遇到了一个解决不了的BUG。文章还列举了8个解决方案,希望能够得到更好的思路。 ... [详细]
  • 基于移动平台的会展导游系统APP设计与实现的技术介绍与需求分析
    本文介绍了基于移动平台的会展导游系统APP的设计与实现过程。首先,对会展经济和移动互联网的概念进行了简要介绍,并阐述了将会展引入移动互联网的意义。接着,对基础技术进行了介绍,包括百度云开发环境、安卓系统和近场通讯技术。然后,进行了用户需求分析和系统需求分析,并提出了系统界面运行流畅和第三方授权等需求。最后,对系统的概要设计进行了详细阐述,包括系统前端设计和交互与原型设计。本文对基于移动平台的会展导游系统APP的设计与实现提供了技术支持和需求分析。 ... [详细]
  • 本文介绍了关于Java异常的八大常见问题,包括异常管理的最佳做法、在try块中定义的变量不能用于catch或finally的原因以及为什么Double.parseDouble(null)和Integer.parseInt(null)会抛出不同的异常。同时指出这些问题是由于不同的开发人员开发所导致的,不值得过多思考。 ... [详细]
  • 颜色迁移(reinhard VS welsh)
    不要谈什么天分,运气,你需要的是一个截稿日,以及一个不交稿就能打爆你狗头的人,然后你就会被自己的才华吓到。------ ... [详细]
  • Hello.js 是一个用于连接OAuth2服务的JavascriptRESTFULAPI库,如Go ... [详细]
  • 酌惶S蹬粮偕06搜e40http:p.baidu.compaicenter?uid203161626337656433346554b8726v迷孤U史0ehttp:p.baidu.com ... [详细]
author-avatar
mobiledu2502895137
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有