ソフトウェア技術者のためのバグ百科事典(19)複雑怪奇な通信系プログラムのバグ:山浦恒央の“くみこみ”な話(140)(3/4 ページ)
ソフトウェア技術者に向けて、バグに関する基礎知識をまとめていく新シリーズ「バグ百科事典」。第19回は、複雑怪奇になりがちな通信系プログラムのバグを紹介します。
6.バグの兆候
バグの兆候は、「データの中身がおかしい」「データが届いていない」「データが受信できない」などです。ただし、複数の機器にまたがるため、もう一歩先に進んで兆候を探すことが大事です。以下の手順でチェックしてください。
6.1 ステップ1:まずは接続不良を疑おう
自動車が動かない場合、最も基本的なことからチェックするのが王道です。「ガソリンが入っている」「バッテリーは十分に充電されている」ことを確かめるのが第一歩です。
同様に、まずは、そもそもの機器の接続不良と設定不良を疑いましょう。意外に少なくありません。例えば、OSがWindowsの場合は、コマンドプロントを開き、「ipconfig」を実行すると、両者のIPアドレスを確認できます※1)。
※1)Linuxならば、「ifconfig」です。
次に、調べたIPアドレスを基に、「ping」コマンドを実行し、アンサーが返ってくるか確認しましょう。相手側のIPアドレスが、192.168.50.50の場合は、「ping 192.168.50.50」と入力します。アンサーが返ってこない場合は、通信経路が確立しているか(「LANケーブル」「ルーター」「ハブ」「ファイアウォール」)などが正しいか確認してください。
6.2 ステップ2:ループバック形態に変更する
送信データが自分自身に届くことを確認しましょう(図3)。
図3には、ループバックのイメージ図を示しました。例えば、自分のPCに送信側と受信側のプログラムを作成し、データの送受信をします。また、受信側でデバッガを使えば、変数にデータが入っていることを直接確認できるでしょう。ここで「データが届かない」「おかしなデータを受信する」場合は、バグの原因は自分です。
6.3 ステップ3:データの送受信を確認する
「WireShark」などのパケットキャプチャーツールを用いて、「自分のデータが送信できているか」「相手側に届いているか」を確認しましょう(図4)。
6.3.1 ①データが送信できているか
例えば、クライアント側でWireSharkを起動し、データが送信できているか確認しましょう。送信できていない場合は、クライアント側のバグの可能性大です。
6.3.2 ②データが届いているか
次に、サーバ側でWireSharkを起動し、クライアント側のデータが届いているか確認します。データが届いているのに受信できない場合は、サーバ側のバグの可能性大です。
6.4 ステップ4:データの中身がおかしい
データはサーバ側に届いているが正しいデータを受信できない場合は、デバッガで送信データと受信データを確認します。データが一致しない場合は、下記を疑いましょう。
- 意図したデータ列(中身、サイズ、キャストのミスなど)を送受信できていない
- エンディアンが両者で異なっているため、データが反転している
6.5 ステップ5:データがたまに来ないときがある
データは正しく届くし、内容も正しいが、たまにおかしくなる場合は下記を疑いましょう。
- タイムアウトが短すぎる、長すぎる
- サイズが大きすぎて分割してデータを受信している
この事象は見つけることが困難でしょうが、注意して確認しましょう。
Copyright © ITmedia, Inc. All Rights Reserved.