当前位置: 首页 > news >正文

测试理论知识四:大型软件的测试技巧——单元测试

1. 模块测试/单元测试

模块测试也被称为单元测试,本文章称单元测试为主。

对于小的程序测试,我们可以在一定时间内完成,如果面对的是大型程序,等程序开发完成之后我们再进行测试,那会大大降低我们的效率。

单元测试是对程序中的单个子程序、子程序或过程进行测试的过程,也就是说,一开始并不是对整个程序进行测试,而是先将注意力集中在对构成程序的较小模块的测试上面。

2. 单元测试的测试用例设计

单元测试总体上是面向白盒测试。

所以我们在编写单元测试的用例时,所使用的测试策略需要偏向于白盒的测试策略。

白盒测试策略如下:

语句覆盖、判断覆盖、条件覆盖、判定/条件覆盖、多重条件覆盖。

语句覆盖:语句覆盖是指测试用例可以被测试的目标程序的每行代码都执行。

判断覆盖:测试用例编写应覆盖代码中的判断条件,包括成立与不成立。

条件覆盖:测试用例编写应覆盖代码中的条件,包括判断与循环条件的成立与不成立的情况。

判定/条件覆盖:判断覆盖与条件覆盖的综合情况。

多重条件覆盖:测试用例编写应覆盖代码中的多重条件判断,包括多重循环与判断嵌套等情况。

3. 增量测试

如同我们开头时问的问题,软件是否先独立的进行每个模块的测试,然后组合成一个完成的程序,还是组装成一个完整的程序后一次性测试?

针对以上两个问题,我们提出了增量测试和非增量测试。

非增量测试:每个单元进行独立的测试,测试完成之后组装起来。

增量测试:每个单元进行测试,测试后的每个单元进行组装,类似于盖高楼大厦。

3.1 增量测试与非增量测试的区别

  1. 非增量测试所需的工作量要多一些。

  2. 如果使用了增量测试,可以较早的发现模块中与不匹配接口、不正确假设相关的编程错误。

  3. 如果使用了增量测试,调试会进行的容易一些。

  4. 增量测试会将测试进行的更彻底。

  5. 非增量测试所占用的机器时间显得少一些。

  6. 模块测试阶段开始时,如果使用的是非增量测试,就会有更多的机会进行并行操作。

3.2 自顶向下测试与自底向上测试

自顶向下的测试是从程序的顶部或初始模块开始,当一个模块的要开始测试时,需要确保调用它的模块已经被测试了。

优点

  1. 如果主要的缺陷发生在程序的顶层将非常有利。

  2. 一旦引入I/O功能,提交测试用例会更容易

  3. 早期的程序框架可以进行演示,并可激发积极性

缺点:

  1. 必须开发桩模块

  2. 桩模块要比最初表现的更复杂

  3. 在引入I/O功能之前,向桩模块中引入测试用例比较困难

  4. 创建测试环境可能很难,甚至无法实现

  5. 观察测试输出很困难

  6. 使人误解设计和测试可以交迭进行

  7. 会导致特定模块测试的完成延后

自底向上测试开始于程序中的终端模块,当一个模块要开始测试时,需要确保他调用的模块都被测试完成。

优点

  1. 如果主要的缺陷发生在程序的底层将非常有利

  2. 测试环境比较容易建立

  3. 观察测试输出比较容易

缺点:

  1. 必须开发驱动模块。

  2. 直到最后一个模块添加进去,程序才形成一个整体。

相关文章:

测试理论知识四:大型软件的测试技巧——单元测试

1. 模块测试/单元测试 模块测试也被称为单元测试,本文章称单元测试为主。 对于小的程序测试,我们可以在一定时间内完成,如果面对的是大型程序,等程序开发完成之后我们再进行测试,那会大大降低我们的效率。 单元测试…...

安防监控系统/磁盘阵列/视频监控EasyCVR平台微信推送步骤大公开

视频汇聚/视频云存储/集中存储/视频监控管理平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,实现视频资源的鉴权管理、按需调阅、全网分发、云存储、智能分析等,视频智能分析平台EasyCVR融合性强、开放度…...

算法与数据结构--特殊有序集的线性时间排序算法

一.计数排序算法 基本思想:统计每个输入元素的个数,然后根据这些计数值重构原数组。 使用范围:需要知道元素大小范围,就是最大值是多少。 【排序算法】计数排序_哔哩哔哩_bilibili 二.基数排序 使用场景:只适用于…...

windows 动态库和静态库 介绍

在Windows平台上,动态库和静态库都是用于组织和共享代码的方式。这些库文件的扩展名和用途有一些区别。 1. 静态库和动态库 静态库(Static Library): 文件扩展名:.lib在编译链接时,静态库的代码被直接嵌入…...

微软官方镜像下载大全(windows iso 官方镜像)

原本只是想下一个Windows Server 2022中文版的镜像,后面发现要么就是慢得一批的某盘,要么就是磁力,我想直接下载简简单单,找了一圈没有找到。官网下载需要注册、登录乱七八糟,最终终于找到下载方法了,适用于…...

ceph块存储学习

目录 ceph的组件和功能 ceph的数据读写流程 ceph存储池学习 ceph的组件和功能 Ceph OSD:功能是存储数据,处理数据的复制、恢复、平衡数据分布,并将一些相关数据提供给Ceph Monitor,。 Ceph Monitor: 功能是维护整个集群健康状态&…...

开发模型和测试模型

1. 开发模型 1.1 瀑布模型 瀑布模型是其他模型的基础框架 start—>需求分析---->计划----->设计----->编码----->测试----->End(其实就是软件开发的生命周期) 特点:线性的开发流程 缺陷:测试被后置。①风险往…...

Kubectl 部署简单应用

创建新服务 kubectl create deployment kubernetes-bootcamp --imagegcr.io/google-samples/kubernetes-bootcamp:v1 查看 kubectl get deployments 打开新的终端执行 kubectl proxy 此时,切回上一个终端,通过 kubectl get pods 可查看已部署好的pod。并…...

Flink电商实时数仓(三)

DIM层代码流程图 维度层的重点和难点在于实时电商数仓需要的维度信息一般是动态的变化的,并且由于实时数仓一般需要一直运行,无法使用常规的配置文件重启加载方式来修改需要读取的ODS层数据,因此需要通过Flink-cdc实时监控MySql中的维度数据…...

四种消息队列,如何选型

这篇文章,主要讲述 Kafka、RabbitMQ、RocketMQ 和 ActiveMQ 这 4 种消息队列的异同,无论是面试,还是用于技术选型,都有非常强的参考价值。 01 消息队列基础 1.1 什么是消息队列? 消息队列是在消息的传输过程中保存消…...

flutter开发windows应用的库

一、window_manager 这个插件允许 Flutter 桌面应用调整窗口的大小和位置 地址:https://github.com/leanflutter/window_manager二、win32 一个包,它使用FFI包装了一些最常见的Win32 API调用,使Dart代码可以访问这些调用,而不需…...

机器学习--线性回归

目录 监督学习算法 线性回归 损失函数 梯度下降 目标函数 更新参数 批量梯度下降 随机梯度下降 小批量梯度下降法 数据预处理 特征标准化 正弦函数特征 多项式特征的函数 数据预处理步骤 线性回归代码实现 初始化步骤 实现梯度下降优化模块 损失与预测模块 …...

【Spring Boot】面试题汇总,带答案的那种

继上次的文章【MySQL连环炮,你抗的住嘛?】爆火之后,越来越多的小伙伴后台留言,要求阿Q总结下其他的“连环炮”知识点,想在金九银十的面试黄金期轻松对线面试官。 同样为了节省大家的时间,阿Q最近对【Sprin…...

【大模型】快速体验百度智能云千帆AppBuilder搭建知识库与小助手

文章目录 前言千帆AppBuilder什么是千帆AppBuilderAppBuilder能做什么 体验千帆AppBuilderJava知识库高考作文小助手 总结 前言 前天,在【百度智能云智算大会】上,百度智能云千帆AppBuilder正式开放服务。这是一个AI原生应用开发工作台,可以…...

字符串压缩

...

MsSQL中的索引到底长啥样,查找过程怎么进行

参考文章一 参考文章二 建表 mysql> create table user(-> id int(10) auto_increment,-> name varchar(30),-> age tinyint(4),-> primary key (id),-> index idx_age (age)-> )engineinnodb charsetutf8mb4;insert into user(name,age) values(张三,…...

WPF 全局异常处理

在Application中存在三种异常事件EventHandler DispatcherUnhandledExceptionAppDomain.CurrentDomain.UnhandledExceptionTaskScheduler.UnobservedTaskException 其中 DispatcherUnhandledException 是在异常由应用程序引发但未进行处理时发生,但无法捕获多线程…...

Flink系列之:Elasticsearch SQL 连接器

Flink系列之:Elasticsearch SQL 连接器 一、Elasticsearch SQL 连接器二、创建 Elasticsearch表三、连接器参数四、Key 处理五、动态索引六、数据类型映射 一、Elasticsearch SQL 连接器 Sink: BatchSink: Streaming Append & Upsert ModeElasticsearch 连接器…...

java中将Map集合、对象、字符串转换为JSON对象

1、Map集合转JSON对象 创建一个Map集合&#xff1b; 新建json对象&#xff0c;并将Map引入json中。 public void demo1(){ //创建一个Map集合Map<String, String> map new HashMap<>();map.put("1729210001","zhangsan");map.put("17292…...

理解Spring中bean的作用域

singleton:Spring Ioc容器中只会存在一个共享的Bean实例&#xff0c;无论有多少个Bean引用它&#xff0c;始终指向同一个对象&#xff0c;作用域为Spring中的缺省&#xff08;同一package&#xff09;作用域 prototype:每次通过Spring容器获取prototype定义的bean时&#xff0c…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存&#xff1a;一级缓存、二级缓存 默认情况下&#xff0c;只有一级缓存开启&#xff08;sqlSession级别的缓存&#xff09;二级缓存需要手动开启配置&#xff0c;需要局域namespace级别的缓存 一级缓存&#xff08;本地缓存&#…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...