ソフトウェア技術者に向けて、バグに関する基礎知識をまとめていく新シリーズ「バグ百科事典」。第19回は、複雑怪奇になりがちな通信系プログラムのバグを紹介します。
バグ百科事典では、筆者が気になったバグを紹介し、読者の皆さまに「バグの早期発見」と「バグの未然防止」に役立てていただくものです。
本シリーズも第19回目を数え、バグに対する勘が身に付いてきたことと思います。今回は、通信系プログラムのバグを取り上げます。
離れた人とコミュニケーションを取るためには、通信技術が必要不可欠です。例えば、友人の近況を知りたい場合は、電話、メールなどを使用します。
電話が登場する前の主要な伝達手段は手紙でした。例えば、ハガキや巻物に伝達したい内容を記述し、郵便箱に投函(とうかん)します。その後、指定した住所に手紙を配達し、相手は届いた手紙の内容を確認します。
昔は近況を聞くだけでもかなりの時間がかかりましたが、現在は、メールで数秒あれば伝達可能です。これは、世界各地に通信網ができた恩恵でしょう。
元祖世界3大発明が「火薬」「羅針盤」「活版印刷」なら、現代の3大発明は「コンピュータ」「通信技術」「航空宇宙技術」でしょう。今から60年前、コンピュータは単なる高速演算装置で、「点」でしたが、機械制御で使うことにより「線」になり、銀行のオンライン処理などのネットワークと合体して「面」になり、ついに、いろいろなネットワークを結ぶインターネットと結合して「立体」になりました。コンピュータは、ネットワークと合体していなければ、今日のように発展しなかったでしょう。
コンピュータがネットワークと結びついたことで、複雑な処理が高速で可能になった反面、それを開発するエンジニアには高度な技術が求められ、難解なバグを解決しなくてはならなくなりました。皆さんは、そのど真ん中にいるのです。
通信系プログラムでは、複数の機器間で通信を行います(図1)。
図1では、何らかのコンピュータにセンサーをつなげている様子を示しています。通信が必要なプログラムの場合、単一機器で動作するプログラムよりも現象が複雑です。例えば、「データが届かない」という事象が発生したとします。その場合、「受信側プログラムが原因か」「送信側プログラムが原因か」「物理的な接続が原因か」などの複数が考えられるでしょう。これにより現象が複雑怪奇に見えます。
Copyright © ITmedia, Inc. All Rights Reserved.