バグ検出ドリル(18)IoT時代だからこそ重要、単純でも検出が難しい通信系バグ:山浦恒央の“くみこみ”な話(118)(1/4 ページ)
バグは至るところに、しかも堂々と潜んでおり、自信満々なプログラマーほど、目の前のバグに気付かないものです。「バグ検出ドリル」の第18回の問題は、相互に通信する機器のソフトウェアのバグです。IoT時代を迎えて利用場面が増えている、通信系のバグを見つけ出しましょう!
1.はじめに
本連載では、エンジニアのバグ検出力の向上を目指し、バグ入りの問題を出題して読者のみなさんに見つけていただいています。気楽な気持ちで問題に取り組んでいただき、より良いソフト開発につなげてください。
2.近年の組み込み系製品
近年のIT技術の発達により、複数の機器が相互に通信するソフトウェアが多くなりました。例えば、最近の洗濯機やエアコンなどの家電製品は、携帯電話機から指令を送り、動作させることができます。今後、IoT(モノのインターネット)により、あらゆる電化製品がつながり、より便利な世の中になるでしょう※1)。
※1)インターネットのIPアドレスは、昔は32ビットしかなく、43億しか識別できませんでした。世界の人口が70億であることを考えると、圧倒的に数が足りません。そこで、IPアドレスの32ビットの中を分割したり、ネットマスクを使って内部のデータを可変長化したりなど、涙ぐましい努力をしてきましたが、やはり、「足りないものは足りない」のです。そこで、一挙にIPアドレスを128ビットに拡張しました。2の128乗=340澗(かん)です。これは、1兆×1兆×1兆より大きく、実質的に無限大です。これにより、例えば、世界中の蛍光灯の1本1本にまでIPアドレスを割当てることが可能になり、集中制御できるようになりました。32ビットから128ビットへ拡張する大胆な決断により、今のIoTがあります。IoTという言葉がかけらもなかった1992年の決断です。
複数の製品がつながることは、ユーザーには大きなメリットがありますが、実装するエンジニアの作業量は大きく増えます。便利になる分、誰かが苦労を負担しなければなりません※2)。例えば、携帯電話機からエアコンを動作する製品を開発する場合、従来は、エアコン単体だけを考えればよかったのですが、今度は携帯電話機も組み合わせるため、通信機能の追加や組み合わせをテストする必要がありますね。
※2)例えば、プログラミングで「put student_data(i)」と書けば、student_dataがどんな媒体のどの位置にあるかを知らなくても、ちゃんと書き出せます。これは、OSの入出力制御がものすごく頑張って複雑な処理をし、出力するデータの論理アドレスを物理アドレスに変換して、書き込んでくれているからです。便利になる背後には、便利な分だけ苦労しているソフトウェア(プログラム開発者)があります。
製品同士の通信をやりとりする手法には「ソケット通信」と呼ぶ方法があります。ソケット通信とは、「複数のアプリケーション間でデータをやりとりする手法」で、組み込み系ソフトでよく使います。そこで今回は、通信をするプログラムを題材とした問題を出題します。
今回のプログラムは、過去2回に出題した音楽プレーヤーを「クライアント」と「サーバ」に分割し、お互いに通信をします。そのプログラムの実行結果がうまくいかない原因を推察してください。バグの原因は単純ですが、プログラムの行数は多いので、少し苦労するかもしれません。プログラムのステップ数は合計で240LOCです。日常のプログラム開発なら、書くのに2時間、読むのに1時間といったところでしょう。少し長めの、しかも、他人が書いたプログラムのデバッグの練習をしてみてください。
バグの原因が非常に複雑に見えても、原因が分かってしまえば、「当たり前のこと」ですね。マジシャンの手品と変わりません。マジシャンが「超能力です」と言いながら、トランプのカードが瞬間移動したり、破ったものが元に戻ったりします。タネが分からない私達から見ると、超能力に見えますが、超常現象はあり得ません。必ず仕掛けがあります※3)。
※3)マジックのタネは、分かってしまえば非常に単純で、「簡単でつまらない」と思う人が多数います。しかし、指や腕の自然な動作の流れにタネをうまく入れ、また、心理的に観客をミスリードする動作や話術にはプロの熟練した技術が必要です。カードマジックの古典で基本でもあるアンビシャスカード(観客が選んだカードを中ほどに入れてシャッフルすると、そのカードが一番上に移動する)、トライアンフ(カードの裏表をバラバラにシャッフルしたのに、元の裏に戻り、観客が選んだカードだけ表向きになる)も、タネは世界中の動画で解説していますが、実演は簡単ではありません。「マジックのタネを知っている」と「マジックができる」は別物で、「知識」と「技術」は違います。その意味でも、このデバッグドリルで、「デバッグの知識」ではなく「デバッグの技術」を磨いていただければと思います。
本コラムでも同じように、難しそうに見えたとしても、解答を見れば、「くだらない。そんな単純なバグを作るわけはないよ」と思う問題ばかりです。ぜひ、読み進めて、自分の感情の変化も合わせて感じていただければと思います。
Copyright © ITmedia, Inc. All Rights Reserved.