ソフトウェア技術者のためのバグ百科事典(19)複雑怪奇な通信系プログラムのバグ山浦恒央の“くみこみ”な話(140)(3/4 ページ)

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

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 ループバックのイメージ図

 送信データが自分自身に届くことを確認しましょう(図3)。

 図3には、ループバックのイメージ図を示しました。例えば、自分のPCに送信側と受信側のプログラムを作成し、データの送受信をします。また、受信側でデバッガを使えば、変数にデータが入っていることを直接確認できるでしょう。ここで「データが届かない」「おかしなデータを受信する」場合は、バグの原因は自分です。

6.3 ステップ3:データの送受信を確認する

 「WireShark」などのパケットキャプチャーツールを用いて、「自分のデータが送信できているか」「相手側に届いているか」を確認しましょう(図4)。

図4 図4 データの送受信のイメージ図

6.3.1 ①データが送信できているか

 例えば、クライアント側でWireSharkを起動し、データが送信できているか確認しましょう。送信できていない場合は、クライアント側のバグの可能性大です。

6.3.2 ②データが届いているか

 次に、サーバ側でWireSharkを起動し、クライアント側のデータが届いているか確認します。データが届いているのに受信できない場合は、サーバ側のバグの可能性大です。

6.4 ステップ4:データの中身がおかしい

 データはサーバ側に届いているが正しいデータを受信できない場合は、デバッガで送信データと受信データを確認します。データが一致しない場合は、下記を疑いましょう。

  • 意図したデータ列(中身、サイズ、キャストのミスなど)を送受信できていない
  • エンディアンが両者で異なっているため、データが反転している

6.5 ステップ5:データがたまに来ないときがある

 データは正しく届くし、内容も正しいが、たまにおかしくなる場合は下記を疑いましょう。

  • タイムアウトが短すぎる、長すぎる
  • サイズが大きすぎて分割してデータを受信している

 この事象は見つけることが困難でしょうが、注意して確認しましょう。

Copyright © ITmedia, Inc. All Rights Reserved.