为什么要测试这些数字(2 ^ 16,2 ^ 31 ......)

use*_*054 6 string testing integer numbers long-integer

通过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)

有人知道测试所有这些案件的原因吗?我的直觉是开发人员可能使用的数据类型(整数,长,双...)

同样,使用字符串:

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

Eri*_* J. 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这样的建议是基于经验/观察,一些开发人员可能会分配一个固定大小的缓冲区,他们觉得这个缓冲区"无论如何都足够大"并且无法检查输入.这种态度会导致缓冲区溢出攻击.