软件测试第五章白盒测试.ppt

通过从汇结点到源结点添加一条边,便可创建强连接有向图。其复杂度是: (G) = e – n + 1=11-7+1=5 以下给出用结点序列表示的五条线性独立路径: p1=A,B,C,G p2=A,B,C,B,C,G p3=A,B,E,F,G p4=A,D,E,F,G p5=A,D,F,G c A E B D C F G a b d e f g h i 控制图导出的强连通图 e j k 独立路径是指从程序入口到出口的多次执行中,每次至少有一个语句(包括运算、赋值、输入、输出或判断)是新的,未被重复的。 路径 p6=A、B、C、B、E、F、G p7=A、B、C、B、B、C、G 不是独立路径。 很明显,从测试角度来看,如果某一程序的每一独立路径都测试过了,那么可以认为程序中的每个语句都已检验过了. 但在实际测试中,要真正构造出程序的每条独立路径,并不是一件轻松的事。 独立路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出可执行的独立路径集合,从而设计测试用例的方法。 设计出的测试用例要保证被测程序的每条可执行的独立路径至少执行一次。 路径测试考虑以下几个方面: 程序的控制流图。 程序环境复杂性。借助McCabe复杂性度量,可以从程序的环路复杂性导出程序路径集合中的独立路径数。 设计测试用例,确保独立路径集中的每一条路径被执行。 在路径测试中,最关键的问题仍然是如何设计测试用例,使之既能够避免测试的盲目性,又能有较高的测试效率。 一般有三个途径可得到测试用例: (1)通过非路径分析得到测试用例 (2)对未测试的路径生成相应的测试用例 (3)生成指定路径的测试用例 方法 判定覆盖 条件覆盖 条件组合覆盖 基路径测试 优点 简单、无须细分每个判定 增加了对符号判定情况的测试 对程序进行较彻底的测试,覆盖面广 清晰、测试用 例有效 缺点 往往大部分的判定语句是由多个逻辑条件组合而成(如包含AND、OR等的组合),若仅仅判断其组合条件的结果,而忽略每个条件的取值情况,必然会遗漏部分测试场景 达到条件覆盖,需要足够多的测试用例,但条件覆盖还是不能保证判定覆盖,这是由于AND和OR不同的组合效果造成的 对所有可能条件进行测试,需要设计大量、复杂测试用例, 工作量比较大 基本路径法,类似于分支的方法,不能覆盖一些特定的条件,这些条件往往是容易出错的地方 数据流测试 早期的数据流测试分析常常集中于定义/引用异常的缺陷,用于如下三方面测试。 (1)变量被定义,但是从来没有使用(引用) (2)所使用的变量没有被定义 (3)变量在使用之前被定义两次 从中可以得出,早期的数据流测试主要用于检测程序编写时出现的一些警告信息,如“所定义的变量未被使用等”问题,这些问题光靠简单的语法分析器或者是语义分析器是无法检测出来的。 变量定义/引用分析 1)DEF(v,n) 变量v在结点n处定义,定义包括输入语句,赋值语句(等号左侧),过程调用都是定义结点的例子,如果执行这些语句,变量的值往往会发生变化。 2)USE(v,n) 变量v在结点n处被使用,使用包括输出语句、赋值语句(等号右侧)、条件语句、循环语句、过程调用语句都是结点的使用语句,如果执行这类语句,值不会被改变。 3)P-use 当且进当USE(v,n)是谓词使用,比如a=2,对于P-use的程序图出度=2 4)C-use 当且仅当USE(v,n)是计算使用,对于C-use的程序图入度=1 5)定义使用路径 关于变量v的定义使用路径(记做du-path),存在定义和使用结点DEF(v,m) 和USE(v,n),使得m和n是该路径的开始结点和结束结点。 6)清除路径 当定义结点和清除结点中间没有其他的定义结点的时候为清除路径。 5 6 4 7 3 2 8 1 9 1 结点 被定义的变量 被引用的变量 1 X,Y,Z 2 X W,X 3 X,Y 4 Y,Z 5 Y V,Y 6 Z V,Z 7 V X 8 W Y 9 Z V 10 Z 语句2使用了变量W,而在此之前并未对其进行定义(赋值)。 语句5,6使用了变量V,但在第一次执行循环时也未对其定义过。 语句6对变量Z的定义从未被使用过。 语句8对变量W的定义从未被使用过。 程序片 首先,介绍程序片的一个重要概念——S(V,n)。S(V,n)表示结点n之前的所有对V中的变量值做出贡献的所有语句片段的总和。很明显的,做出贡献的一定有USE(v,n),但是要注意的是这里的使用路径包括直接和间接的。举个例子说明。比如说在结点n有个变量a=a+b+c,那么很明显,影响a的值包括a、b、c,所以

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档