如何测试某物是否随机?或者“足够随机”?

8 投票
5 回答
16905 浏览
提问于 2025-04-16 08:54

我需要从我的数据库中随机返回一条记录。

我写了一个函数,因为我在用Python的random模块,所以我觉得应该没问题,除非我用错了。

现在,我该怎么写一个单元测试来检查这个函数是否有效呢?毕竟,如果返回的是一个好的随机值,你永远也无法确定。

我并不是过于担心,我的函数并不复杂,而且Python的标准库在这方面已经足够好,不需要担心。我并不是在做加密或者其他重要的事情。我只是好奇有没有什么方法可以做到这一点。

5 个回答

2

你遇到了两个纠结的问题。第一个问题是测试你的随机选择是否有效。给你的伪随机数生成器(PRNG)设置种子,可以让你写出一个确定性的测试,这样你就可以对测试结果有信心。这会让你对你的代码更有信心,前提是底层的函数能正常工作(也就是说,随机函数能给你提供足够好的随机值流)。

第二个问题是你对Python的随机函数有些担心。你想把你代码的逻辑和随机函数的担忧分开。其实有很多随机性测试可以了解一下,但总的来说,除非你在做加密相关的事情,我觉得可以相信Python的开发者已经把这个做得差不多了。

10

其实你很难直接判断(看看这张漫画)。

不过,你可以测量一下你生成的样本的,然后把这个结果和你预期的熵进行对比。之前提到过,random.org 提供了一些非常聪明的测试方法。

alt text

21

RANDOM.ORG网站上,有几个统计测试可以用来检查随机性。你可以查看那篇文章的最后两个部分。

另外,如果你能找到一本叫做Beautiful Testing的书,其中有一整章是John D. Cook写的,标题是测试随机数生成器。他详细解释了上面文章中提到的许多统计方法。如果你真的想了解随机数生成器,这一章是个很好的入门点。我自己也写过相关内容,但John的解释要清晰得多。

撰写回答