第6章基于控制流和数据流的测试充分性评价报告.ppt
文本预览下载声明
6.2.1 语句覆盖和块覆盖 基本思想是:设计若干测试用例,运行被测程序,使程序中每个可执行语句(块)至少执行一次。 针对c语言,当定义基本控制流的测试充分性准则时,把所有的声明性语句都当作执行语句。 基本块:只有一个输入点和一个输出点的一组连续语句。 例:实现一个简单的数学运算 int a,b; double c ; scanf(“%d,%d,%f”,a,b,c) If (a0 And b0) c=c/a; If (a1 or c1) c=c+1; c=b+c 语句覆盖 只需设计一个测试用例:a=2,b=1,c=6;即达到了语句覆盖。 语句覆盖 优点:可以很直观地从源代码得到测试用例,无须细分每条判定表达式。 缺点:由于这种测试方法仅仅针对程序逻辑中显示存在的语句,但对于隐藏的条件是无法测试的。语句覆盖是最弱的逻辑覆盖。 6.2.2 条件和判定 任何计算结果为真或假的表达式就是一个条件,这种表达式也称作谓词。 一个条件可能是简单的或复合的。简单条件除了用运算符外,它由变量和至多一个关系运算符构成;复合条件由两个或多个简单条件经一个或多个布尔运算符连接而成。 任何一个条件都可在适当的上下文环境下当作一个判定。(if,while,switch) 一个判定有三种可能的输出:真、假和未定义。 6.2.3 判定覆盖 基本思想是:设计若干测试用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断真假值均曾被满足。 6.2.3 判定覆盖 a=2,b=1 ,c=6可覆盖判断M的Y分支和判断Q的Y分支; a=-2,b=-1 ,c=-3可覆盖判断M的N分支和判断Q的N分支 。 这两组测试用例可覆盖所有判定的真假分支。 6.2.3 判定覆盖 【优点】:判定覆盖具有比语句覆盖更强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。 【缺点】:往往大部分的判定语句是由多个逻辑条件组合而成,若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。判定覆盖仍是弱的逻辑覆盖。 6.2.4 条件覆盖 基本思想是:设计若干测试用例,执行被测程序以后要使每个判断中每个条件的可能取值至少满足一次。 6.2.4 条件覆盖 判断M表达式: 设条件 a0 取真 记为 T1 假 F1 条件 b0 取真 记为 T2 假F2 判断Q表达式: 设条件 a1 取真 记为 T3 假 F3 条件 c1 取真 记为 T4 假F4 6.2.4 条件覆盖 它覆盖了判定M的N分支和判断Q的Y分支。我们用条件覆盖 设计的思想就是让测试用例能覆盖T1、T2、T3、T4、F1、 F2、F3、F4。 6.2.4 条件覆盖 【优点】:增加了对条件判定情况的测试,增加了测试路径。 【缺点】:条件覆盖不一定包含判定覆盖。例如,我们刚才设计的用例就没有覆盖判断M的Y分支和判断Q的N分支。条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。 6.2.5 条件/判定覆盖 基本思想是:设计足够的测试用例,使得判断条件中的所有条件可能取值至少执行一次,同时,所有判断的可能结果至少执行一次。 6.2.5 条件/判定覆盖 按照条件/判定覆盖的要求,我们设计的测试用例要满足如下条件: 所有条件可能至少执行一次取值; 所有判断的可能结果至少执行一次。 6.2.5 条件/判定覆盖 6.2.5 条件/判定覆盖 【优点】 :能同时满足判定、条件两种覆盖标准。 【缺点】 :条件/判定覆盖准则的缺点是未考虑条件的组合情况。 6.2.6 多重条件覆盖 基本思想是:设计足够的测试用例,使得所有可能的条件取值组合至少执行一次 6.2.6 多重条件覆盖 按照条件组合覆盖的基本思想,对于前面的例子,我们把每个判断中的所有条件进行组合,设计组合条件如表所示,而我们设计的测试用例就要包括所有的组合条件。 6.2.6 多重条件覆盖 6.2.6 多重条件覆盖 【优点】 :条件组合覆盖准则满足判定覆盖、条件覆盖和判定/条件覆盖准则。 【缺点】 :线性地增加了测试用例的数量。(要求覆盖复合条件中所有简单条件的真值) 6.2.7 路径覆盖 基本思想是:设计所有的测试用例,来覆盖程序中的所有可能的执行路径 。 6.2.7 路径覆盖 6.2.7 路径覆盖 【优点】 :这种测试方法可以对程序进行彻底的测试,比前面五种的覆盖面都广。 【缺点】 :需要设计大量、复杂的测试用例,使得工作量呈指数级增长,不见得把所有的条件组合都覆盖。 从前面的例子我们可以看到,采用任何一种覆盖方法都不能满足我们的要求,所以,在实际的测试用例设计过程中,可以根据需要将不同的覆盖方法组合
显示全部