通过Elisabeth Hendrickson's test heuristics cheatsheet,我看到以下建议:
数字:32768(2 ^ 15)32769(2 ^ 15 + 1)65536(2 ^ 16)65537(2 ^ 16 +1)2147483648(2 ^ 31)2147483649(2 ^ 31+ 1)4294967296(2 ^ 32)4294967297(2 ^ 32 + 1)
有人知道测试所有这些案件的原因吗?我的直觉是开发人员可能使用的数据类型(整数,长,双......)
同样,使用字符串:
长(255,256,257,1000,1024,2000,2048或更多字符)
答案 0 :(得分:7)
这些代表边界
<强>整数强>
测试接近公共边界的值测试是否正确处理溢出(在各种整数类型的情况下是算术溢出,或者在长字符串的情况下可能会溢出缓冲区的缓冲区溢出)。
<强>字符串强>
我怀疑像255,256,1000,1024,2000,2048这样的建议是基于经验/观察,一些开发人员可能会分配一个固定大小的缓冲区,他们认为这个缓冲区“无论如何都足够大”并且失败检查输入。这种态度导致buffer overflow attacks。
答案 1 :(得分:3)
这些边界值接近最大签名short
,最大unsigned short
和int
相同。测试它们的原因是发现接近典型数据类型的边界值的错误。
E.g。你的代码使用了签名的short
,并且你有一个测试,它可以在下面运行一些东西,就在这种类型的最大值之上。如果第一个测试通过而第二个测试失败,您可以轻松地告诉short
上的溢出/截断是原因。
答案 2 :(得分:2)
这些数字是围栏两侧的边界情况(+ 1,0和-1),对于“整个和圆形”计算机数字,总是2的幂。那些2的幂也不是随机的并且是表示整数精度的标准选择 - 位宽为8,16,32等。