大型测试(系统测试)和它的问题(片状测试)

大型测试(系统测试)和它的问题(片状测试)

更大的测试
即使有模拟,单元测试也不能满足我们所有的需求。
为了检查我们的代码与其他代码的行为——或者我们的代码需要使用的外部服务,集成测试是必要的。然而,为了测试整个软件,我们需要系统测试。 我们可能想要编写更大的测试还有许多其他原因。

Why Write Larger Tests?
(1) Fidelity
(2) Unfaithful Doubles
(3) Configuration Issues
(4) Issues that arise under load
(5) Unanticipated behaviours, inputs and side effects
(6) Emergent Behaviours

保真度Fidelity——环境的现实主义
保真度是测试反映被测系统真实行为的属性。
设想保真度的一种方法是根据环境:
• 单元测试捆绑了一个测试和一小部分代码一起作为一个可运行的单元,确保代码被测试,但与生产代码的运行方式有很大不同。
• 生产是测试中保真度最高的环境,但是不应该在那里进行测试! 最好的选择是系统的阶段版本,即系统在其实际无需使用(或丢失)真实数据。
测试也可以根据测试的忠实程度来衡量内容是真实的。
许多手工测试被工程师驳回,如果测试数据本身看起来不现实。
从生产中复制的测试数据更忠实于现实,就这样被俘虏了。
一个很大的挑战是如何在启动新代码之前创建逼真的测试流量.

Unfaithful Doubles
Doubles并不完全复制他们正在加倍的东西。这可能会导致单元测试出现漏洞。
此外,doubles和他们的原件可能会变得不同步,特别是原始级的作者是否也不负责double。

配置问题Configuration Issues
单元测试无法测试与整体相关的配置问题系统。
在谷歌,配置更改是公司经历的许多重大中断的首要原因。
2013 年,谷歌全球停电,原因是一个糟糕的推送了从未测试过的网络配置。

仅在负载下出现的问题Issues that Only Arise Under Load
单元测试无法检查系统性能,尤其是它在极端负载下的性能(这称为压力测试)。
大容量! 每秒通常有数千或数百万个查询。

意外的行为、输入和副作用Unanticipated behaviours, inputs
and side effects

单元测试受限于编写它们的工程师的想象力!
用户在产品中发现的问题大多是意料之外的(否则他们会被测试!)
这就是自动化测试技术(和人工智能)变得有用的地方——for example, fuzzing.

紧急行为Emergent Behaviours
单元测试仅限于它们涵盖的范围,因此如果行为更改超出此范围,则无法检测到。
而且因为单元测试被设计成快速可靠的,它们有意消除了真实依赖、网络和数据的混乱。单元测试就像理论物理学中的问题,隐藏在真空中,巧妙地隐藏在现实世界的混乱中。这对速度和可靠性非常有用——但会遗漏某些类型的缺陷。

这些理由并不是说“不要做单元测试”,而是应该使用更大的测试来补充单元测试。

某些类型的系统测试

浏览器和设备测试Browser and Device Testing
浏览器和设备各不相同,通常会决定用户的交互方式
与应用程序。例如,在给定屏幕尺寸的情况下,可以呈现什么/多少内容。
掌握所有这些版本的设备可能会出现问题——导致建立公共设备库。

性能、负载和压力测试Performance, Load and Stress Testing
这些测试对于确保版本之间的性能不会下降以及系统可以处理预期的流量高峰至关重要。

部署配置测试Deployment Configuration Testing
通常,缺陷的根源不是代码,而是配置:
• 数据文件
• 数据库
• 选项定义
更大的测试可以测试这些东西,因为配置文件是在产品二进制文件启动期间读取的。
这些测试通常是系统的冒烟测试,不需要太多额外的测试数据或通过断言进行验证:如果系统成功启动,则测试通过!

冒烟测试是指对系统或软件应用程序执行的初步和基本级别的测试。 冒烟测试的主要目的是快速确定系统或软件是否足够稳定以进行更全面的测试。

典型的冒烟测试场景可能包括:

  1. 验证系统/应用程序是否成功启动。
  2. 检查主要功能是否可访问并按预期工作。
  3. 测试基本的用户交互和输入以确保它们得到正确处理。
  4. 验证与外部系统的关键集成或连接。
  5. 确保重要的系统组件或模块正常运行。
  6. 检查关键数据是否无误地流过系统。

通过进行冒烟测试,测试人员或开发人员可以快速识别可能阻碍进一步测试过程的任何严重问题。 如果系统通过了冒烟测试,则表明它足够稳定,可以进行更全面的测试,例如功能测试、回归测试或性能测试。 如果冒烟测试失败,则表明在继续进行进一步测试之前需要解决一些重大问题。

探索性测试Exploratory Testing
探索性测试是一种手动测试形式,侧重于通过尝试新的和已建立的用户场景来寻找有问题的行为。
训练有素的用户/测试人员与产品交互,寻找通过系统的新路径,这些路径的行为偏离预期或直觉行为 - 或者是否存在安全漏洞。

用户验收测试User Acceptance Testing
单元测试是由开发人员编写的,因此很可能对系统预期行为的误解不仅反映在代码中,还反映在单元测试中。
用户验收测试对系统进行测试,以确保特定用户旅程的整体行为符合预期。
据说这样的测试从“端到端”运行系统并且是有时称为端到端 (E2E) 测试。存在多种框架,例如 Cucumber 和 RSpec,可以使测试以用户友好的语言编写和读取。

灾难恢复Disaster Recovery
这些测试揭示了系统对意外情况的反应有多好, 数据中心火灾、恶意攻击等变化或故障,地震等
系统被移除或拆除以观察实践中发生的事情的影响。
这通常也会考验组织的脆弱性——因为关键决策者可能会突然失去联系。

混沌工程Chaos Engineering
因 Netflix 而流行的混沌工程通过编写模拟实际湍流条件的程序来测试系统的弹性。这些程序引入故障/问题,包括服务器关机、延迟注入和资源耗尽。
这些故障比突变分析引入的故障级别更高、更有针对性

大型测试的问题

较大测试中的脆性Brittleness in Larger Tests
较大的测试也无法避免脆性问题。
回想一下,脆弱性是指测试由于代码的内部更改(重构)而失败,但不影响其外部行为。
例子:
在端到端系统测试中,测试可能与 GUI 元素的名称或其布局过于紧密——这意味着测试失败然后 UI 发生变化。

片状测试Flaky Tests
较大的测试更容易出现片状问题。
不稳定是测试或代码中的非确定性导致测试失败的结果,而实际上它们是有效的(并且不太常见:反之亦然)。
例子:
执行一些需要服务器响应的代码的系统测试。 服务器运行时测试通过,服务器宕机时测试失败。 但是,当测试失败时,代码中没有错误。
单元测试也可能不稳定,但由于它们倾向于关注逻辑而不涉及非确定性元素,因此这种情况不太常见。

片状测试引起的问题
片状测试失败的间歇性让开发人员抓狂,因为片状测试的根源通常很难追踪:问题的症状(失败的测试)通常与非确定性行为的根源相去甚远,尤其是在系统测试中。
但是一旦一个测试套件有几个不稳定的测试,开发人员往往会停止信任它和/或运行它。
片状测试是连续构建失败的常见因素在集成服务器。

问题:
(1) 我测试了一些依赖于星期几的代码。为什么我可能是片状的?
(2) 我测试了一些涉及启动和执行多个线程的代码。 为什么我可能是片状的?
(3) 我测试了一些代码,这些代码依赖于在特定时间范围内执行的某些任务。 为什么我可能是片状的?
(4) 我测试了一些检查最新新闻项目的代码。为什么我可能是片状的?

大型测试的问题
(1) 可靠性Reliability ——较大的测试可能是脆弱的和片状的
(2)速度Speed——较大的测试可能会很慢,打断开发人员的工作流程
(3)所有权Ownership——单元测试有一个所有者,谁负责系统测试?
(4)标准化Standardisation——单元测试有一个标准的框架和形式。 大型测试需要应对不同的基础设施和环境,以及多种相互竞争的工具和框架(其中一些是内部开发的)。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++11之atomic原子操作

atomic介绍 多线程间是通过互斥锁与条件变量来保证共享数据的同步的,互斥锁主要是针对过程加锁来实现对共享资源的排他性访问。很多时候,对共享资源的访问主要是对某一数据结构的读写操作,如果数据结构本身就带有排他性访问的特性&#xff0c…

如何用chatGPT赚钱?

赚钱思路 1)初级-账号 对于新事物的出现,很多人对此都是抱着一个看热闹的态度,大家对于这个东西的整体认知水平是很低的! 所以这个时候的思路就是快速去抢占市场,去各个平台发一些和ChatGPT相关的视频和文章去抢占市…

css、js(vue)进行textarea自适应高度(超详细说明)

文章目录 需求——如下图一、纯css 的自适应高度(有问题,不推荐)1.css代码2. html代码3. 代码截图说明4. 效果和会出现的问题 二、js 的自适应高度0.思路1.代码1. css代码2. html代码3. js代码 2.代码说明3.注意点导致的问题(0&am…

GP05丨多因子IC对冲

量化策略开发,高质量社群,交易思路分享等相关内容 大家好,今天我们分享股票社群第5期量化策略——多因子IC对冲。 在前几期中,我们分享了GP01多因子、ETF轮动策略及Plus版本、网格等等。本期我们继续分享多因子策略。 策略背景与…

【P32】JMeter While 控制器(While Controller)

文章目录 一、While 控制器(While Controller)参数说明二、测试计划设计2.1、变量2.2、函数2.2.1、groovy脚本2.2.2、jex13脚本2.2.3、js脚本 一、While 控制器(While Controller)参数说明 可以对部分逻辑按变量条件进行循环迭代…

CentOS7编译安装Python3.10(含OpenSSL1.1.1安装),创建虚拟环境,运行Django项目(含sqlite版本报错)

文章目录 1、CentOS安装OpenSSL1.1.1(前置环境)2、CentOS安装 Python 3.103、创建虚拟环境4、运行Django项目 1、CentOS安装OpenSSL1.1.1(前置环境) 编译安装Python3.10时需要openssl1.1.1 查看当前版本 & 删除openssl1.0 …

代码随想录算法训练营第三十九天 | 力扣 62.不同路径, 63. 不同路径 II

62.不同路径 题目 62. 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多…

C++数据结构:二叉树之一(数组存储)

文章目录 前言一、二叉树的基本定义二、二叉树的基本性质三、二叉树的存储(数组)总结原创文章,未经许可,禁止转载 前言 树是一种非线性数据结构,它由若干个节点和边组成。每个节点都有一个值,而边则表示节…

day17 - 用形状包围图像

在进行图像轮廓提取时,有的情况下不需要我们提取出精确的轮廓,只要提取出一个接近于轮廓的近似多边形,就可以满足后续的操作。 本期我们来学习如何通过设置参数来找出图像的近似多边形。 完成本期内容,你可以: 了解…

算法基础学习笔记——⑨C++STL使用技巧

✨博主:命运之光 ✨专栏:算法基础学习 目录 ✨CSTL简介 ✨CSTL使用技巧 前言:算法学习笔记记录日常分享,需要的看哈O(∩_∩)O,感谢大家的支持! ✨CSTL简介 vector变长数组,倍增的思想//系统为…

STM32单片机(三)第一节:GPIO输出

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要…

驱动开发:内核读写内存浮点数

如前所述,在前几章内容中笔者简单介绍了内存读写的基本实现方式,这其中包括了CR3切换读写,MDL映射读写,内存拷贝读写,本章将在如前所述的读写函数进一步封装,并以此来实现驱动读写内存浮点数的目的。内存浮…

MyBatis操作数据库表和动态SQL的使用

目录 1.MyBatis开发环境的搭建和测试 2.MyBatis基本操作 2.0 准备工作 2.1 新增操作 2.2 删除、修改、查询操作 2.3 #{param} 和 ${param}的使用和区别 2.4 实体对象属性和数据库字段名称不同时如何映射? 3. MyBatis多表查询 3.0 准备工作 3.1 一对一的表…

ELK企业级日志分析系统

ELK概述 为什么要使用 ELK 日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。 往…

切比雪夫不等式,大数定律及极限定理。

一.切比雪夫不等式 1.定理 若随机变量X的期望EX和方差DX存在,则对任意ε > 0,有   P{ |X - EX| > ε } < DX/ε2 或 P{ |X - EX| < ε } > 1 - DX/ε2 2.解析定理 ①该定理对 X 服从什么分布不做要求&#xff0c;仅EX DX存在即可。 ②“| |” 由于X某次…

软件测试炸了,作为从业者,你做好准备了吗?

软件测试行业已经发生很大变化&#xff0c;你跟上变化了吗&#xff1f; 岗位少不可怕&#xff0c;要求越来越高也不可怕&#xff0c;可怕的是&#xff0c;软件测试行业已经发生巨变&#xff0c;而你却原地踏步&#xff01;目前一线大厂更多倾向于招收测试开发&#xff0c;或者…

自学网络安全(黑客),一般人我劝你还是算了吧

一、自学网络安全学习的误区和陷阱 1.不要试图先成为一名程序员&#xff08;以编程为基础的学习&#xff09;再开始学习 我在之前的回答中&#xff0c;我都一再强调不要以编程为基础再开始学习网络安全&#xff0c;一般来说&#xff0c;学习编程不但学习周期长&#xff0c;而且…

torch.distributed.launch多卡多机

torch.distributed.launch命令介绍 我们在训练分布式时候&#xff0c;会使用到 torch.distributed.launch 可以通过命令&#xff0c;来打印该模块提供的可选参数 python -m torch.distributed.launch --help usage: launch.py [-h] [--nnodes NNODES] [--node_rank NODE_RANK]…

诚迈科技携智达诚远出席高通汽车技术与合作峰会

5月25日至26日&#xff0c;诚迈科技及旗下的智能汽车操作系统及中间件产品提供商智达诚远作为高通生态伙伴&#xff0c;亮相首届“高通汽车技术与合作峰会”&#xff0c;通过产品展示和主题演讲呈现了基于高通骁龙数字底盘的最新智能座舱技术成果&#xff0c;共同展望智能网联汽…

GcExcel v6.1 支持新的 ‘.sjs‘ 模板文件 ‘.xltx‘ 格式 Crack

GrapeCity Documents for Excel (GcExcel) v6.1 版本现已上线&#xff01;该版本支持新的 SpreadJS .sjs 文件格式和 Excel 模板文件 .xltx 格式。此外&#xff0c;GcExcel 支持更多的SpreadJS兼容性功能和对 GcDataViewer 的多项增强。看看下面的主要亮点。 导入/导出 Spread…
最新文章