软件测试(3)——白盒测试

2023-11-04

白盒测试

白盒测试也称结构性测试、逻辑驱动测试、基于程序的测试

特点

– 将程序的执行表现与编码意图作比较
– 关心软件内部设计和程序实现
– 主要测试依据是代码和设计文档
– 支持严格定义、数学分析和精确度量
– 不验证需求规格,无法发现功能遗漏等问题

在这里插入图片描述

主要使用阶段
–单元测试阶段:一般由开发人员进行
–集成测试阶段:一般由测试人员和开发人员共同完成

白盒测试方法

静态测试

人工代码检查

  • 代码审查
    • 由3-5 人小组进行
    • 一个会议协调人,负责分发相关材料,记录错误等
    • 程序员一行一行解释程序
    • 小组成员提问
    • 通常审查小组有一个潜在错误的checklist以供审查
  • 代码走查
    • 充当计算机的角色,在一定的测试集下人工推演程序的执行
      在这里插入图片描述

软件度量

依据ISO/IEC 9126标准、国标、国军标,采取度量统计的方法能够分析程序的某些质量因素

  • McCabe度量法
    • 基于图论
    • V(G) = E-n+2p ,E为图G中的边数,n为节点数,P为连通分量个数。V(G)值过大,则程序不易理解与维护
  • Halstead度量法
    • 以程序中出现的操作符和操作数为计算对象,给出源程序后,根据这些参数,按公式可求得程序工作量的估值
    • 参数:
      • n1 程序中运算符出现的种类
      • N1 程序中运算符的总数
      • n2 程序中运算对象出现的种类
      • N2 程序中运算对象的总数
    • 公式:
      • 程序的长度: N = N1+ N2
      • 程序量: V =(N1 + N2)log2(n1 +n2 )
      • 语言抽象级别: L = (2 * n2)/(nl * N2)
      • 程序工作量: E = V/L

其它方法

  • 代码自动审查:通过程序抽象、有限状态机等技术,在不
    运行程序的情况下,发现其中的错误
  • 风格检查
    • 编码风格: 针对程序指令、运算符、代码结构、声明等方面制定规则并检查
    • 命名风格: 对程序中局部变量、全局变量、类等的命名制定规则并检查,以利于程序的理解、维护

动态测试

覆盖测试分析

衡量软件被测试执行的程度

在尽可能多地执行程序的路径,进行逻辑覆盖的同时,考察程序执行表现是否异常,尤其是某些复杂的和"正常"情况下不易执行的路径。

运行时错误检测

在程序中注入监控代码,监控程序运行,检测是否有错误发生

变异测试:一种检查测试集检错是否充分的方法

在程序中人为植入错误(变异算子,如删除语句、修改比较运算符、修改算术运算符、替换变量等),检查在给定测试集下,人为植入的错误是否能够被发现。
– 能够发现:测试集发现问题能够好
– 不能发现:测试集检错能力弱,应补充测试用例。

覆盖测试

逻辑覆盖方法

  1. 语句覆盖

    每条语句至少被执行一次(一个测试用例)

    问题:假分支没有得到检查

  2. 判定覆盖

    使程序中每个判定真假的分支至少执行一次

    问题:没有检查每个独立条件

  3. 条件覆盖

    每个判断中每个条件的真假可能取值均至少被取到一次

    条件覆盖不一定包含判定覆盖,判定覆盖也不一定包含条件覆盖

  4. 判定/条件覆盖

    在覆盖条件的同时,要求也覆盖判定(分支/边)

    问题:未考虑条件的组合情况

  5. 条件组合覆盖

    设计足够多的测试用例,使得每个判定中条件的各种可能组合都至少出现一次

    问题:指数级爆炸

  6. 修正条件/判定覆盖

    • 程序的每个入口和出口都必须执行一次
    • 程序中每个条件必须至少取到其所有可能值各一次
    • 判定中,每个条件应独立影响判定结果至少一次
  7. 路径覆盖

    设计足够多的测试用例,覆盖程序中的每条路径

    路径覆盖未必条件组合覆盖

    条件组合覆盖未必路径覆盖(比如循环)

  • 高覆盖未必找到更多错误,只是找到的可能性更大无论哪种覆盖方法,都无法绝对保证程序的正确性
  • 覆盖率不是目的,只是一种手段,不要追求绝对100%的覆盖率,且不可能针对所有的覆盖率去测试

路径测试

  • 基本路径测试

    • 在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本路径集合,从而设计测试用例的方法。

在这里插入图片描述

  • McCabe的基路径方法

    • 以程序控制流图中的线性独立环路为基
    • 线性独立环路:至少拥有一条以上其它线性独立路径中没有的边,从初始节点到终止节点的路径
    • 线性独立环路数的数量即程序控制流图的圈数量
    • 路径加法就是一条路径后接另一条路径,乘法对应于路径的重复,这样任何路径都可以由基本路径表达
    • 弱点
      • 假设测试基路径集合是充分的(实际未必)
      • 向量运算用于程序路径的表达上,没有真实物理意义

在这里插入图片描述

圈数计算

不增加从汇节点到源节点的边
– V(G) = e – n+2p = 10 – 7 + 2 = 5

增加汇节点->源节点边后
– V(G) = e – n+p = 11 – 7 + 1 = 5

可得到基

P1:A,B,C,G
P2:A,B,C,B,C,G
P3:A,B,E,F,G
P4:A,D,E,F,G
P5:A,D,F,G
  • 循环测试策略

    • 简单循环(循环最大次数n)
      • 跳过整个循环
      • 只循环一次
      • 循环两次
      • 循环m次,m<n
      • 分别循环n-1,n,n+1次
    • 嵌套循环
      • 从内层开始,所有外层的循环次数为最小,内层循环按简单循环策略
      • 或由内向外,外层仍取最小,内层取典型值

数据流测试

主要测试程序中的数值流(覆盖值传递路径),检测变量定义与使用的情况。

它比较容易发现下列类型的错误
–变量被定义,但是从来没有使用。
–所使用的变量没有被定义。
–变量在使用之前被定义两次。
–其它定义不当或使用不当的情况

def(x): 定义变量x 的节点的集合

use(x): 使用变量x 的节点的集合

du(s, x): 节点集,其中的每个节点s’满足s’属于use(x) ,且从s 到s’ 有一条路径,其上变量x没有被重新定值。

覆盖准则

  • 全定义(all-defs):对任一变量x,和它的任一定义点s属于def(x) ,测试执行至少包含到du(s, x) 中某个节点的一条路径
  • 全使用(all-uses):对任一变量x,和它的任一定义点s 属于def(x) ,测试执行至少包含到du(s,x)中每个节点的一条路径。
  • 全定义-使用路径(all-du-paths):对任一变量x,和它的任一定义点s 属于 def(x) ,测试执行包含到du(s,x)中每个节点的所有路径。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

软件测试(3)——白盒测试 的相关文章

  • 搭建云原生环境

    1 安装准备工作 确保所有被安装服务器时区和时间一致 时间不一致会影响 Elasticsearch 和 Skywalking 等信息无法采集的情况出现 在各个服务器上安装时间同步命令工具 yum install ntp y 使用 ntpda
  • AJAX--XMLHttpRequest的方法

    AJAX XMLHttpRequest XMLHttpRequest是浏览器内置的一个构造函数 作用是 基于new出来的XMLsHttpRequest实例对象 可以发起Ajax的请求 axios中的axios get axios post
  • CSS Grid布局:合并单元格布局

    CSS Grid布局 网格单元格布局 一文中通过一些简单的实例介绍了如何给容器定义网格 并且怎么使用网格线或者网格区域来实现单元格这样的简单的布局 在文章结尾之处也提到过 这样的单元格如同表格一样 仅仅一个个独立的单元格是无法满足一些复杂的
  • 软件测试基础

    软件测试基础 一 软件测试基础理论 1 软件测试的必要性 所有的产品或者服务上线都需要测试 2 测试的发展过程 3 什么是软件测试 找bug 发现缺陷 4 测试的定义 使用人工或自动的手段来运行或者测试某个系统的过程 目的在于检测它是否满足
  • JSON parse error: Cannot deserialize instance of `java.util.ArrayList

    前言 今天测试接口 JSON里面有个集合 一直报错如下所示 name 到底怎么回事呢 status 0 tenantId 123 createId 123 modifyId 123 labelItemRelations itemId 111
  • 为什么Vue中data一定要是一个函数?

    1 什么是函数 函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块 js函数语法 函数就是包裹在花括号中的代码块 前面使用了关键词 function 当调用该函数时 会执行函数内的代码 可以在某事件发生时直接调用函数 比如当用户点击
  • Android--- Layout

    Android Layout Linear Layout Relative Layout Table Layout Grid Layout Frame Layout Constraint Layout Linear Layout
  • 【Java实践】java实现注册表单处理

    import java io IOException import javax servlet ServletException import javax servlet http HttpServlet import javax serv
  • android 仿钉钉日历,仿钉钉左右滑动日历

    先上我的效果图 再说思路 我这里不贴代码 思路 懂了 不管用前端还是移动端 都可以做出来的 做这个左后滑动的日历之前 首先无从下手的 有两个地方 第一 该怎么实现 左右滑动效果 第二 展示的日期是怎么计算的 因为我们是用ionic2 写的项
  • 【Docker+Mysql】docker搭建的mysql8.0中文乱码问题

    环境 CentOS 7 mysql docker 问题描述 查询数据库时 发现服务器端数据出现中文乱码问题 所有中文显示成问号 导致我的接口访问使用从数据库中读取出来的数据无法处理 解决过程 使用Docker搭建mysql容器 和不使用Do
  • 【python爬虫】1.爬虫基础知识

    文章目录 前言 初识爬虫 什么是爬虫 为什么需要爬虫 明晰路径 浏览器的工作原理 爬虫的工作原理 体验爬虫 requests get Response对象的常用属性 爬虫伦理 总结 前言 很高兴能在这里遇见你 我将会带你学习网络爬虫 我们可
  • MySql范围查找时,索引不生效问题原因

    1 问题描述 本文对建立好的复合索引进行排序 并取记录中非索引字段 发现索引不生效 例如 有如下表 DDL语句为 CREATE TABLE employees emp no int 11 NOT NULL birth date date N
  • pandas 常见绘图总结

    pandas 常见绘图总结 文章目录 pandas 常见绘图总结 前言 一 设置字体和显示中文 二 pandas 可视化 0 25 3版本 1 线形图 2 条形图 2 1 垂直条形图 2 2 水平条形图 3 饼图 4 散点图 4 1 普通散
  • TensorFlow实现梯度下降法求解一元和多元线性回归问题

    使用TensorFlow求解一元线性回归问题 import tensorflow as tf import numpy as np import matplotlib pyplot as plt 设置字体 plt rcParams font
  • Vue触发兄弟级组件中的某个方法

    要求 页面上有两个兄弟级组件 假如我点击组件 1 中的按钮 需要触发组件 2 中的某个方法 在这里 以购物车页面为例 我选择商品列表中的某个商品选中状态 在结算组件中根据列表中是否有未选中状态判断全选状态 效果 第一步 在父级页面引入两个兄
  • infura上部署以太坊智能合约

    Infura是一个托管的以太坊节点集群 可以将你开发的以太坊智能合约发布到infura提供的节点上 而无需搭建自己的以太坊节点 可能你还不了解Infura 但如果你使用过MetaMask 那么就已经接触过Infura了 因为它是MetaMa
  • 除了负载均衡,Nginx 能做的真是太强大了!

    Nginx应该是现在最火的web和反向代理服务器 没有之一 她是一款诞生于俄罗斯的高性能web服务器 尤其在高并发情况下 相较Apache 有优异的表现 那除了负载均衡 她还有什么其他的用途呢 下面我们来看下 一 静态代理 Nginx擅长处
  • 赛普拉斯 12864_如何使用赛普拉斯自动化辅助功能测试

    赛普拉斯 12864 In my previous post I covered how to add screenshot testing in Cypress to ensure components don t unintention
  • 免疫受体 AIRR 分析平台 immuneML 简介

    前言 免疫系统在肿瘤分型和治疗中发挥着重要的作用 TCR 和 BCR 都属于适应性免疫受体 Adaptive immune receptor repertoires AIRR AIRR 组成信息结合 MHC 年龄 性别等 在基于受体库的预测
  • USB设备的Vendor ID和Product ID是什么?有什么样?接到不同的pc他们的ID还是一样的吗?

    USB设备的Vendor ID 厂商识别码 和Product ID 产品识别码 是用来标识USB设备的两个数字代码 Vendor ID是由USB Implementers Forum颁发给厂商的唯一标识码 而Product ID则是由厂商自

随机推荐

  • ITM机制-不用串口也能printf

    在PC上编写过C语言的人都知道 printf可以向控制台输出 scanf可以从控制台获取输入 这里的printf scanf都是标准库函数 利用这些函数 我们可以很方便的调试程序 printf的方式有很多种 一般情况下 我们可以使用串口或其
  • 像素鸟html代码,flappy-bird方块版(用小方块替代像素鸟)

    实例简介 flappy bird方块版 实例截图 核心代码 Initialize Phaser and creates a 400x490px game var game new Phaser Game 400 490 Phaser AUT
  • IDEA找不到vue插件下载,使用外部安装vue.js插件的方法

    setting plugins中找不到Vue js插件 使用IDEA时打开Setting gt Plugins找不到vue js插件 看其他网友Marketplace和Installed找不到还会提示Browse repositories
  • 新手学编程必会的100个代码

    前言 我记得刚开始接触编程的时候 觉得太难了 也很好奇 写代码的那些人也太厉害了吧 全是英文的 他们的英文水平一定很好吧 他们是怎么记住这么多代码格式的 而且错了一个标点符号 整个程序都会有影响 一个程序几千行 错一个标点符号都不行这也太难
  • python 代码 给点云增加随机噪音同时保留原有点云

    微信 394467238 有的时候我们需要把原有的点云数据扩充一下 让它的鲁棒性更强 思路很简单 就是先生成一个随机的正态分布的噪音 然后加到点云原有的XYZ数据上面 直接放代码 代码已经运行过了 没有问题 代码中的 std 就是正态分布的
  • 记录一下mac mini 2018 的折腾过程

    更新 昨天手贱在外置雷电SSD中安装了苹果内置SSD的驱动 随即就造成了外置显卡的挂载不上 又折腾了大概三个小时 随后想到了应该是操作系统内部资源竞争 造成不挂载外置显卡 随后删除了内置SSD的驱动 然后才挂载外置显卡成功 还有一点就是 外
  • SendMessage()窗体之间发消息

    SendMessage调用一个窗口的窗口函数 将一条消息发给那个窗口 一 父窗口向子窗口发消息 1 接收方 1 1头文件里面声明消息 define MSG UPDATE LEFT CHILD WM USER 600 1 2消息映射 在头文件
  • halcon基本图像操作

    halcon基本图像操作 阈值分割 取某一个阈值下的某一个区域 获取中心点位置 形态学 膨胀 腐蚀 开运算 闭运算 综合使用 开运算和检测轮廓 字符识别 资源路径 F halcon halconStudy 阈值分割 灰度值 读取图像 转灰度
  • 在线接口测试工具(神器)

    前方高能 请注意 想必大家都用过POSTMAN 进行接口的测试吧 那么接下来我告诉你 你用了这个工具以后 你就不会再想去用POSTMAN了 话不多说了 直接上代码吧 还是那句话 我会尽可能详细的去演示操作过程 避免大家走弯路 123456
  • MySQL阅读网上MySQL文章有感的杂记

    前言 本篇文章将会记录各大MySQL文章的一些有意思的内容摘取 以及一些问题的提问 并且持续更新 并且MySQL专栏将会记录MySQL常考的场景题等实战 问题归类 1 MySQL从加锁范围上分为哪三类 2 全局锁加锁方法的执行命令是什么 主
  • Openwrt的uci接口

    UCI是Unified Configuration Interface的缩写 翻译成中文就是统一配置接口 用途就是为OpenWrt提供一个集中控制的接口 OpenWrt实现的这个工具 能够让你的不管是Lua还是PHP程序 或者SHELL程序
  • 无网络环境,如何部署Docker镜像

    一 简介 无网络环境 部署 Docker 镜像 这通常适用于一些部署环境是脱离网络的公司 或者公司内部有着严格的网络安全要求 且还是 Docker 部署的程序 这个时候怎么办 别急今天就来讲讲 无网络环境 如何部署 Docker 镜像 二
  • awk命令的使用

    1 获取根分区剩余大小 先用df h命令查看磁盘 确定我们需要获取字段的位置 再使用awk命令获取此字段 df h df h awk NR 6 print 4 2 获取当前机器ip地址 ifconfig awk NR 2 print 2 3
  • 终止for循环的方式

    continue break return 1 continue 当程序运行到 continue 语句时 会终止当前的这一次循环 进入下一次的循环中 它 适用于所有的循环结构 for int i 0 i lt 10 i 执行内容 conti
  • stm32F103C8T6 keil5编译完成使用XCOM进行串口打印时乱码

    一 检查波特率 串口调试工具和main c的串口初始化一定要相同 二 检查编码格式 第一步 点击keil5的小扳手图标 修改为Chinese GB2312 Simplified 这样一来 代码的中文就可以显示出来啦 第二步 XCOM这款串口
  • 安装Visio 2013与原本的office冲突的最终解决方案

    一 下载office visio 2013 二 开始安装 但是提示卸载原本的office 三 网上找寻答案 于是按照这篇文章https jingyan baidu com article 19192ad8c1d6dae53e570735 h
  • HashMap常用API及注意事项

    map clear map size map isEmpty map containsKey 判断 map containsValue map get key map put key value map putAll otherMap ma
  • ubuntu18.04安装cmake3.18.0

    ubuntu18 04安装cmake3 18 0 1 本方法可适用安装任何版本的cmake 可以在官网中找到需要的版本 本文以3 18 0为例 https cmake org files 2 wget https cmake org fil
  • Javaweb和微信小程序项目部署阿里云服务器总结(上)

    谈到微信小程序的java后台怎么部署在阿里云服务器上的问题 弯弯绕绕 好多坑 网上的博客资料也特别乱 博主也是在没有任何经验和指导下花了几天的工夫才完成的 这里为了方便大家不踩坑 总结了下整个流程和注意事项 由于篇幅原因 只讲重点的地方 所
  • 软件测试(3)——白盒测试

    文章目录 白盒测试 白盒测试方法 静态测试 人工代码检查 软件度量 其它方法 动态测试 覆盖测试分析 运行时错误检测 覆盖测试 逻辑覆盖方法 路径测试 数据流测试 白盒测试 白盒测试也称结构性测试 逻辑驱动测试 基于程序的测试 特点 将程序