测试CRC逻辑的最佳方法是什么?

Jos*_*man 5 c java crc functional-testing

如何验证两个CRC实现是否会生成相同的校验和?

我正在寻找一种详尽的实施评估CRC特有的方法.

Rob*_*ian 6

您可以将问题分为边缘情况和随机样本.

边缘情况.CRC输入有两个变量,字节数和每个字节的值.因此,创建0,1和MAX_BYTES的数组,其值范围为0到MAX_BYTE_VALUE.边缘案例套件将是您最有可能想要保留在JUnit套件中的东西.

随机样本.使用上面的范围,在循环中随机生成的字节数组上运行CRC.让循环运行的时间越长,输入的耗尽就越多.如果您的计算能力较低,请考虑将测试部署到EC2.


Ber*_*ard 2

使用相同的输入创建多个单元测试,将两个实现的输出相互比较。

  • 我还将测试至少 256 个“连续”输入(即同一文件,但选择一个字节并将其更改为所有 256 个可能的字节)。 (3认同)
  • @Joe-一系列不同大小的 20-30 个随机输入应该足以证明 CRC 算法产生相同的输出。我从未见过两个实现产生的输出彼此“接近”;相反,即使是微小的差异也会导致输出发生很大的变化。话虽这么说,如果这些是自制的 CRC 实现,且已知不存在错误,那么编码错误可能会给您的测试带来问题。 (2认同)