バグ検出ドリル(18)IoT時代だからこそ重要、単純でも検出が難しい通信系バグ:山浦恒央の“くみこみ”な話(118)(2/4 ページ)
バグは至るところに、しかも堂々と潜んでおり、自信満々なプログラマーほど、目の前のバグに気付かないものです。「バグ検出ドリル」の第18回の問題は、相互に通信する機器のソフトウェアのバグです。IoT時代を迎えて利用場面が増えている、通信系のバグを見つけ出しましょう!
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.