ソフトウェア技術者のためのバグ百科事典(16)青海青梅問題もビックリ、勘違いが原因のバグ山浦恒央の“くみこみ”な話(137)(2/3 ページ)

» 2021年01月19日 10時00分 公開
※本記事はアフィリエイトプログラムによる収益を得ています

4.ソフトウェア開発における勘違いの例

 あらゆるバグの原因が勘違いとつながっており、全てを紹介しきれません。その中で、筆者が思い付く勘違いの例を以下に示します。

4.1 実装抜け

 コードを実装したと勘違いし、デバッグフェーズでバグが見つかることがあります。人によっては、「そんなバグは起こさない」と思う人もいるでしょうが、筆者は何回も目にしています。この原因の1つが、実装したつもりと勘違いしてしまうことです。

4.2 仕様の勘違い

 仕様を勘違いすることも危険です。例えば、ひとたび、「送信バッファーのサイズは100KB」と思い込むと、本当は50KBでも、「自分で気付く」「他人から指摘を受ける」ということがない限り気付きません。

 コーディングフェーズを考えます。プログラマーが仕様を勘違いすると、勘違いしたまま実装します。結果として、デバッグやテストフェーズで期待値と一致せず、バグとなって現れます。

 他にも意外とよくあるのが、仕様変更があった場合です。昔のドキュメントには、「100ms間隔の割り込み」と書いてあるのに、最新版では、「50ms間隔の割り込み」のように変更が入っている可能性があります。その場合、その人の頭の中は古い情報のままかもしれません。

4.3 単位を勘違いする

 ソフトウェア開発では、成果物に根付いたさまざまな単位が登場します。例えば、「ラジアンと度数を勘違いする」「UTC(協定世界時)とJST(日本標準時)を勘違いしてログを見ていた」などがありますね。変換ミスに気付き、「時間を無駄にした……」と落胆することも少なくありません。

 UTCとJSTの勘違いは筆者もやったことがあります。昔、顧客から、「12月22日の7時にWebサイトが非常に遅くなるのですが」と連絡を受けました。サーバログの7時を確認したのですが、正常に稼働しており、手掛かりはありません。

 よく見ると、サーバログがUTC時刻だったことに気付きました。JSTはUTCより9時間進んでいるので、顧客が求めるJSTにおける12月22日7時のサーバログは、UTCに変換して12月21日22時を見る必要があったのです。

4.4 経験が邪魔をする

 過去の経験が勘違いの元となることも少なくありません。例えば、同種の機器を使用したことがある場合です。「前回と同じ実装方法にしたが、いざ実機が届くと違う仕様だった」などは要注意でしょう。このように、昔の経験が原因で勘違いを引き起こすことに注意しましょう。

 筆者も同様の経験があります。昔、ハードウェアとソフトウェアを並行で開発しているプロジェクトがありました。ハードウェアの現物はないので、仕様を頼りにソフトウェアを作るしかありません。筆者が仕様を確認したところ、幾つか抜けがあるように思い、先輩エンジニアに相談しました。その結果、「ここはこんな感じでやるのが普通なんだよ」と言われました。

 「それが普通ならば」と疑問を感じながらも実装し、ハードウェアと一緒にテストしたところ、「普通」と言われた部分が違っていました。つまり、先輩は過去の経験から、「自信満々の勘違い」をしていたのです。

Copyright © ITmedia, Inc. All Rights Reserved.