使用 Python 进行测试(4)为什么要测试?测什么?

news2024/11/23 0:46:56

总结

要知道测试的内容,首先要知道测试的原因。下面是测试的几个主要目的:

  1. 避免回归
  2. 质量管理
  3. 匹配规格
  4. 淡化责任
  5. 让你放心
  6. 学习测试
  7. 选中一个框

在这里插入图片描述

你为什么要测试?

要决定测试什么、测试多少以及以什么顺序测试,您需要首先弄清楚测试的原因。
测试是一项艰巨的工作,需要时间、精力和资源。为了证明它的合理性,它必须服务于一个目的,你必须为每个项目定义它是什么。

目的1:避免回归

这是测试最常见的目的:确保当有人修改代码时,我们不会破坏现有的代码。这也是最帕累托和最现实的目的,因为它不需要 100% 覆盖所有边缘情况就可以给你带来良好的回报。对代码最常用的路径进行一些良好的测试将确保大多数用户在大多数时候不会生气。
大多数人都专注于单元测试,但经验告诉我,一些好的端到端测试(我们将在后面定义)可以让你走得很远。

目的2:质量管理

添加测试可能会提高软件的质量,前提是您不会过度使用并定期发布。😃
这是一个很好的副作用,但你也可以故意选择利用它来达到这个目的:

  • 它将通过迫使你检查你的假设,将边缘情况摆在你面前并定期练习代码来减少代码库中的错误。
  • 它将迫使你考虑你的 API,并使其可测试,从而减少耦合。
  • 它会让你重新考虑你的项目范围,因为测试成本很高,所以你将不得不思考,“这个功能值得吗?

不幸的是,这引出了一个问题:什么是质量?您的质量目标是什么?你如何衡量它?
这是一个兔子洞,公司很少有客观的、可测试的质量指标清单。当他们这样做时,这些指标往往最终会被玩弄。除非你是美国宇航局,否则就顺其自然吧,特别是如果你在另一边有一个客户,他们会一路影响它。经验有很大帮助,所以如果你一开始很糟糕,不要气馁。

决定进行低级质量检查是一个完美的决定。但你必须有意识地去做。

目的3:匹配规格

测试是关于系统如何工作的实用、可读且始终保持最新状态的演示。因此,它们非常适合证明您遵循规格或标准。如果这是你的目标,你需要现在就做出决定,因为这需要纪律和整个团队的参与。在某种程度上,它比“管理质量”更容易,因为你是否匹配它更客观(尽管 IRL 实践也有办法用它来玩弄)。但这可能是一项繁琐的工作,繁琐、重复、注重细节,并且需要大量文档。

它有一个不同的、成本更低的、有点美妙的结果:它是关于代码如何工作的文档和参考。它可以帮助初学者了解您的代码库是如何滴答作响的,使入门更容易,并为您和您的 AI 插件提供参考。

即使你不符合规范,我建议你至少要牢记这个文档目标,因为它很快就会带来回报。这意味着,涵盖最常见的用例,在测试中使用好名称并执行公共 API。我甚至把一些测试做得有点太大了,这样它们读起来就像一个可执行文件,并保证是正确的教程。

目的4:淡化责任

目的5:让你放心

如果一个项目至关重要,如果人们的生活受到影响,如果你的职业生涯岌岌可危,那么看到成千上万的测试通过亮绿色支票将对你的血压产生非常积极的影响。

目的6:学习测试

目的 7:选中一个框

生活有时可能很愚蠢,是的,就像斯科特·尤雷克(Scott Jurek)在《吃就跑》中所说的那样:“有时,你只是做事。”

你的限制是什么?

你想做什么?你能做的到吗?
你需要了解你可以使用的人力,测试花费的时间,在什么条件(使用笔记本?使用特定的测试工具?什么权限?)下进行测试。

测试多少?

你应该测试多少东西?
对我来说,测试的黄金标准是SQLite代码库。他们的测试次数是代码行的 590 倍,在代码行中,他们检查诸如断电时会发生什么!但他们最近还在添加新的测试!

因此,你无法真正地全面测试!
你该测试多少取决于你希望你的项目需要什么,如果你不在乎错误,你甚至可以不进行测试,在出现问题时修复。

经验法则

如果您有产品,通过自动化 GUI 进行端到端测试是脆弱的,但也会带来最大的收益。当您没有太多时间进行测试时,您可以从此开始。与公共 Web API、cmd接口等相同。奖励:当您是初学者时,这种类型的测试更容易概念化,因为它非常具体,而且您不必解决副作用,因为您正在测试副作用。首先快速而肮脏地完成是完全可以的。但是,通过 e2e 测试,您不会获得更好的代码和架构的好处。

如果您有库,请优先测试公共 API(如果可以)。从上到下尽早锻炼你的大部分筹码,同时防止你迷失在细节中。它还将迫使您考虑程序的边界及其提供的服务,这是极客很难做到的。对一个干净的、完美的小函数进行单元测试要漂亮得多。这并不总是可行的,因为如果您从头开始启动系统,您可能需要先创建大量低级工具。

如果可靠性至关重要,并且您有一个规范,则首先按照指定测试组件,并根据其匹配的规范部分命名/注释/引用每个测试。使用类型提示,尤其是对于模型和单元。如果您必须支持规范的多个版本,则还要测试版本和命名空间。质量要求越高,就越需要通过验收测试、回溯测试、模糊测试和属性测试来补充单元测试。

纯洁往往是决定优先事项的一种糟糕方式。在项目早期,100% 的测试覆盖率很少是一个好目标,不要过分关注这一点,因为最后的百分比是昂贵的,而且带来的好处最少。这个耗资5亿欧元的项目上限为95%。混合概念和不完美也是可以的。在单元测试中可能会有一些副作用。你可能只锻炼一些分支和一些快乐的道路。您可能不会测试某些错误。测试可能介于 e2e 和单元测试之间,但两者都不完全是。不要让最好的成为好的敌人。保持你最初陈述的目标,并记住你的限制。这就是我们从他们开始的原因。它们是您的指南。
当然,现在您可能不知道什么是覆盖率、属性测试或模糊测试,这将在本系列的下一篇文章中解释。

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

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

相关文章

Docker部署Nginx下载站点服务

1、下载镜像 由于docker官方镜像站点被封了,所以我把镜像上传到阿里云镜像仓库了 docker pull registry.cn-hangzhou.aliyuncs.com/qinzt-tools/file-nginx:1.18.02、运行容器实例 运行变量解释: 变量名称默认值解释USERhyadmin访问下载站点的认证用…

Java--Arrays类

1.数组的工具java.util.Arrays 2.由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作。 3.查看JDK帮助文档 4.Arrays类中的方法都是static修饰静态的静态方法&…

Java高频面试题整理(几万字)

👩🏻 作者:一只IT攻城狮 ,关注我不迷路 ❤️《java面试核心知识》突击系列,持续更新… 💐 面试必知必会学习路线:Java技术栈面试系列SpringCloud项目实战学习路线 📝再小的收获x365天…

Golang: 依赖注入与wire —— 构建高效模块化应用的秘诀

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【AI基础】第六步:纯天然保姆喂饭级-安装并运行qwen2-7b

整体步骤类似于 【AI基础】第五步:纯天然保姆喂饭级-安装并运行chatglm3-6b-CSDN博客。 此系列文章列表: 【AI基础】概览 【AI基础】第一步:安装python开发环境-windows篇_下载安装ai环境python 【AI基础】第一步:安装python开发环…

Java17 --- SpringSecurity之前后端分离处理

目录 一、实现前后端分离 1.1、导入pom依赖 1.2、认证成功处理 1.3、认证失败处理 1.4、用户注销处理 1.5、请求未认证处理 1.6、跨域处理 1.7、用户认证信息处理 1.8、会话并发处理 一、实现前后端分离 1.1、导入pom依赖 <dependency><groupId>co…

ComfyUI

文章目录 一、关于 ComfyUI特点快捷键QA你为什么做这个&#xff1f;这是给谁的&#xff1f; 二、安装1、Windows直接链接下载如何在另一个UI和ComfyUI之间共享模型&#xff1f; 2、Jupyter Notebook3、手动安装&#xff08;Windows、Linux&#xff09;AMD GPU&#xff08;仅Lin…

MEMS:Lecture 18 Feedback

讲义 Linear feedback MEMS热板 Hotplate MEMS&#xff08;微机电系统&#xff09;热板是现代气体传感器的重要组成部分。它们通过加热一种活性材料来工作&#xff0c;这种材料与气体发生反应&#xff0c;从而改变其电阻。电阻的变化可以用来检测和测量特定气体的存在和浓度。…

讨论C++模板

讨论C模板 函数重载和泛型编程模板分类函数模板语法原理函数模板的实例化隐式实例化显示实例化 匹配原则 类模板语法类模板的实例化 C支持了函数重载&#xff0c;通过函数名相同&#xff0c;参数列表不同来构成函数重载&#xff0c;以达到方便程序员调用。但还是没有改变代码大…

软考初级网络管理员__操作系统单选题

1.使用Windows提供的网络管理命令(请作答此空)可以查看本机的路由表&#xff0c;()可以修改本机的路由表。 tracert arp ipconfig netstat 2.在Windows 的命令行窗口中键入命令C:\>nslookupset type MX>202.30.192.2这个命令序列的作用是查询()。 邮件服务器信息 …

【鸿蒙 HarmonyOS】Swiper组件

一、背景 项目中通常会遇到图片轮播&#xff0c;内容轮播的场景&#xff1b;如&#xff1a;在一些应用首页显示推荐的内容时&#xff0c;需要用到轮播显示的能力。 二、源码地址 ✍Gitee开源项目地址&#x1f449;&#xff1a;https://gitee.com/cheinlu/harmony-os-next-swi…

【Linux】进程_5

文章目录 五、进程6. 进程的调度和转换7. 环境变量 未完待续 五、进程 6. 进程的调度和转换 进程在运行过程中&#xff0c;要产生大量的临时数据&#xff0c;存放在CPU的寄存器中&#xff0c;CPU内部的所有临时数据我们叫做进程的 硬件上下文。当进程的时间片到了时&#xff…

用LoRA微调 Llama 2:定制大型语言模型进行问答

Fine-tune Llama 2 with LoRA: Customizing a large language model for question-answering — ROCm Blogs (amd.com) 在这篇博客中&#xff0c;我们将展示如何在AMD GPU上使用ROCm对Llama 2进行微调。我们采用了低秩适配大型语言模型(LoRA)来克服内存和计算限制&#xff0c;…

【百度之星】题目练手

BD202301公园 码题集OJ-公园 (matiji.net) 看到之后就想到之前没写出来的一道cf题目&#xff0c;因为不敢打暴力导致没写出来hhh~ 首先&#xff0c;这个问题贪心必有反例&#xff08;贪心两个人尽早相遇&#xff09; 数据范围40000&#xff0c; 直接暴力枚举两个人在哪个点相遇…

云原生技术实现Devops自动化运维

云原生技术实现Devops自动化运维 随着云计算和DevOps理念的普及&#xff0c;云原生技术在自动化运维中的应用日益广泛。本文将探讨云原生技术如何通过容器化、微服务架构、CI/CD流水线等手段&#xff0c;提升DevOps自动化运维的效率和灵活性&#xff0c;并通过案例分析具体应用…

Linux screen命令使用

文章目录 1. 前言2. screen是什么?3. screen使用场景描述3. screen常用命令4. 小结5. 参考 1. 前言 实际开发中用到的云服务器&#xff0c;如果项目使用的是python&#xff0c;需要利用项目运行一些时间较长的项目程序脚本的话&#xff0c;由于我们通过ssh连接远端服务器&…

【面经总结】Java集合 - Map

Map 概述 Map 架构 HashMap 要点 以 散列(哈希表) 方式存储键值对&#xff0c;访问速度快没有顺序性允许使用空值和空键有两个影响其性能的参数&#xff1a;初始容量和负载因子。 初始容量&#xff1a;哈希表创建时的容量负载因子&#xff1a;其容量自动扩容之前被允许的最大…

2024年【山东省安全员A证】考试资料及山东省安全员A证试题及解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 山东省安全员A证考试资料是安全生产模拟考试一点通总题库中生成的一套山东省安全员A证试题及解析&#xff0c;安全生产模拟考试一点通上山东省安全员A证作业手机同步练习。2024年【山东省安全员A证】考试资料及山东省…

黑马程序员Springboot2简单学习笔记

Session是用于存放用户与web服务器之间的会话&#xff0c;即服务器为客户端开辟的存储空间。 文章&#xff1a;lombok Slf4j注解 Slf4j是用作日志输出的&#xff0c;一般会在项目每个类的开头加入该注解 可以配置静态资源的访问路径 这样访问任何的静态资源 但是每个页面都得…

20. mediasoup服务器的布署与使用

Mediasoup Demo部署 架构服务分析 服务端提供3个服务&#xff1a; 1.www服务&#xff0c;浏览器通过访问服务器目录获取客户端代码&#xff0c;通过V8引擎&#xff0c;启动底层WebRTC 2.nodejs提供websocket服务和http服务&#xff0c;用于信令交互 3.Mediasoup C提供的流媒体…