検索
連載

バグ検出ドリル(18)IoT時代だからこそ重要、単純でも検出が難しい通信系バグ山浦恒央の“くみこみ”な話(118)(2/4 ページ)

バグは至るところに、しかも堂々と潜んでおり、自信満々なプログラマーほど、目の前のバグに気付かないものです。「バグ検出ドリル」の第18回の問題は、相互に通信する機器のソフトウェアのバグです。IoT時代を迎えて利用場面が増えている、通信系のバグを見つけ出しましょう!

Share
Tweet
LINE
Hatena

3.今回の問題

 A君とB君は、二人で協力してネットワーク型の音楽プレーヤーを作成している。この音楽プレーヤーは、遠隔からユーザーの指令を送信する「クライアント」と、ユーザーの指令を受信し、音楽プレーヤーのモードを変更する「サーバ」に分かれている。A君がクライアント、B君がサーバをそれぞれ別々に作成している。現在の二人の開発状況を以下に示す。

  • A君:クライアントからサーバへモード遷移指令、ID、パスワードを送信し、サーバから音楽プレーヤーのモードを受信する
  • B君:クライアントからのモード遷移指令を受信し、音楽プレーヤーのモードを変更し、クライアントに変更したモードを送信する

 2人は上記の開発状況で、送受信が正しく実行できるか確認することにした。リスト1に音楽プレーヤーの仕様、リスト2にA君のプログラム、リスト3にB君のプログラムを示す。実際に試したところ、クライアントがモード遷移指令を送信しても、モードが遷移しないことが分かった。サーバ側のコンソールを確認すると、クライアントからのモード遷移指令受信時に、「IDかパスワードが一致しません」と表示し、また、サーバに受信データを表示するようにしたところ、モード遷移指令以外の値がおかしいことが分かっている。上記の情報から、何が原因でうまくいかないか推察せよ。

リスト1 音楽プレーヤーの仕様

1.概要

 本プログラムは、クライアントとサーバの2つの機器間で音楽プレーヤーのモード遷移を模擬するものである。

2.共通部

2.1 モードの定義

 各モードの定義を以下に示す。

 各モードの定義を以下の表1に示す。

モード 名称
MODE_POWER_OFF 電源OFFモード
MODE_IDLE アイドルモード
MODE_PLAY 再生モード
MODE_PAUSE 一時停止モード
表1 モード定義表

2.2 モード遷移指令

 モード遷移指令の定義とキーボード入力値を以下の表2に示す。

モード(変数名) 名称 キーボード入力値
ACT_POWER_ONOFF 電源ON/OFF指令 0
ACT_PLAY 再生指令 1
ACT_STOP 停止指令 2
表2 モード遷移指令表

2.3 通信方式

 通信方式は、TCPを使用する

2.4 送受信データ

 クライアントからサーバに送信するデータを表3に示す。

変数名 説明
in モード遷移指令の入力値
id ID番号
password パスワード
表3 クライアントからサーバへのデータ

 サーバからクライアントに送信するデータを表4に示す。

変数名 説明
▼▼Mode モード
表4 サーバからクライアントへのデータ

3.クライアント

3.1 概要

 クライアントは、サーバへモード遷移指令を送信し、変更したモードを受信する。

3.2 モード遷移指令の送信

 コンソールからモード遷移指令を入力し、表3のデータをサーバに送信する。

3.3 モードの受信

 サーバから表4のデータを受信し、コンソールにモードを表示する。

3.4 プログラム終了

 コンソールから「Ctrl+c」を入力し、プログラムを終了する。

4.サーバ

4.1概要

 サーバは、クライアントから受信したモード遷移指令に基づいて、音楽プレーヤーのモードを変更し、クライアントにモードを送信する。

4.2 モード遷移指令の受信

 クライアントから、表3のデータを受信する。

4.3 モード遷移指令の送信

 クライアントに表4のデータを送信する。

4.4 モード遷移

 受信したユーザーIDとパスワードが定義したものと一致した場合は、下記に従ってモードを変更する。

4.4.1 初期モード

 プログラム実行時は、電源OFFモードから始まる。

4.4.2 電源OFFモード

 電源OFFモードでのモード遷移を以下に示す。

  • ①電源ON指令を入力すると、アイドルモードに遷移する

4.4.3 アイドルモード

 アイドルモードでのモード遷移を以下に示す。

  • ①電源OFF指令を入力した場合は、電源OFFモードに遷移する
  • ②停止指令を入力した場合は、アイドルモードのままで、遷移しない
  • ③再生指令を入力した場合は、再生モードへ遷移する

4.4.4 再生モード

 再生モードでのモード遷移を以下に示す。

  • ①電源OFF指令を入力した場合は、電源OFFモードへ遷移する
  • ②停止指令を入力した場合は、アイドルモードへ遷移する
  • ③再生指令を入力した場合は、一時停止モードへ遷移する

4.4.5 一時停止モード

 一時停止モードでのモード遷移を以下に示す。

  • ①電源OFF指令を入力した場合は、電源OFFモードへ遷移する
  • ②停止指令を入力した場合は、アイドルモードへ遷移する
  • ③再生指令を入力した場合は、再生モードへ遷移する

4.5 表示機能

 受信したモードから、下記をコンソールに出力すること。

  • ①電源OFFモード:「電源OFFモード:」
  • ②アイドルモード:「アイドルモード:」
  • ③一時停止モード:「一時停止モード:」
  • ④再生モード:「再生モード:」

4.6 プログラム終了

 コンソールから「Ctrl+c」を入力し、プログラムを終了する。

5.制限事項

  • IPアドレスはローカルホストとし、同じPCから2つのプログラムを実行する
  • モード遷移指令の入力には、不正な入力値を入力しない
  • IDとパスワードは、クライアントとサーバにハードコーディングした値を使用する
  • プログラムを実行する際は、サーバ側を実行した後、クライアントを実行すること
  • 通信の不良は、考慮しないこととする
  • 実行環境は、GCC 7.3.0とする

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る