6

通过Elisabeth Hendrickson 的测试启发式备忘单,我看到了以下建议:

号码: 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)

有人知道测试所有这些案例的原因吗?我的直觉与开发人员可能使用的数据类型有关(整数、长整数、双精度......)

同样,使用 Strings :

(255、256、257、1000、1024、2000、2048 或更多字符)

4

3 回答 3

7

这些代表边界

整数

  • 2^15 在有符号 16 位整数的范围内
  • 2^16 在无符号 16 位整数的范围内
  • 2^31 在有符号 32 位整数的范围内
  • 2^32 在无符号 32 位整数的范围内

测试接近公共边界的值测试是否正确处理了溢出(在各种整数类型的情况下算术溢出,或者在可能会溢出缓冲区的长字符串的情况下缓冲区溢出)。

字符串

  • 255/256 在可以用 8 位表示的数字的范围内
  • 1024 在可以用 10 位表示的数字的范围内
  • 2048 在可以用 11 位表示的数字的范围内

我怀疑诸如 255、256、1000、1024、2000、2048 之类的建议是基于经验/观察,一些开发人员可能会分配一个他们认为“无论如何都足够大”并且无法检查输入的固定大小的缓冲区. 这种态度导致了缓冲区溢出攻击

于 2012-08-14T16:05:35.853 回答
3

这些是接近最大有符号short、最大unsigned short和相同的边界值int。测试它们的原因是发现靠近典型数据类型边界值的错误。

例如,您的代码使用有符号short,并且您有一个测试,该测试恰好低于和高于此类类型的最大值。如果第一个测试通过而第二个测试失败,您可以很容易地判断出溢出/截断short是原因。

于 2012-08-14T16:05:42.393 回答
2

这些数字是围栏两侧的边界案例(+1、0 和 -1),用于“整体和圆形”计算机数字,它们始终是 2 的幂。这些 2 的幂也不是随机的,代表标准选择对于整数精度 - 为 8、16、32 等位宽。

于 2012-08-14T16:06:41.257 回答