42. バグの出し方のコツ その③
境界値
テストの初心者を抜けた後、だいたい最初から2番目に聞くキーワードがコレ。
「境界値」(境界値の前に聞くであろう最初の言葉は「同値」)
探索的テストの時にもお世話になるし、テスト設計の時は境界値が基本的なテスト観点として入ってくるという、テストする人のお友達のようなワードだ。
境界値の説明。
例えば映画館のシステムを想像してみよう。
- 3歳未満は無料
- 3歳以上60歳未満は通常料金
- 60歳以上は20%割引
この時「ちょうど境目」の部分に着目すると…
こんな感じ。(同値の説明はそのうちテスターちゃんでやる予定w)
-1歳は忘れられがちだけど、フリーの入力フォームの時は気を付けよう
(あとユニットテストのケース書くときとか)
今回はデータの存在なし(0件)、データが存在(1件)も境目という事で、このキーワードに加えさせてもらった。
境界値は基本的に数字の境目で紹介されるが、経験上「データの有無」もとてもバグが出やすかったりする。
見えない境界値
仕様書に書かれていない数字の境目もシステムには存在するゾ!
マンガでも紹介している通り、IT系の知識がないと発想にすら至らない境界値だ!
int型
int型32bitの場合、符号付きで最大値は2,147,483,647である
(最上位bitが符号として使われるため、 0111,1111,1111,1111,1111,1111,1111,1111b = 0x7FFFFFFF = 2147483647)
最後のbitは符号(+,-)をあらわすために使われるんだ。
ちなみに符号なし(unsigned)になると符号部分のbitも使うので0 ~ 4,294,967,295になる
これがint64になるとこう。
– 9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
桁の単位がわかりません(爆
さて。
「21億とか誰も数字いれないって不要っしょ無駄っしょ」
という人もいるけど、お金関係は企業系は余裕でいく。
あとゲームのスコアなんかも余裕でいく(作者はその昔縦シューティングをやりまくっていたけど億単位のスコアは普通な感じになっていた)
お金関係でオーバーフロー(最大値を超えると上位bitが1になってマイナスになる)をやらかした日には正直目も当てられないというか、超大変な目に合いそう。
UNIXタイム
unix timeのお話。
1970年の1月1日の0時(UTC)から秒でカウントしようぜーという取り決め。
どうしてこの時間にしたかはわからないけど、きっとフィーリングだと思う(ぉぃ
(興味ある人は自分で調べてみよう)
なのでUNIXTIMEで1970年以前を扱うと死んだりするゾ!
ちなみにNTP(Network Time Protocol)なんかは1900年1月1日0時0分0秒から符号なし整数で積算されている。
あと、今はunixタイムの「time_t型」も64bitになってきているけど、32bit整数型のもいる。
こうなると上で述べたintの最大値に引っかかり、2147483647秒が最大値となる。
その年が2038年1月19日12時14分7秒(UTC)である。
これは2038年問題と呼ばれていたり。
なんとなくこの年が近づいてきたら
「実はノストラダムスが予言していたのは2038年だったんだ!!」
「なんだってー!!」
で、なんやかんやで人類滅亡!
と、某人々がやってそうな気がしている。
赤坂美月
このネタをわかってくれる人がいるかはわからない!けどそれでいい!(爆
3コマ目は「ダブルキャスト」のジェノサイドエンドのオマージュ。
選択肢を変えるだけで全然ちがうシナリオが展開されたりと、今考えてもすごい。
(全然違うシナリオを用意するのは本当に大変だ!)
ちなみに作者はちょうど思春期に入るあたりでダブルキャストにそれはもうヤバイくらいハマっていた。
大学生になったらきっとこんな彼女と同棲しちゃって!
みたいなことをモンモンと考えていた。
これ。サスペンス作品。
なのでこんな彼女と同棲していたら命がいくらあっても足りないだろう。
ちなみにいまだにキャラデザをすると、このキャラに引っ張られることがあるのだヨ……。