测试概率函数

sti*_*mms 10 testing tdd unit-testing shuffle probability

我需要一个以随机顺序返回数组的函数.我想确保它是随机的,但我不知道如何编写测试来确保数组真的是随机的.我可以多次运行代码,看看我是否多次使用相同的答案.虽然大型阵列不太可能发生碰撞,但很可能是小型阵列(比如说两个元素).

我该怎么办呢?

Jon*_*ker 5

基本上,技巧是从您正在测试的类中提取随机性。这将允许您通过注入测试中的随机性公式来测试该类,这当然根本不是随机的。

C# 示例:

public static List<int> Randomise(List<int> list, Func<bool> randomSwap)
{
    foreach(int i in list)
    {
        if (randomSwap)
        {
            //swap i and i+1;
        }
    }
    return list;
}
Run Code Online (Sandbox Code Playgroud)

伪用法:

list = Randomise(list, return new Random(0, 1));
Run Code Online (Sandbox Code Playgroud)


Rya*_*yan 5

Cedric建议一种方法,您可以运行该函数足够的时间以获取具有统计意义的样本并验证样本的属性。

因此,对于改组,您可能需要验证元素之间的关系具有非常小的协方差,每个元素的预期位置为N / 2,依此类推。

  • 同一枚硬币连续翻转100次的概率约为8 * 10 ^ -31。相比之下,硬盘驱动器发生未检测到的位翻转错误的可能性为3 * 10 ^ -8。所以,是的,我想出于所有实际目的不会获得该结果:-) (2认同)