在处理大型软件项目时,我经常使用模糊测试作为测试用例的一部分,以帮助消除可能仅在输入达到特定大小或形状时才会出现的错误。我最常用的方法是使用与我碰巧使用的编程语言捆绑在一起的标准随机数工具。
最近我开始怀疑,忽略一般模糊测试的优点或缺点,在进行模糊测试时使用非密码安全的伪随机数生成器是否是个好主意。弱随机数生成器经常表现出将它们与真正的随机序列区分开来的模式,即使这些模式并不明显。似乎使用弱 PRNG 的模糊测试可能总是无法触发某些仅在某些情况下出现的潜在错误,因为伪随机数可能以一种永远不会触发这些情况的方式相互关联。
使用弱 PRNG 进行模糊测试是否天生不明智?如果在理论上这样做是不合理的,那么在实践中是否仍然合理?