Java 如何测试基于散列计算的概率算法

Java 如何测试基于散列计算的概率算法,java,algorithm,unit-testing,hash,Java,Algorithm,Unit Testing,Hash,我正在尝试为负载平衡算法编写测试,其工作原理如下: 当一个节点发生故障时,该算法根据所有其他可用节点的负载计算阈值 然后,它根据端点ID的哈希值分配端点,并将其转换为0到1之间的数字,该数字与先前计算的阈值匹配,以选择分配的节点 这将导致端点根据其负载比例分布在所有可用节点上 问题是,这个模型是概率的 分配给每个节点的端点数量取决于端点的特定ID,这使得我的结果在不同的端点ID集之间不是恒定的。事实上,在我运行这个算法之前,我甚至不知道实际结果会是什么。对于不同的端点ID集以及哈希函数的任何更改

我正在尝试为负载平衡算法编写测试,其工作原理如下:

当一个节点发生故障时,该算法根据所有其他可用节点的负载计算阈值

然后,它根据端点ID的哈希值分配端点,并将其转换为0到1之间的数字,该数字与先前计算的阈值匹配,以选择分配的节点

这将导致端点根据其负载比例分布在所有可用节点上

问题是,这个模型是概率的

分配给每个节点的端点数量取决于端点的特定ID,这使得我的结果在不同的端点ID集之间不是恒定的。事实上,在我运行这个算法之前,我甚至不知道实际结果会是什么。对于不同的端点ID集以及哈希函数的任何更改,结果都会发生变化

起初,我考虑将输入设置为随机的,并测试预期结果是否在某个范围内,但如果输入集碰巧具有未按预期分布的ID,则总是有可能遇到失败


那么我该如何测试这样一个算法呢?

当我遇到同样的概念问题时,我提出了一个类似于你建议的解决方案:定义一个界限,使它以非常高的概率被满足。但这是在个人使用环境中;如果他们谈到测试一个库,我很想看看答案。我不认为我完全遵循了你试图测试的算法,但当我想测试类似的随机事件时,我已经做了(1)执行随机技巧,但要计算一些边界,这样,如果有错误,测试将以高概率失败,如果没有错误,测试将以小于百万分之一的概率错误失败。不能完全从你的算法中分辨出来,但通常要得出这样的界限并不太难。(2) 你可以用一些不同的随机种子来做我在(1)中描述的事情。当你得到通过的测试时,只需对这些种子进行硬编码,这样就不会出现误报。