技術とか戦略とか

IT技術者が技術や戦略について書くブログです。

あるあるバグ事例:幅を持たせた条件指定の狭間に落ちるケース

コーディングをしていて表題のようなケースでバグになったことがあるのを思い出したので、注意喚起ということで紹介します。
有効桁数の考慮不足等で境界値の条件指定が完全にカバーされていないと、境界値付近のデータが来た時にどの条件にも当てはまらずに素通りしてしまうことがあります。
 
例えば、株価に応じて処理を変える必要がある場面において、以下のような条件指定をしたとします。
・株価が1円以上100円以下の場合、~
・株価が101円以上1000円以下の場合、~
・株価が1001円以上10000円以下の場合、~
 
一見問題のない条件指定に見えます。
しかし、株価が整数だとはどこにも書かれていません。
そして、株価は小数点第一位まで入ることがあります。
そのため、この条件指定では、100.1円のような株価が来た場合に、どの条件にも当てはまらずに異常な挙動を示すことになります。
 
なお、有効桁数ギリギリを突くケースで境界値テストを行っていれば防げる事例です。
金額の計算を行う金融系だとあるあるのバグなので、境界値付近の仕様には細心の注意を払う必要があります。