第3章 软件测试方法--基于逻辑覆盖的方法(白盒测试)

文章目录

    • 3.4.1 语句覆盖
    • 3.4.2 判定覆盖
    • 3.4.3 条件覆盖
    • 3.4.4 判定-条件覆盖
    • 3.4.4 条件组合测试
    • 3.4.6 基本路径覆盖
    • 3.4.7 循环测试


白盒测试:关注源代码程序结构

优势

  1. 针对性强,测试效率高,通过不同的白盒覆盖指标有助于衡量对被测对象的测试覆盖程度。
  2. 在函数级别开始测试工作,缺陷修复的成本低

局限性:对测试人员的技术要求高,没有一定编程经验的人是无法做白盒测试的

适用阶段:
测试对象为函数时, 对应的是单元测试阶段,主要由开发人员自己来完成测试工作。
测试对象为功能时,对应的是集成测试甚至系统测试阶段,主要由测试人员来完成测试工作

3.4.1 语句覆盖

语句覆盖法:设计若干测试用例,运行被测程序,使程序中的每个可执行语句至少被执行一次

缺陷:发现不了判定中逻辑运算的错误,不是一种充分的检验方法。只在乎是否完成运行,不考虑其他情况。

eg:第3章 软件测试方法--基于逻辑覆盖的方法(白盒测试)_第1张图片
(a,b,c)=(1,1,2)可以执行所有语句。但是如果将逻辑符号and或or输入错误则无法执行。
第3章 软件测试方法--基于逻辑覆盖的方法(白盒测试)_第2张图片
语句覆盖是最弱的逻辑覆盖标准。

优点:直观地从代码中得到测试用例,无须细分每条判定表达式。

3.4.2 判定覆盖

判定覆盖法:设计若干用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断真假值均曾被满足。

eg:
第3章 软件测试方法--基于逻辑覆盖的方法(白盒测试)_第3张图片
第3章 软件测试方法--基于逻辑覆盖的方法(白盒测试)_第4张图片
两个测试用例可以满足每个判定的真假值均被满足一次。

优点:比语句覆盖更强的测试能力。
缺点:无法确定判断内部条件的错误(若是某一条件错误,测试用例仍能通过)。容易遗漏部分测试路径。

3.4.3 条件覆盖

条件覆盖:设计若干测试用例,执行被测程序以后,要使每个判断中每个条件的可能取值至少满足一次(每个条件)。

eg: 首先列出所有条件
第3章 软件测试方法--基于逻辑覆盖的方法(白盒测试)_第5张图片
第3章 软件测试方法--基于逻辑覆盖的方法(白盒测试)_第6张图片
四个条件的真假全覆盖。

优点:比判定覆盖增加了对符合判定情况的测试,增加了测试路径。
缺点:不能保证判定覆盖(无法考虑所有判定结果)。

3.4.4 判定-条件覆盖

判定-条件覆盖:判定和条件覆盖设计方法的交集,即设计足够的测试用例,使得判断条件中的所有条件可能取值至少执行一次,同时,所有判断的可能结果至少执行一次

eg.
第3章 软件测试方法--基于逻辑覆盖的方法(白盒测试)_第7张图片
第3章 软件测试方法--基于逻辑覆盖的方法(白盒测试)_第8张图片
所有条件的真假判定结果的真假都要执行一次。

3.4.4 条件组合测试

条件组合覆盖:设计足够的测试用例,使得判断中每个条件的所有可能至少出现一次(它不是简单地要求每个条件都出现“真”与“假”两种结果,而是要求让这些结果的所有可能组合都至少出现一次),并且每个判断本身的判定结果也至少出现一次

eg:首先列出条件所有组合
第3章 软件测试方法--基于逻辑覆盖的方法(白盒测试)_第9张图片
第3章 软件测试方法--基于逻辑覆盖的方法(白盒测试)_第10张图片

3.4.6 基本路径覆盖

路径覆盖:设计所有的测试用例,来覆盖程序中的所有可能的执行路径

基本路径覆盖的设计过程
第3章 软件测试方法--基于逻辑覆盖的方法(白盒测试)_第11张图片

  1. 画出控制流图

  2. 计算环复杂度
    ①流图中区域的数量(封闭+开放) = 环形复杂度
    ②V = E - N+ 2; E是边数 N是节点数
    ③v = P + 1; P是判定节点数

  3. 基本复杂度:通过对程序图中的结构化设计节点进行不断压缩,最终得到一个无法压缩的程序图,该图的环复杂度就称为基本复杂度

  4. 独立路径抽取:
    环复杂度 = 独立路径条数
    ①确定主路径:该路径应包含尽可能多的判定节点
           应包含尽可能复杂的判定表达式
           应对应尽可能高的执行概率
           应包含尽可能多的语句
    ②根据基础路径抽取其他独立路径
    eg:A、B、C为判定点
    第3章 软件测试方法--基于逻辑覆盖的方法(白盒测试)_第12张图片
    Path1:A, B, C, G(经过判定节点A、B、C);
    Path2:A, D, E, F, G(在判定节点A处执行e2分支);
    Path3:A, B, E, F, G(在判定节点B处执行e5分支);
    Path4:A, B, C, B, C, G(在判定节点C处执行e3分支);
    Path5:A, D, F, G(在判定节点D处执行e7分支)
    覆盖判定点的每条路径

测试用例设计步骤

  1. 根据程序源代码生成程序图
  2. 计算程序图的环复杂度,确定独立路径集合的大小
  3. 以最复杂的路径为基础路径,通过覆盖所有判定分支确定其他路径,抽取独立路径集合
  4. 注意剔除不可行路径(程序的设计缺陷导致不可行路径),必要时补充其他重要的路径
  5. 根据得到的路径集合对应设计测试用例

:基本路径测试并不是测试所有路径的组合,仅仅保证每条基本路径被执行一次

3.4.7 循环测试

循环测试:在循环内部及边界上执行测试

循环分为四种:简单循环、嵌套循环、连锁循环和非结构循环

  1. 简单循环(迭代次数n)
    第3章 软件测试方法--基于逻辑覆盖的方法(白盒测试)_第13张图片

测试方法:
    1.完全跳过循环
    2.只经过循环一次
    3.经过循环两次
    4.经过循环m( m < n )次
    5.分别经过循环n-1, n, n+1 次

  1. 嵌套循环
    第3章 软件测试方法--基于逻辑覆盖的方法(白盒测试)_第14张图片

测试方法:在最里面的循环完成前面所述的简单循环测试,同时设定外部循环的最小迭代次数,逐步向外循环进行,直到所有循环被测试

  1. 连锁循环(串行连接的循环)
    第3章 软件测试方法--基于逻辑覆盖的方法(白盒测试)_第15张图片
    独立循环–》可以分别看着简单循环测试
    依赖性循环–》可以看着是嵌套循环

你可能感兴趣的:(软件质量测试与保证,软件测试)