你如何测试某些东西是随机的?或者“足够随机”?

2024-05-23 16:58:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须从数据库中随机返回一个条目。

我写了一个函数,由于我在Python中使用了random模块,所以除非我用一种愚蠢的方式使用它,否则很可能是这样。

现在,我如何编写一个单元测试来检查这个函数是否工作?毕竟,如果它是一个好的随机值,你永远不会知道。

我不是偏执狂,我的函数没有那么复杂,python标准库是1000 x 时间对我来说足够好了。我不是在做密码学或者什么重要的事情。我只是好奇有没有办法。


Tags: 模块函数数据库标准方式时间条目random
3条回答

你真的看不出来。

但是,您可以测量生成的样本的entropy,并根据期望的熵对其进行测试。正如前面提到的,random.org做了一些非常聪明的测试。

alt text

您可以让单元测试多次调用该函数,并确保冲突的数量相当低。E、 g.如果您的随机结果在1-1000000范围内,请调用函数100次并记录结果;然后检查是否有重复项。如果有任何碰撞(或超过1次碰撞,取决于您对错误测试失败的恐惧程度),测试将失败。 显然不是完美的,但是如果你的随机数是来自Dilbert: http://www.random.org/analysis/

RANDOM.ORG for testing randomness上列出了几个统计测试。请参阅链接文章的最后两部分。

另外,如果你能得到Beautiful Testing的副本,那么John D. Cook有一整章叫做测试随机数生成器。他解释了上面文章中列出的许多统计方法。如果你真的想了解RNGs,那一章是一个很好的起点。我自己也写过这方面的文章,但约翰在解释这方面做得更好。

相关问题 更多 >