1、李敏m li 内容 语句覆盖判定覆盖 分支 条件覆盖判定 条件覆盖条件组合覆盖路径覆盖DD路径测试 例 实现一个简单的数学运算 inta b doublec scanf d d f c b c 1 语句覆盖 基本思想是 设计若干测试用例 运行被测程序 使程序中每个可执行语句至少执行一次 1 1 语句覆盖 续1 只需设计一个测试用例 a 2 b 1 c 6 即达到了语句覆盖 1 语句覆盖 续2 优点 可以很直观地从源代码得到测试用例 无须细分每条判定表达式 缺点 由于这种测试方法仅仅针对程序逻辑中显示存在的语句 但对于隐藏的条件是无法测试的 语句覆盖是最弱的逻辑覆盖 2 判定覆盖 基本思想是 设
2、计若干测试用例 运行被测程序 使得程序中每个判断的取真分支和取假分支至少经历一次 即判断真假值均曾被满足 2 判定覆盖 续1 a 2 b 1 c 6可覆盖判断M的Y分支和判断Q的Y分支 a 2 b 1 c 3可覆盖判断M的N分支和判断Q的N分支 这两组测试用例可覆盖所有判定的真假分支 判断M 判断Q 2 判定覆盖 续2 a 1 b 1 c 3可覆盖判断M的Y分支和判断Q的N分支 a 1 b 2 c 3可覆盖判断M的N分支和判断Q的Y分支 同样的这两组测试用例也可覆盖所有判定的真假分支 判断M 判断Q 2 判定覆盖 续3 优点 判定覆盖具有比语句覆盖更强的测试能力 同样判定覆盖也具有和语句覆盖一
3、样的简单性 无须细分每个判定就可以得到测试用例 缺点 往往大部分的判定语句是由多个逻辑条件组合而成 若仅仅判断其整个最终结果 而忽略每个条件的取值情况 必然会遗漏部分测试路径 判定覆盖仍是弱的逻辑覆盖 3 条件覆盖 基本思想是 设计若干测试用例 执行被测程序以后要使每个判断中每个条件的可能取值至少满足一次 1 3 条件覆盖 续1 判断M表达式 设条件a 0取真记为T1假F1条件b 0取真记为T2假F2判断Q表达式 设条件a 1取真记为T3假F3条件c 1取真记为T4假F4 判断M 判断Q 3 条件覆盖 续2 它覆盖了判定M的N分支和判断Q的Y分支 我们用条件覆盖设计的思想就是让测试用例能覆盖T
4、1 T2 T3 T4 F1 F2 F3 F4 判断M 判断Q 3 条件覆盖 续3 优点 增加了对条件判定情况的测试 增加了测试路径 缺点 条件覆盖不一定包含判定覆盖 例如 我们刚才设计的用例就没有覆盖判断M的Y分支和判断Q的N分支 条件覆盖只能保证每个条件至少有一次为真 而不考虑所有的判定结果 4 判定 条件覆盖 基本思想是 设计足够的测试用例 使得判断条件中的所有条件可能取值至少执行一次 同时 所有判断的可能结果至少执行一次 1 4 判定 条件覆盖 续1 按照判定 条件覆盖的要求 我们设计的测试用例要满足如下条件 所有条件可能至少执行一次取值 所有判断的可能结果至少执行一次 要满足T1 T2
5、 T3 T4F1 F2 F3 F4 4 判定 条件覆盖 续2 要满足T1 T2 T3 T4F1 F2 F3 F4 4 判定 条件覆盖 续3 优点 能同时满足判定 条件两种覆盖标准 缺点 判定 条件覆盖准则的缺点是未考虑条件的组合情况 5 条件组合覆盖 基本思想是 设计足够的测试用例 使得所有可能的条件取值组合至少执行一次 1 5 条件组合覆盖 续1 按照条件组合覆盖的基本思想 对于前面的例子 我们把每个判断中的所有条件进行组合 设计组合条件如表所示 而我们设计的测试用例就要包括所有的组合条件 5 条件组合覆盖 续2 要满足1 2 3 4 5 6 7 8条件组合 5 条件组合覆盖 续3 优点 条
6、件组合覆盖准则满足判定覆盖 条件覆盖和判定 条件覆盖准则 缺点 线性地增加了测试用例的数量 6 路径覆盖 基本思想是 设计所有的测试用例 来覆盖程序中的所有可能的执行路径 1 6 路径覆盖 续1 6 路径覆盖 续2 优点 这种测试方法可以对程序进行彻底的测试 比前面五种的覆盖面都广 缺点 需要设计大量 复杂的测试用例 使得工作量呈指数级增长 不见得把所有的条件组合都覆盖 从前面的例子我们可以看到 采用任何一种覆盖方法都不能满足我们的要求 所以 在实际的测试用例设计过程中 可以根据需要将不同的覆盖方法组合起来使用 以实现最佳的测试用例设计 条件组合覆盖结合路径覆盖 520 找 关键 路径 提高效
7、率 控制流图 程序流程图又称框图 最熟悉 最容易理解的一种程序控制结构的图形表示 在这种图上的框里面常常标明了处理要求或者条件 但是 这些标注在做路径分析时是不重要的 为了了更加突出控制流的结构 需要对程序流程图做一些简化 控制流图 控制流图 续 在控制流图中只有两种图形符号 它们是 节点 以标有编号的圆圈表示 它代表了程序流程图中矩形框表示的处理 菱形表示的两个到多个出口判断以及两条到多条流线相交的汇合点 控制流线或弧 以箭头表示 它与程序流程图中的流线是一致的 表明了控制的顺序 为了方便讨论 控制流线通常标有名字 如图中所标的a b c等 除了用程序流程图可以转化成控制流图以外 还可以把伪代码表示的处理过程转化成控制流图 根据程序建构控制流图很容易 例如 三角形伪代码实现过程转化成了控制流图 有的时候 我们可以把几个节点合并成一个 合并的原则是 若在一个节点序列中没有分支 则我们可以把这个序列的节点都合并成一个节点 语句的一种序列 序列内部没有分支 从决策语句的 出路 开始 到下一个决策语句的 入路 结束