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)

これらすべてのケースをテストする理由を誰かが知っていますか? 私の直感は、開発者が使用した可能性のあるデータ型 (integer、long、double...) に当てはまります。

同様に、 Strings の場合:

Long (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。それらをテストする理由は、典型的なデータ型の境界値の近くで発生するバグを見つけるためです。

たとえば、コードで signedshortを使用していて、そのような型の最大値のすぐ下とすぐ上で何かを実行するテストがあります。short最初のテストが成功し、2 番目のテストが失敗した場合、オーバーフロー/切り捨てが理由であることが簡単にわかります。

于 2012-08-14T16:05:42.393 に答える
2

これらの数値は、フェンスの両側 (+1、0、および -1) の境界ケース (+1、0、および -1) であり、常に 2 のべき乗である「丸めた」コンピューター数値です。これらの 2 のべき乗もランダムではなく、標準的な選択肢を表しています。整数精度 - 8、16、32 などのビット幅。

于 2012-08-14T16:06:41.257 に答える