我们在 Algebird 中使用 Twitter 的 HyperLogLog 实现。给定一个数字 N 和我们系统中的一个检查,它使用 HyperLogLog 来估计逐渐增长的集合的当前大小并测试它是否大于或小于 N,我们如何编写一个集成或系统测试来测试这个检查并且是几乎可以保证通过,如果我们调用 HyperLogLog 的代码是正确的?被测系统是不确定的,因为一方面它是多线程的。
我的第一个想法是,为这个用例编写可靠的集成测试的正确方法是“放弃我们的标准”。那么要发布到端点以确保 HyperLogLog 将估计项目总数大于 N 的项目总数(M)是多少,并且概率 >= 0.999999?
还是有更好的方法?
标准错误范围是可配置的,但这并不能直接告诉我们有时可能会看到的最大错误范围 - 这是我关心的,以避免在 master 上随机失败的 CI 构建导致浪费时间和头发-拉!
我还担心我们在测试中生成随机数据的方式可能不会在相关方面生成均匀分布的随机数据,这可能会对概率计算产生重大影响。