软件测试与质量 之白盒测试

目录

一、概述

1.1 关注对象

1.2 优劣势

二、常见白盒测试方法

2.1 控制流分析

2.1.1 常见的程序结构

2.1.2 控制流分析的内容

2.2 对判定的测试(逻辑覆盖)

2.2.1 语句覆盖(Statement Coverage)

2.2.2 判定覆盖(Branch Coverage)

2.2.3 条件覆盖(Condition Coverage)

2.2.4 判定/条件覆盖(Branch/Condition Coverage)

2.2.5 条件组合覆盖(Condition Combination Coverange)

2.2.6 修正的判定/条件覆盖(Modified Condition/Decision Coverage)

2.3 代码检查

2.3.1 同行评审方法

2.3.2 同行评审流程

2.3.3 评审结果

2.4 静态结构分析 

2.4.1 函数调用关系图

2.4.2 函数的控制流图

2.5 路径覆盖

2.5.1 基于等价路径的测试

2.5.2 基于独立路径的测试

2.5.3 区别

2.5.4 相关术语和概念

2.5.5 测试用例设计

2.5.6 不可行路径问题

2.5.7 场景爆炸问题


一、概述

软件测试不仅包括动态测试,还包括对系统的静态检查,这种检查通常不需要实际运行被测软件,而是直接对软件形式和结构进行分析。

1.1 关注对象

  • 源代码

措施:阅读源代码,检验代码的规范性,并对照函数功能查找代码的逻辑缺陷、内存管理缺陷、数据定义和使用缺陷等。

  • 程序结构

措施:使用与程序设计相关的图表,找到程序设计的缺陷,或评价程序的执行效率。

1.2 优劣势

优势

针对性强,便于快速定位缺陷。
在函数级别开始测试工作,缺陷修复成本低
有助于了解测试的覆盖程度
有助于代码优化和缺陷预防

不足和弊端
对测试人员要求高(测试人员需要具备一定的编程经验,白盒测试工程师需要具备广播的知识面)
成本高(白盒测试准备时间较长)

二、常见白盒测试方法

2.1 控制流分析

2.1.1 常见的程序结构

  • 线性结构

  • 条件判定结构

  • while-do循环结构

  •  do-while循环结构

 缺陷风险逐渐增大:串行结构<两分支的条件判断<多分支的条件判断<循环结构

2.1.2 控制流分析的内容

  • 关注判定节点固有的复杂性
    • 焦点:判定表达式
    • 方法:逻辑覆盖测试
  • 关注判定结构与循环结构对执行路径产生的影响
    • 焦点:路径
    • 方法:独立路径测试
  • 关注循环结构本身的复杂性
    • 焦点:循环体
    • 方法:基于数据的静态分析

2.2 对判定的测试(逻辑覆盖)

基本测试原则:对程序代码中所有的逻辑值均需要测试真值和假值的情况

通过考察源代码中的复合判定表达式,或构成复合判定表达式的各个简单判定条件的所有取值来展开测试

2.2.1 语句覆盖(Statement Coverage)

设计测试用例时,需要保证程序中每一条可执行语句至少应执行一次

语句覆盖是最弱的一种覆盖标准,它主要存在两方面弊端:

  • 关注语句,而非关注判定节点
  • 对隐式分支无效(隐式分支:if条件判定中,缺少else的情况)
  • 对策:优选测试数据
  • 更强的覆盖准则:判定覆盖

2.2.2 判定覆盖(Branch Coverage)

判定覆盖(分支覆盖):设计测试用例时,应保证程序中每个判定节点取得每种可能的结果至少一次,相当于对控制流图进行边覆盖

判定覆盖的局限性:
当判定节点中包含的是复合判定表达式,即由多个简单判定条件通过“与"、"或"关系连接而成的判定时,判定覆盖仅关心表达式的整体取值,并不关心表达式如何构成,不能覆盖到每个子条件的所有取值情况,由此导致测试漏洞

2.2.3 条件覆盖(Condition Coverage)

设计测试用例时,应保证程序中每个复合条件判定表达式中,每个简单判定条件的取真和取假情况至少执行一次。

条件覆盖并不能确保满足判定覆盖,它虽然进一步检查了判定节点中的每个子条件,但判定节点局部的完全覆盖并不能保证对判定节点整体的完全覆盖。

2.2.4 判定/条件覆盖(Branch/Condition Coverage)

测试用例的设计应满足判定节点的取真、取假分支至少执行一次,且每个简单判定条件的取真和取假情况也至少执行一次,即判定覆盖+条件覆盖。

弊端:设计难度大

2.2.5 条件组合覆盖(Condition Combination Coverange)

测试用例的设计应满足每个判定节点中,所有简单判定条件的所有可能的取值组合情况应至少执行一次。

本质:通过列出真值表的方式来得到完全的覆盖(用测试用例的冗余来换取方法的简单性)

优势:方法简单;只需要找到所有简单情况,并列出真值表,穷尽所有组合情况即可

弊端:测试用例太多,冗余严重

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值