软件质量保证与测试——第三章 白盒测试

本文详细介绍了白盒测试的概念、发展阶段、测试过程,重点讲解了逻辑覆盖,包括语句覆盖、决策覆盖、条件覆盖、条件组合覆盖和路径覆盖,并通过实例解析了NS图和控制流图在测试中的应用。此外,还探讨了循环测试、数据流测试、突变测试以及白盒测试与黑盒测试的对比。
摘要由CSDN通过智能技术生成

第三章

  • 可以完全了解软件产品的内部工作原理,特别是代码的逻辑和结构

概念

  • 静态白盒测试方法:规范检验、静态结构分析、静态质量指标法等。
  • 动态白盒测试是基于覆盖范围,尽可能覆盖测试程序的结构特征和逻辑路径。
  • 动态白盒测试方法:逻辑覆盖、循环覆盖、基路径覆盖等。主要用于机组试验。
  • 白盒测试必须遵循的原则:
    • 模块中的所有独立路径必须至少实现一次。
    • 所有逻辑值都需要测试两种情况:true和false。
    • 检查内部数据结构的程序,确保其结构的有效性。
    • 在操作范围内运行所有循环

发展阶段

  • 第一阶段
    • 调试、断言和打印语句。
  • 第二阶段
    • 形式语言操作。(Test scripts)
    • 测试脚本(Test scripts)组合成测试用例,测试用例组合成测试集,使用测试工程来管理测试集。
    • 使用代码覆盖率评估测试结果。
  • 第三阶段
    • 解决了重复测试问题,测试模式从一次性过渡到继续测试模式。
  • 第四阶段
第一关键域第二关键域第三关键域
在线测试灰盒调测持续测试
在线测试驱动 基于调用接口 测试设计先行
在线脚本桩调试即测试持续保障
在线测试用例设计、运行、以及评估改进集编码、调试、测试于一体重构测试用例

测试过程

在这里插入图片描述

逻辑覆盖

语句覆盖判断覆盖条件覆盖条件判断覆盖条件组合覆盖路径覆盖
每一个语句都执行一次 每个判断的真假执行一次 每个判断中的条件真假执行一次每个判断中的条件真假和判断真假执行一次每个判断中的每个条件真假每个组合执行一次每条路径执行一次
  • Statement coverage

    • 运行测试过程,使每个可执行语句至少实现一次
    • 【(2, 0, 3) 】covers ace【L1】
    • 逻辑操作错误不能被发现
  • Decision coverage

    • 使每一个判断的真与假分支可以至少经过一次。
    • 【2, 0, 3】covers ace【L1】 【1, 1, 1】covers abd【L2】
      or
      【3, 0, 3】covers acd【L4】 【2, 1, 1】covers abe【L3】
  • Condition coverage

    • 使过程中每个条件的可能值至少可以实现一次
      – For the first judgment
      • Condition A>1 true value is T1,false value is !T1
      • Condition B=0 true value is T2,false value is !T2
      – For the second judgment
      • Condition A=2 true value is T3,false value is !T3
      • Condition X>1 true value is T4,false value is !T4
      </tr>
    
    Test casePathCondition valueCoverage branch
    (2, 0, 3) ace(L1) T1 T2 T3 T4 c,e
    (1, 1, 1) abd(L2) !T1 !T2 !T3 !T4 b,d
    Test casePathCondition valueCoverage branch
    【(1, 0, 3),(1, 0, 4)】abe(L3) !T1 T2 !T3 T4b,e
    【(2, 1, 1),(2, 1, 2)】abe(L3) T1 !T2 T3 !T4 b,e
- Condition/decision coverage - 使每个判决的所有可能条件至少执行一次,并使每个判决的所有可能结果至少执行一次。
Test casePathCondition valueCoverage branch
(2,0,3) ace(L1) T1 T2 T3 T4 c,e
(1,1,1) abd(L2) !T1 !T2 !T3 !T4 b,d
  • Condition combination coverage

    • 使每个判断的所有可能条件组合至少执行一次。
    • 如果测试用例满足条件组合覆盖,那么它们肯定满足决策覆盖、条件覆盖和条件/决策覆盖。
  • Path coverage

    • 设计足够的测试用例以覆盖过程中的所有可能路径

在这里插入图片描述

  • 递进关系
    在这里插入图片描述

NS图

  • 顺序型 —— 构成串行操作
  • 选择型 —— 构成分支操作
  • 重复型 —— 构成循环操作
  • 测试用例个数:同层相加,上下相乘
    在这里插入图片描述
    例题:
    在这里插入图片描述
    答案:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

控制流图

  • 箭头:称为边,表示控制流。
  • 圆圈:称为节点,代表一个或多个动作。
  • 由边和节点包围的区域称为区域。
  • 谓词节点是一个包含条件的节点。
    在这里插入图片描述

基路径测试

  • 基本复杂度/圈复杂度=边数-节点数+端点数(通常为2,尾连首时为1)
    =谓词节点数+1=控制流图的区域数(强连通图不计外围区域)
  • 基路径 R = a x + b y + c z R=ax+by+cz R=ax+by+cz,其中abc为常数,xyz为基路径。其他路径可以由基路径通过加减获得。如果一条路径可以被其他基路径运算得到,则该路径不是基路径。
  • 产生测试用例的步骤:
    • 根据代码画控制流图
    • 求圈复杂度
    • 找基路径
    • 测试用例,执行每一条路

循环测试

关注循环构造的有效性。

  • 类型的循环:
    • 简单的循环
    • 嵌套循环
    • 连接循环
    • 非结构化的循环
  • 测试方法
    • 从最里面的循环开始,将所有其他循环设置为最小值(1,不是0)。
    • 对最内层循环进行简单的循环测试,同时保持外层循环的最小迭代参数(例如循环计数器)值。添加超出范围或排除值的其他测试。
    • 向外工作,对下一个循环进行测试,但保持所有其他外部循环为最小值,其他嵌套循环为“典型”值。
    • 直到所有循环都被测试完毕。
  • 可以使用为简单循环定义的方法来测试级联循环
  • 采用较复杂的循环测试策略测试循环,可采用下面测试集:
    • 跳过整个循环;
    • 只循环一次;
    • 只循环两次;
    • 循环m次,m<n;
    • 分别循环 n-1、n次

数据流测试

根据程序中变量定义和使用的位置选择程序的测试路径。

  • 用于检测由于编码错误而导致的数据值使用不当

    • 错误的赋值或输入语句
    • 缺少定义(使用空定义)
    • 谓词是错误的(采取了错误的路径导致不正确的定义)
  • 包含数据值的变量的生命周期:created, used, killed (destroyed).

    • 不存在:~
    • 定义:d(define)
    • 使用:u
    • 释放:k
    • c:指针(计算)
    • p:用于谓词(或作为循环的控制变量)
      在这里插入图片描述
  • 对图表的静态测试

    • 对于模块中的每个变量,我们将沿着控制流路径检查 define-use-kill模式
      在这里插入图片描述
  • 动态数据流测试

    • 每个“define”都追溯到它的每个“use”
    • 每个“use”都从其相应的“define”追溯
    • 步骤:
      • 枚举通过模块的路径
      • 对于每个变量,至少创建一个t测试用例以覆盖每个define-use对

突变测试

一种基于故障的测试技术,提供了一个被称为“突变充分性评分”的测试标准,突变充分性评分可以用来衡量测试集检测故障的能力的有效性。

  • 对两个或两个以上程序的变异(mutation),采用相同的测试用例进行测试。目的是评估测试用例发现变种间不同的能力。
  • 概念
    • P:正在测试的原始程序
    • M:通过轻微改变P而得到的程序
    • M是P的突变体,P是M的亲本
    • Mutate是指突变的行为。突变一个程序意思要改变它
  • 一阶变异体
    • 只有对被测试程序的一次更改
    • 一般用于实践
    • 优于高阶突变体
  • 高阶变异体
    • 除一阶以外的突变体
  • 强突变检测和弱突变检测
    • 强突变检测使用外部观察。
    • 一个强突变体及其亲本被允许运行到完成,然后比较它们各自的输出。
    • 弱突变检测使用内部观察。
    • 一个突变可能在弱突变下表现得与亲本相似,但在强突变下没有。
  • 测试充分性评估程序
    在这里插入图片描述

黑盒白盒对比

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Env1sage

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值