软件测试之白盒测试

概念与定义

  1. 白盒测试:侧重于系统或部件内部机制的测试,类型分为分支测试(判定节点测试)、路径测试、语句测试。

  2. 控制流分析(基于程序结构):控制流分析是一类用于分析程序控制流结构的静态分析技术,目的在于生成程序的控制流图,在编译器设计程序分析、程序理解等领域都有重要应用。

  3. 逻辑覆盖测试(对判定的测试)的原理:以程序内部的逻辑结构为基础的用例设计方法,它通过对程序的逻辑结构的遍历,来实现测试对程序的覆盖。

  4. 测试覆盖率:度量测试完整性的指标,是测试有效性的一个度量。

    覆盖率至少被执行一次的总数总数覆盖率至少被执行一次的总数总数覆盖率=至少被执行一次的item总数item总数

    测试覆盖率不需要100%,因为覆盖率越高,测试成本越高。

    通常可以设置一个覆盖率达标标准。

  5. 语句覆盖:设计测试用例时应保证程序中每一条可执行语句至少应执行一次。(点覆盖)

  6. 判定覆盖(分支覆盖):设计测试用例时应保证程序中每个判定节点取得每种可能的结果至少一次。或者程序中每个判定的真分支和假分支至少执行一次。(边覆盖)

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

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

  9. 条件组合覆盖:条件组合覆盖,设计测试用例时应满足每个判定节点中,所有简单判定条件(子条件)的所有可能的取值组合情况至少执行一次。通过列出真值表的方式来得到完全的覆盖。

  10. 路径覆盖:要求设计足够的测试用例,运行被测程序,覆盖程序中所有可能组合的路径。

  11. 程序图:简化的程序流程图,不关注源代码细节,只关注程序的基本结构。

  12. 环复杂度:用于描述程序结构复杂度的度量。

  13. 基本路径测试:在程序的控制流图的基础上,通过分析控制流程的环路复杂性,导出独立可执行路径集合,从而设计测试用例的方法。

  14. 静态白盒测试:又称为结构分析,是在不执行程序的条件下审查软件设计、体系结构和代码,从而找出软件缺陷的过程。测试对象是文档、代码等非计算机执行的部分。

简答

白盒测试关注的对象

源代码和程序结构。

白盒测试的优缺点

优点

  • 针对性强,便于快速定位,测试效率高;
  • 在函数级别开始测试工作,缺陷修复的成本低;
  • 通过不同的白盒覆盖指标有助于了解和衡量对被测对象的测试覆盖程度,
  • 有助于代码优化和缺陷预防。

缺点

  • 对测试人员的技术要求高。
  • 成本高。

白盒测试的问题

  • 软件测试是不完备的;
  • 软件测试是有风险的;
  • 测试设计应达到的目标:提高效率、降低风险、在代码级别上提高软件质量。

各种程序结构以及它们的复杂程度

程序结构有:线性结构(顺序结构),条件判定结构,循环结构,以及这些结构的组合。

复杂程度:

线性结构二分支的条件判定多分支的条件判定循环结构线性结构二分支的条件判定多分支的条件判定循环结构线性结构<二分支的条件判定<多分支的条件判定<循环结构

逻辑覆盖测试的六种测试方法

image-20231230162427773

  1. 语句覆盖

    缺点:关注语句,而非关注判定节点。对隐式分支无效。

  2. 判定覆盖(分支覆盖)

    局限性:判定覆盖仅关心表达式的整体取值,并不关心表达式如何构成,不能覆盖到每个子条件的所有取值情况,由此导致测试的漏洞。

  3. 条件覆盖

    局限性:条件覆盖并不能确保满足判定覆盖。

  4. 判定-条件覆盖(分支-条件覆盖)

  5. 条件组合覆盖

    优点:

    • 条件组合覆盖准则满足语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖准则;
    • 方法简单;只需要找到所有简单条件,并列出真值表,穷尽所有组合情况即可。

    局限性:

    • 条件组合覆盖不能保证所有组合的路径被执行;
    • 测试用例太多;
    • 冗余严重。
  6. 路径覆盖

    覆盖面最广。

    100%满足路径覆盖,一定能100%满足判定覆盖标准;但并不一定能100%满足条件覆盖和判定-条件覆盖,也就不能满足100%条件组合覆盖。

各种覆盖之间的关系

  • 语句覆盖太弱;
  • 判定覆盖、条件覆盖不够全面;
  • 判定-条件覆盖设计难度大;
  • 条件组合覆盖的测试用例数量太多,不能将所有路径覆盖;
  • 路径覆盖的测试用例复杂且数量多,不能将所有的条件组合覆盖。

单独采用任何一种逻辑覆盖方法都不能完全覆盖所有的测试用例,任何一个高效的测试用例,都是针对具体测试场景的。

环复杂度的计算

直观观察法

观察程序图将二维平面分割为封闭区域和开放区域的个数。

image-20231230163410807

公式计算法

方法一:

V(G)=E−N+2

其中,E 是边数, N 是节点或顶点数。

前提条件:单入口单出口。

例题:

image-20231230163845973

V(G)=E−N+2=10−7+2=5

方法二:

V(G)=E−N+1

前提条件:无孤立节点,强连通图。如果非强连通图,则需要先添加辅助线。如下图的蓝线。

简单地说,强连通图就是图中任意两个点相互可达。

image-20231230164134629

V(G)=E−N+1=11−7+1=5

判定节点法

V(G)=P+1

其中,P 是二分支判定节点的个数。

前提条件:仅计算二分支的判定节点。

如果没有判定节点,只有一条执行路径,则V=1。

image-20231230163845973

如上图,二分支判定节点分别有:A,B,C,D。

因此,V(G)=P+1=4+1=5.

特殊情况的计算

环复杂度的计算公式都有特定的前提条件,遇到特殊情况,则使用其它可以使用的公式。

image-20231230164854250

  • 左图,非单入单出,不能使用公式计算法的方法一,可以使用判定节点法,V=5
  • 右图,非二分支判定节点,不能使用判定节点法,可以使用公式计算法方法一,V=13

基本路径测试的流程

  1. 生成路径地图

    image-20231230163845973

  2. 确定独立路径集合的规模

    计算环复杂度V,则需要V条独立路径。

  3. 找出一组独立路径。

    1. 确定主路径(出错概率最高的路径,或者缺陷对用户影响最大的路径)。
    2. 根据主路径抽取其它独立路径。

image-20231230165602659

静态白盒测试的方法

  1. 代码检查
  2. 静态结构分析
  3. 静态质量度量

image-20231230173754769

同行评审的一般流程

  1. 计划评审会议
  2. 召开评审预备会
  3. 准备评审会议
  4. 召开评审会议
  5. 召开第三小时会议
  6. 修复缺陷
  7. 确认修复

同行评审的五种角色

  1. 主持人:负责组织评审会议;
  2. 讲解员:负责讲解被评审的工作产品;
  3. 记录员:负责记录缺陷和决议;
  4. 作者:程序编写者,负责提供被提审的工作产品;
  5. 评审员:程序设计者、测试专家,负责评审工作产品,也负责设计测试用例。

Python接口自动化测试零基础入门到精通(2023最新版)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/229870.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

约束满足问题改进技术:基于变量和赋值次序的启发式

回溯搜索的通用算法的问题与改进思路 • 需改善无信息回溯搜索算法的性能。 • 通用改进方法的思路&#xff1a; – 下一步该给哪个变量赋值&#xff0c; 按什么顺序给该变量赋值&#xff1f; – 每步搜索应该做怎样的推理&#xff1f; 当前变量的赋值会对其他未赋值变量产…

【SpringBoot框架篇】34.使用Spring Retry完成任务的重试

文章目录 简要1.为什么需要重试&#xff1f;2.添加maven依赖3.使用Retryable注解实现重试4.基于RetryTemplate模板实现重试 简要 Spring实现了一套重试机制&#xff0c;功能简单实用。Spring Retry是从Spring Batch独立出来的一个功能&#xff0c;已经广泛应用于Spring Batch,…

算法巡练day04Leetcode24交换节点19删除倒数节点142环形链表

今天学习的文章和视频链接 https://www.bilibili.com/video/BV1YT411g7br/?vd_source8272bd48fee17396a4a1746c256ab0ae https://www.bilibili.com/video/BV1if4y1d7ob/?vd_source8272bd48fee17396a4a1746c256ab0ae 24两两交换链表中的节点 给你一个链表&#xff0c;两两…

ASP.NET Core基础之图片文件(一)-WebApi图片文件上传到文件夹

阅读本文你的收获&#xff1a; 了解WebApi项目保存上传图片的三种方式学习在WebApi项目中如何上传图片到指定文件夹中 在ASP.NET Core基础之图片文件(一)-WebApi访问静态图片文章中&#xff0c;学习了如何获取WebApi中的静态图片&#xff0c;本文继续分享如何上传图片。 那么…

八皇后问题(C语言/C++)超详细讲解/由浅入深---深入八皇后问题

介绍引入 在计算机科学中&#xff0c;八皇后问题是一个经典的回溯算法问题。这个问题的目标是找出一种在8x8国际象棋棋盘上放置八个皇后的方法&#xff0c;使得没有任何两个皇后能够互相攻击。换句话说&#xff0c;每一行、每一列以及对角线上只能有一个皇后。 想象一下&…

为什么大学c语言课不顺便教一下Linux,Makefile

为什么大学c语言课不顺便教一下Linux&#xff0c;Makefile&#xff0c;git&#xff0c;gdb等配套工具链呢? 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「Linux的资料从专业入门到高级教程工具包」&…

Docker 网络管理

一、Docker网络简介 Docker网络是容器化应用程序的重要组成部分&#xff0c;它使得容器之间可以互相通信和连接&#xff0c;同时也提供了容器与外部环境之间的隔离和连接。 二、Docker网络网络模式 Docker 提供了多种网络模式&#xff0c;可以通过docker network ls 命令查看…

MySQL——事物

目录 一.发现问题 二.什么时事物 三.事务提交方式 四.事物的常规操作方式 五. 事务隔离级别 1.如何理解隔离性 2.隔离级别 3.查看与设置隔离性 4.读未提交【Read Uncommitted】 5.读提交【Read Committed】 6.可重复读【Repeatable Read】 7.串行化【serializabl…

Unity游戏资源更新(AB包)

目录 前言&#xff1a; 一、什么是AssetBundle 二、AssetBudle的基本使用 1.AssetBundle打包 2.BuildAssetBundle BuildAssetBundleOptions BuildTarget 示例 3.AssetBundle的加载 LoadFromFile LoadFromMemory LoadFromMemoryAsync UnityWebRequestAsssetBundle 前…

QProgressDialog用法及结合QThread用法,四种线程使用

1 QProgressDialog概述 QProgressDialog类提供耗时操作的进度条。 进度对话框用于向用户指示操作将花费多长时间&#xff0c;并演示应用程序没有冻结。此外&#xff0c;QPorgressDialog还可以给用户一个中止操作的机会。 进度对话框的一个常见问题是很难知道何时使用它们;操作…

Linux shell编程学习笔记38:history命令

目录 0 前言 1 history命令的功能、格式和退出状态1.1 history命令的功能1.2 history命令的格式1.3退出状态2 命令应用实例2.1 history&#xff1a;显示命令历史列表2.2 history -a&#xff1a;将当前会话的命令行历史追加到历史文件~/.bash_history中2.3 history -c&#xf…

如何做好档案数字化前的鉴定工作

要做好档案数字化前的鉴定工作&#xff0c;可以按照以下步骤进行&#xff1a; 1. 确定鉴定目标&#xff1a;明确要鉴定的档案的内容、数量和性质&#xff0c;确定鉴定的范围和目标。 2. 进行档案清点&#xff1a;对档案进行全面清点和登记&#xff0c;包括数量、种类、状况等信…

【Linux】基本指令了解(一)

&#x1f497;个人主页&#x1f497; ⭐个人专栏——数据结构学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读&#xff1a;1. 认识Linux1.1 什么是Linux1.2 Linux特点 2. ls指令3. pwd命令4. cd 指令5. touch命令6. mkdir指令7. …

<JavaEE> TCP 的通信机制(二) -- 连接管理(三次握手和四次挥手)

目录 TCP的通信机制的核心特性 三、连接管理 1&#xff09;什么是连接管理&#xff1f; 2&#xff09;“三次握手”建立连接 1> 什么是“三次握手”&#xff1f; 2> “三次握手”的核心作用是什么&#xff1f; 3&#xff09;“四次挥手”断开连接 1> 什么是“…

听GPT 讲Rust源代码--library/panic_unwind

File: rust/library/panic_unwind/src/seh.rs 在Rust源代码中&#xff0c;rust/library/panic_unwind/src/seh.rs这个文件的作用是实现Windows操作系统上的SEH&#xff08;Structured Exception Handling&#xff09;异常处理机制。 SEH是Windows上的一种异常处理机制&#xff…

Mysql 动态链接库配置步骤+ 完成封装init和close接口

1、创建新项目 动态链接库dll 2、将附带的文件都删除&#xff0c;创建LXMysql.cpp 3、项目设置 3.1、预编译头&#xff0c;不使用预编译头 3.2、添加头文件 3.3、添加类 3.4、写初始化函数 4、项目配置 4.1、右键解决方案-属性-常规-输出目录 ..\..\bin 4.2、生成lib文件 右…

3D视觉-相机选用的原则

鉴于不同技术方案都有其适用的场景&#xff0c;立体相机的选型讲究的原则为“先看用途&#xff0c;再看场景&#xff0c;终评精度”&#xff0c;合适的立体相机在方案中可以起到事半功倍的效果。从用途上来进行划分&#xff0c;三维视觉方案主要应用在两个方向&#xff1a;测量…

Linux 进程(六) 环境变量

main函数参数&#xff1a; 这是一个常见的main函数&#xff0c;那么main函数可以带参吗&#xff1f; int main() {return 0; } 答案是可以的&#xff01; 我们先看这样一段代码&#xff0c;首先给main函数带上两个参数。 然后我们来看输出的结果。 这样一组字符串是命令行解释…

【AI】一文读懂大模型套壳——神仙打架?软饭硬吃?

目录 一、套壳的风波此起彼伏 二、到底什么是大模型的壳 2.1 大模型的3部分&#xff0c;壳指的是哪里 大模型的内核 预训练&#xff08;Pre-training&#xff09; 调优&#xff08;Fine-tuning&#xff09; 2.2 内核的发展历程和万流归宗 2.3 套壳不是借壳 三、软饭硬…

Ubuntu 常用命令之 locate 命令用法介绍

&#x1f525;Linux/Ubuntu 常用命令归类整理 locate命令是在Ubuntu系统下用于查找文件或目录的命令。它使用一个预先构建的数据库&#xff08;通常由updatedb命令创建&#xff09;来查找文件或目录&#xff0c;因此它的查找速度非常快。 plocate 安装 locate 不是 Ubuntu 系…