「バグ検出ドリル」の第5回で出題するのは「思い込み」にまつわるバグの問題です。タイトルの「小さな親切、大きなお世話」とは一体何なのでしょうか。問題文から、どこにバグがありそうか見つけ出してみよう!
ソフトウェアのバグは、原因が分かればごく単純なミスがほとんどです。原因が単純であるほど、バグの外部的な現象は不可解で、大混乱しますね。
バグが出た場合、冷静に、そして、システマチックに原因を究明する力を養いましょう。バグを嗅ぎ出す能力を鍛えましょう。今回も、問題文を読んで、どこにバグがあるか推察してください。
問題文に入る前に、今から20年前に体験した不思議なトラブルの話をします。ある朝、会社へ行こうと8時にクルマに乗り込み、キーを回したのですがエンジンがかかりません。前日はクルマに何の問題もなく夜の8時に帰宅しました。
「昨夜8時から今朝8時の12時間で何があったのだろう? 今日は午後1時からプロジェクトの進捗会議があるので、早く原因を見つけて会社へ行かなきゃ」と焦りました(大事な用事がある時に限って、トラブルが起きます。いわゆる、「マーフィーの法則」ですね)。
ヘッドランプは点灯するし、セルモーターも動いているので、バッテリーは問題ない、オイルも漏れていない……と1つずつチェックして原因を探ろうとするのですが、気が焦るばかりで全く見当がつかず、時間だけが過ぎていきます。エンジンの深い部分が故障していたら、手に負えません。
30分、格闘した結果、自力解決は諦め、修理工場に電話してメカニックに来てもらいました。エンジニアが到着して30秒で原因が判明しました。ガス欠です。さすが、プロはトラブルシューティングの手順表を持っていて、それに従って「バグ」を一瞬で見つけたのです。「バグ」があまりに単純だったので自分自身に腹が立ちましたが、それと同時に簡単に治ってよかったとも感じ複雑な思いでした。
手品やマジックでも同じで、単純なタネほど、不思議感が大きくなります。今でも印象に残っているのは、目の前でマジシャンが手の平の100円玉を見せ、「これが消えます」と言って手を上げて下ろした瞬間、100円玉が消えたことです。マジシャンは、指を開いて見せて得意そう。マジシャンはTシャツ姿なので、袖の中へ隠すことはできません。もう一度、手を上げ下げすると100円玉が現れました。不思議でたまりません。
あとでタネ明かしをしてくれたのですが、手を上げた瞬間、100円玉を自然な動作で側頭部(額の右側)に貼り付けていたのです。「なんだ、そんなことか」と拍子抜けしたのですが、この時から、「手品はタネではなく見せ方が重要」と思うようになりました。
それでは次ページに問題を示します。5分程度考えて分からない場合、自身の環境で実行することをお勧めします。実行すると、不思議な部分が必ず見つかるはずです。なお、本シリーズのプログラムは、全て「Visual Studio2010」コンソールアプリケーションで実行を確認したものを使用しています。
Copyright © ITmedia, Inc. All Rights Reserved.