还做单元测试吗?

软件单元测试分为狭义的单元测试和广义的单元测试。

前者是指对被测代码的各种函数、接口等进行测试,以验证它们的功能、性能和安全性。

后者是指对页面的每一个组件(如文本框、按钮等)进行测试,以验证它们的功能、性能和安全性,有时也被称为组件测试。

传统的软件开发方式是先写产品代码,再写测试代码,最后用测试代码来验证产品代码。

但是在敏捷方法中,特别是敏捷中的极限编程鼓励进行测试驱动开发,即先写测试代码,再写产品代码,最后对代码进行重构。

其好处是能够充分考虑程序需要处理的正常场景和异常场景,尽可能一次性地写出正确的产品代码,从而提高开发效率。

01 软件测试应该贯彻始终

在DevOps下鼓励软件测试贯彻始终,即软件测试的左移和右移。

针对单元测试,主要考虑软件测试的左移,由于在开发阶段修改缺陷的代价非常小,因此建议尽可能做到让大部分缺陷在单元测试阶段被发现。

测试左移是指代码静态和动态的自动化和手工测试,并且结合测试驱动开发让测试人员配合开发人员,尽可能保障产品的质量。测试右移是指在生产环境中进行软件测试,如全链路测试、混沌测试等。

02 软件测试金字塔

谈到软件测试金字塔,就不得不提到Mike Cohn版本的测试金字塔,如图1所示。

图1  Mike Cohn版本的软件测试金字塔模型

Mike Cohn认为开发一个软件产品需要最多的是单元测试,其次是接口测试,最后是UI(User Interface,界面)测试。

在软件测试金字塔模型中,越往上需要集成得越多,修复缺陷的速度越慢,消耗的成本越高;反之,越往下需要集成得越少,修复缺陷的速度越快,消耗的成本越低。

2009年,在伦敦召开的XP日会议上,Google发布了一份报告,报告指出:在单元测试阶段修复缺陷的成本为5美元,构建阶段修复缺陷的成本为50美元,集成测试阶段修复缺陷的成本为500美元,系统测试阶段修复缺陷的成本为5000美元。

根据Mike Cohn测试金字塔模型,Google也提出了自己的测试金字塔模型,如图2所示。

图2  Google版本的软件测试金字塔模型

我们可以认为单元测试为小型测试,接口测试为中型测试,UI测试为大型测试,可见Mike Cohn版本的软件测试金字塔模型与Google版本的本质上是一致的。

上面所述的软件测试主要是指自动化测试,而探索式测试也是不可被忽略的。据统计,基于接口和UI的自动化测试在回归测试中占有重要作用,而探索式测试对于发现产品新功能中的缺陷起着至关重要的作用。因此,在Mike Cohn软件测试金字塔模型上加上探索式测试,就形成了图3所示的改进版的软件测试金字塔模型。

图3  Mike Cohn改进版的软件测试金字塔模型

单元测试的缺点是减缓研发的速度,特别是在产品初期,这显然不符合互联网公司提出的“快鱼吃慢鱼”的思想,由此提出缩小单元测试的规模,扩大接口测试的规模,故形成了蜂巢形模型或纺锤形模型,如图4和图5所示。

图4  蜂巢形模型

图5  纺锤形模型

03 单元测试在传统开发模式中的地位

单元测试在传统开发模式中的地位,如图6所示。

在传统开发模式中,单元测试是验证编码的活动。

图6  单元测试在传统开发模式中的地位

04 单元测试在敏捷开发模式中的地位

单元测试在敏捷开发模式中的地位,如图7所示。

图7  单元测试在敏捷开发模式中的地位

单元测试属于支持团队的面向技术的测试。支持团队说明单元测试是在特性团队中进行的;面向技术表示单元测试的技术含量比业务含量要重。这里需要特别指出,单元测试不是不注重业务知识。

虽然在很多互联网公司,为了提高研发速度缩小了单元测试的规模,然而单元测试的优势和地位依然是不可被取代的!

 

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取   

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

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

相关文章

京准电钟:NTP时间服务器让大数据时钟同步

京准电钟:NTP时间服务器让大数据时钟同步 京准电钟:NTP时间服务器让大数据时钟同步 NTP是一种用于同步网络中设备时间的协议,广泛用于互联网和局域网中。NTP网络时间服务器则是基于NTP协议构建,为网络中的设备提供时间同步服务的服…

MySQL学习笔记(持续更新,目前到十一章锁)

1、Mysql概述 1.1 数据库相关概念 三个概念:数据库、数据库管理系统、SQL 名称全称简称数据库存储数据的仓库,数据是有组织的进行存储DataBase(DB)数据库管理系统操纵和管理数据库的大型软件DataBase Mangement System&#xf…

【Qt】详细Qt基础 (包括自定义控件)

目录 QT 概述创建项目项目文件(. pro)main.cppmainwindow.uimainwindow.hmainwindow.cpp 窗口类QWidget 窗口显示QDialog 窗口 QPushButton创建显示 对象树基本概念功能 坐标体系控件Item WidgetsQListWidgetQTreeWidgetQTableWidget 自定义控件 QT 概述…

结构型设计模式详解与总结

一、什么是结构型设计模式 结构型设计模式的主要目的是处理类或对象之间的组合与继承问题,通过组织类和对象来形成更大的结构,帮助我们更好地解决类与类、对象与对象之间的耦合问题。这类模式通过定义如何组合对象来实现新的功能,着重于解决…

2024 年热门前端框架对比及选择指南

在前端开发的世界里,框架的选择对于项目的成功至关重要。不同的框架有着不同的设计理念、生态系统和适用场景,因此,开发者在选框架时需要权衡多个因素。本文将对当前最流行的前端框架——React、Vue、Angular、Svelte 和 Solid——进行详细对…

AI免费文档处理在线工具:ColPali文本检索文档

1、ColPali 原理还是对比学习,图像和文本,文档通过图像模型,文本通过大模型gemma https://huggingface.co/spaces/manu/ColPali-demo 检索pdf

k8s 中存储之 PV 持久卷 与 PVC 持久卷申请

目录 1 PV 与 PVC 介绍 1.1 PersistentVolume(持久卷,简称PV) 1.2 PersistentVolumeClaim(持久卷声明,简称PVC) 1.3 使用了PV和PVC之后,工作可以得到进一步的细分: 2 持久卷实验配置…

深度0.1%调光恒流芯片SL8701支持PWM调光 模拟调光 无频闪 多路共阳

一、芯片概述 SL8701是一款内置100V MOS的降压型高调光比LED恒流驱动芯片,专为智能调光调色照明研发设计。它支持多种调光方式,包括PWM调光和模拟调光,能够实现高调光比,满足不同场景的照明需求。 二、主要特性 PWM调光支持&am…

【STM32】STM32CubeMX 之 Timers配置 【笔记】

环境 硬件:通用PC 系统: Windows 10 软件 :STM32CubeMX 在STM32CubeMX的Timer配置中,每个选项都有特定的含义。以下是逐一解释这些选项: 1. Mode 配置 a. Clock Source: 时钟源 Internal Clock: 使用内部时钟&…

【Vue3】 h()函数的用法

目录 介绍 参数 使用案例 1.创建虚拟 DOM 元素 2. 组件的动态渲染 3. 创建功能组件 4.渲染动态属性 5. 使用插槽 6. 创建动态标签 介绍 h() 函数用于辅助创建虚拟 DOM 节点,它是 hypescript 的简称——能生成 HTML (超文本标记语言) 的 JavaScript&#x…

Unsupervised HDR Image and Video Tone Mapping via Contrastive Learning

Abstract 捕捉高动态范围 (HDR) 图像(视频)很有吸引力,因为它可以揭示黑暗和明亮区域的细节。 由于主流屏幕仅支持低动态范围(LDR)内容,因此需要色调映射算法来压缩HDR图像(视频)的…

Python编程:创意爱心表白代码集

在寻找一种特别的方式来表达你的爱意吗?使用Python编程,你可以创造出独一无二的爱心图案,为你的表白增添一份特别的浪漫。这里为你精选了六种不同风格的爱心表白代码,让你的创意和情感通过代码展现出来。 话不多说,咱…

Collection-LinkedList源码解析

文章目录 概述LinkedList实现底层数据结构构造函数getFirst(), getLast()removeFirst(), removeLast(), remove(e), remove(index)add()addAll()clear()Positional Access 方法查找操作 概述 LinkedList同时实现了List接口和Deque接口,也就是说它既可以看作一个顺序…

4.MySQL

Moka HR SaaS 招聘平台 主要负责 Moka HR SaaS 招聘平台的模块开发,参与功能设计与实现,提升系统的稳定性和用户体验。 **技术栈:**SpringCloud、Mybatis-Plus、MySQL、Redis、OAuth 2.0、CAS(SSO)、MokaBatch、Apol…

Magnum IO

NVIDIA Magnum IO 文章目录 前言加速数据中心 IO 性能,随时随地助力 AINVIDIA Magnum IO 优化堆栈1. 存储 IO2. 网络 IO3. 网内计算4. IO 管理跨数据中心应用加速 IO1. 数据分析Magnum IO 库和数据分析工具2. 高性能计算Magnum IO 库和 HPC 应用3. 深度学习Magnum IO 库和深度…

Python列表操作详解

1 列表的基本概念 在Python中,列表是一种非常常用的数据结构,它可以存储任意类型的元素,并且支持多种操作。下面将详细介绍Python列表的各种操作。 2列表的操作方法 2.1创建列表 Python可以直接使用方括号[]来创建一个空列表。 示例&am…

ModelMapper的常见用法 ,号称是beanUtils.copyProp....的升级版??,代码复制粘贴即可复现效果,so convenient

官网案例 以下将官网案例做一个解释 1)快速入门 递归遍历源对象的属性拷贝给目标对象 拷贝对象下对象的属性值 Data class Order {private Customer customer;private Address billingAddress; }Data class Customer {private Name name; }Data class Name {pr…

【笔记】自动驾驶预测与决策规划_Part5_决策过程(上)

决策过程 0. 前言1.决策过程的引入1.1有了planning,为什么还需要decision-making?1.2 决策规划的一些思考 2.马尔可夫决策过程及其关键要素2.1 马尔可夫过程2.1.1 什么是随机过程?2.1.2 什么是马尔科夫性?2.1.3 马尔可夫决策过程 …

单片机(学习)2024.10.11

目录 按键 按键原理 按键消抖 1.延时消抖 2.抬手检测 通信 1.通信是什么 2.电平信号和差分信号 3.通信的分类 (1)时钟信号划分 同步通信 异步通信 (2)通信方式划分 串行通信 并行通信 (3)通信方向划分 单工 半双工 全双工 4.USART和UART(串口通信&a…

C++面试速通宝典——17

283. Nginx负载均衡算法 ‌‌‌‌  Nginx支持多种负载均衡算法。 轮询(Round Robin):默认算法,按顺序逐个分配请求到后端服务器。加权轮询(Weighted Round Robin):与轮询类似,但…