当前位置:  开发笔记 > 人工智能 > 正文

如何对伪随机数发生器进行单元测试?

如何解决《如何对伪随机数发生器进行单元测试?》经验,为你挑选了3个好方法。

我有一个伪随机数生成器(PRNG)类,我想进行单元测试.有两种方法:

    编写一个测试用例,其中包含大量样本并测试它们是否正确分布.这种方法可能会导致测试用例的执行时间相当长;

    手动计算一小部分样本,并验证PRNG算法是否重现它.这种方法可能导致在不被注意的情况下生成非随机序列;

我会说第一种方法不是真正的单元测试,因为它不执行发生器的白盒测试,但另一方面它正确地测试了类的责任.第二种方法更像是一个真正的单元测试,侧重于算法,但它没有提供足够的证据来证明该类是否履行其职责.

您更喜欢哪种方法?为什么?


Steve Jessop.. 30

获得相同PRNG算法的另一个实现,基于已知种子生成少量冗长的测试用例,并验证您的算法实现是否与其他人的实现相匹配.您测试的数据越多,它的可能性就越大.如果您想要认真,请研究如何对算法进行FIPS验证.

没有必要测试输出是否是随机的,因为其他人对算法的研究比你能够再现的更多.

如果您已经发明了自己的PRNG算法,那么您会遇到一个相当不同的问题,因为除了测试代码之外,您还需要测试新算法.有很多事情要做 - 我认为最重要的是对输出的统计测试,以及其他密码学家的同行评审.但是,基本上,如果你设计的PRNG算法没有足够的知识来知道如何测试它,那么它将是垃圾.



1> Steve Jessop..:

获得相同PRNG算法的另一个实现,基于已知种子生成少量冗长的测试用例,并验证您的算法实现是否与其他人的实现相匹配.您测试的数据越多,它的可能性就越大.如果您想要认真,请研究如何对算法进行FIPS验证.

没有必要测试输出是否是随机的,因为其他人对算法的研究比你能够再现的更多.

如果您已经发明了自己的PRNG算法,那么您会遇到一个相当不同的问题,因为除了测试代码之外,您还需要测试新算法.有很多事情要做 - 我认为最重要的是对输出的统计测试,以及其他密码学家的同行评审.但是,基本上,如果你设计的PRNG算法没有足够的知识来知道如何测试它,那么它将是垃圾.


但是,如果你已经编写了自己的PRNG,那么你没有回答他如何测试它的问题.你刚刚把这个问题写下来并回答了其他问题.

2> Greg Hewgill..:

为了测试PRNG,我会使用ENT,这是一套统计测试,可以告诉你PRNG的表现如何.我想这是方法1.



3> Mark Pattiso..:

我想最终你会想要两个测试 - 因为你想确保以下两个都成立:

(1)数字分布正确,(2)特定算法按预期工作.

也许第一次测试只能偶尔运行,而第二次测试可能用于检查任何代码更改是否都没有破坏算法.

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有