Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用HyperLogLog对代码进行可靠的集成测试?

使用HyperLogLog对代码进行可靠的集成测试?
EN

Stack Overflow用户
提问于 2016-11-03 07:59:21
回答 1查看 157关注 0票数 5

我们使用的是Twitter在Algebird中实现的HyperLogLog。在我们的系统中给出一个数字N和一个使用HyperLogLog估计逐渐增长的集合的当前大小并测试它是否大于或小于N的检查,如果我们调用HyperLogLog的代码是正确的,我们如何编写一个集成或系统测试来测试这个检查并且几乎可以保证通过呢?测试中的系统是不确定的,因为首先,它是多线程的。

我的第一个想法是,写一个对这个用例来说可靠的集成测试的正确方法是“降低我们的标准”。那么,什么是足够数量的项目(M)发布到一个端点,以确保HyperLogLog将估计项目总数大于N,概率为>= 0.999999?

还是有更好的方法?

标准的误差界是可配置的,但这并不能直接告诉我们我们可能偶尔会看到的最大误差界--这就是我所关心的,以避免在master上随机失败的CI构建导致浪费时间和拉扯头发!

我还担心,我们在测试中生成随机数据的方式可能不会在相关方面生成均匀分布的随机数据,这可能会对概率计算产生重大影响。

EN

回答 1

Stack Overflow用户

发布于 2016-11-05 09:35:33

让我们把这个问题分解一下。您要测试的主要行为有两种:

  1. 推特HyperLogLog实现可以正确执行,即它可以很好地估计项目的数量。
  2. 使用HyperLogLog结构(例如计数器)的代码会在适当的时候递增它们。

请注意,行为#2很容易在构建时使用单元测试测试,而不是使用集成测试。这是可取的,并将捕获大多数问题。

案例#1也可以分为三个案例:

A、当项数为0时;

B,当项目数量较少时(5、100或1000);

C,当项目数量很大时(数百万/数十亿)。

同样,案例A和B可以也应该在构建时使用单元测试进行测试。您应该根据您的应用程序决定可接受的误差范围,并让‘t断言估计值在这些范围内-选择HyperLogLog作为底层估计方法并不重要,测试应该将估计器视为黑盒。大致上,我会说10%的误差对于大多数目的来说是合理的,但这实际上取决于您的特定应用程序。这些界限应该代表您的应用程序所能承受的最差精度。例如,严重错误的计数器可能根本无法容忍任何估计错误,因此使用HyperLogLog会破坏单元测试。一个计数不同用户数量的计数器可能会有高达50%的估计误差--这取决于你。

因此,这给我们留下了最后一个用例测试,即HyperLogLog实现为大量项目提供了一个很好的估计。这是不可能在构建时测试的,实际上集成测试是可行的。然而,根据你对推特的HyperLogLog实现的信任程度,你可能会考虑不完全测试它-推特应该已经这样做了。这看起来像是打破了最佳实践,但考虑到可能与集成测试相关的开销,在您的案例中可能是值得的。

如果您选择编写集成测试,您将需要对生产中预期的流量进行建模,并从多个来源生成流量,因为您将生成数百万/数十亿的请求。您可以保存实际生产流量的样本并将其用于测试(可能是最准确的方法),或者计算出您的流量是什么样子并生成类似的测试流量。同样,应该根据应用程序选择误差范围,并且您应该能够在不破坏测试的情况下将估计方法替换为更好的方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40396415

复制
相关文章
如何使用Frelatage对Python代码进行模糊测试
Frelatage是一款基于覆盖率的Python模糊测试工具,在该工具的帮助下,广大研究人员可以轻松对Python代码进行模糊测试。
FB客服
2022/06/08
1.8K0
如何使用Frelatage对Python代码进行模糊测试
使用WireMock进行更好的集成测试
无论您是遵循传统的测试金字塔还是采用诸如“测试蜂窝”这样的较新方法,都应该在开发过程中的某个时候开始编写集成测试用例。您可以编写不同类型的集成测试。从持久性测试开始,您可以检查组件之间的交互,也可以模拟调用外部服务。本文将讨论后一种情况。在谈论WireMock之前,让我们从一个典型的例子开始。
FunTester
2019/12/09
2.5K0
使用WireMock进行更好的集成测试
使用 monkey 对 App 进行压力测试
monkey 是 Android 中的一个命令行工具,由 java 编写,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对 APP 进行压力测试。
顾翔
2020/09/23
1.9K0
使用 monkey 对 App 进行压力测试
使用 Go 对 Nginx 进行性能测试
目前有很多提供Go语言HTTP应用服务的方法,但其中最好的选择取决于每个应用的实际情况。目前,Nginx看起来是每个新项目的标准Web服务器,即使在有其他许多不错Web服务器的情况下。然而,在Nginx上提供Go应用服务的开销是多少呢?我们需要一些nginx的特性参数(vhosts,负载均衡,缓存,等等)或者直接使用Go提供服务?如果你需要nginx,最快的连接机制是什么?这就是在这我试图回答的问题。该基准测试的目的不是要验证Go比nginx的快或慢。那将会很愚蠢。
星哥玩云
2022/06/28
8130
使用JMeter对WebService进行压力测试
现实项目中我们使用了JMeter对WebService进行了压力测试,Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试。
星哥玩云
2022/07/03
1.7K0
使用pgbench对PostgreSQL进行基准测试
TPC-C是经典的衡量在线事务处理(OLTP)系统性能和可伸缩性的基准测试规范。常见的开源数据库的基准测试工具有benchmarksql、 sysbench等,PostgreSQL自带运行基准测试的简单程序pgbench。pgbench是一个类TPC-B 的基准测试工具,可以执行内置的测试脚本,也可以自定义脚本文件。
姚远OracleACE
2023/09/06
1.1K0
使用pgbench对PostgreSQL进行基准测试
使用sysbench对MySQL进行压力测试
​出自percona公司,是一款多线程系统压测工具,可以根据影响数据库服务器性能的各种因素来评估系统的性能。例如,可以用来测试文件IO,操作系统调度器,内存分配和传输速度,POSIX线程以及数据库服务器等。sysbench支持Lua脚本语言,Lua对各种测试场景的设置可以非常灵活。sysbench支持MySQL,操作系统和硬件的测试。
星哥玩云
2022/08/16
2.8K0
使用sysbench对MySQL进行压力测试
如何对机器学习代码进行单元测试?
本文介绍了一种用于机器学习代码的单元测试方法,通过生成数据输入、模型推理、损失计算和优化等步骤,来确保每个组件只在一个步骤中起作用。作者还提供了相应的测试用例和代码示例,以帮助读者更好地理解单元测试的实现过程。同时,作者也提醒读者,单元测试并非万能的,需要结合其他测试方法来全面评估机器学习代码的性能和正确性。
企鹅号小编
2018/01/09
2.5K0
如何对机器学习代码进行单元测试?
使用ab命令对网站进行压力测试
这是apache自带的一个网站压力测试工具,是ApacheBench的缩写,我们可以使用这个工具来对我们的网站进行压力测试
用户5807183
2019/09/16
2K0
Docker Compose进行集成测试
集成测试通常是一项困难的活动,特别是在涉及到分布式系统时。即便正在构建单体应用,也可能需要启动数据库,来进行集成测试。这种事情在早期很容易做到,但随着代码库的增加,难度将呈指数级增长。值得庆幸的是,Docker Compose 使我们能够在运行 Docker 的任何环境中,进行集成测试。
小阑本阑
2023/07/12
2730
Docker Compose进行集成测试
如何对集成树进行解释?
集成树(tree-based ensemble learning)中,最有名的就是随机森林树(Random Forest,简称RF)与梯度提升树(Gradient Boosting Trees,简称GBM)。而近年在Kaggle 竞赛平台中最火红的XGBoost 也是基于GBM 所延伸出来的演算法。在解释集成树有三个非常好用的方法: 特征重要度(Feature Importance) 部分相依图(Partial Dependence Plot,简称PDP) 个体条件期望图(Individual Conditional Expectation Plot,简称ICE Plot) 这三个方法属于「事后可解释性(post hoc)」并且「通用于任何一种演算法模型(model-agnostic)」。
致Great
2020/12/29
1.4K0
Go语言使用gorm对MySQL进行性能测试
之前写过了Go语言gorm框架MySQL实践,其中对gorm框架在操作MySQL的各种基础实践,下面分享一下如何使用gorm框架对MySQL直接进行性能测试的简单实践。
FunTester
2022/04/01
1.1K0
使用 cURL 对Web请求进行性能测试
在做 Web 开发的时候,经常需要对 Web Page 或者 REST-ful API 做简单的 Benchmark。本文将介绍如何使用 cURL 进行简单快速的性能评测。本文内容分为以下两部分:
Debian中国
2018/12/21
2.9K0
如何使用GraphQLmap对GraphQL节点进行渗透测试
GraphQLmap是一个可以跟GraphQL节点交互的脚本引擎,广大研究人员可以使用GraphQLmap来针对GraphQL节点进行渗透测试和安全研究。
FB客服
2021/07/02
1.9K0
使用微信测试账号对网页进行授权
如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。我们在进行公众号网页开发的时候,想要获取用户的基本信息,首先得获取到access_token,从access_token里我们要拿出用户的openid来作为用户在我们系统中的唯一标识,以及通过openid可以保证该用户的只能访问到与其openid相对应的数据,防止越权漏洞。因此,我们需要对网页进行授权,否则是无法在获取到用户的openid的。
端碗吹水
2020/09/23
4.2K0
使用微信测试账号对网页进行授权
Redis 如何使用HyperLogLog
Redis 在 2.8.9 版本添加了 HyperLogLog 数据结构,用来做基数统计,其优点是在输入元素的数量非常大时,计算基数所需的空间比较小并且一般比较恒定。
smartsi
2019/12/02
7830
点击加载更多

相似问题

使用"helm测试“对部署的服务进行集成测试

20

如何对spring集成dsl代码进行单元测试

10

如何测试Hyperloglog的实现?

10

用于Spring集成测试的可靠库

10

如何对程序的ANSI转义代码行为进行单元/集成测试?

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文