メディア

バグ検出ドリル(17)「よくある単純なバグ」だからこそ見つけにくい山浦恒央の“くみこみ”な話(117)(3/3 ページ)

» 2019年04月25日 10時00分 公開
前のページへ 1|2|3       

5.今回の解答

 原因は、「breakが抜けている」でした。

 問題を振り返ります。ユーザーは、以下の手順で入力しています。

  • ①電源OFFモードで、「0(電源ON/OFF指令)」を入力、Enterを押し、アイドルモードに遷移する
  • ②アイドルモードで、「1(再生指令)」を入力、Enterを押し、再生モードに遷移する
  • ③再生モードで、「2(停止指令)」を入力、Enterを押し、アイドルモードに遷移する
  • ④アイドルモードで、「1(再生指令)」を入力、Enterを押し、再生モードに遷移する
  • ⑤再生モードで、「1(再生指令)」を入力、Enterを押し、一時停止モードに遷移するはずが、再生モードのままとなっている
  • ⑥コンソールから入力をせず、Ctrl+cでプログラムを終了する

 本来、再生モードで再生指令を入力すると一時停止になるのですが、再生モードのままです。なぜでしょうか。原因は以下の場所にあります。

リスト1-2から再掲 リスト1-2から再掲

 上記の「// アイドルモードの場合」の真上をご覧ください。再生モードのswitch-caseにbreakが抜けていますね。switch文にbreakが無い場合は、下の条件文も実行します。その結果、再生モードで「一時停止モード」に遷移しても、アイドルモードで「再生モード」に遷移してしまいます(黄色で示した部分を参照)。

 switch文を使用する場合は、一般的にcaseとbreakをセットにして記述します※2)。breakを記述しない場合は、次のcaseを実行してしまうため、正しい処理が出来ません。

※2)プログラマーによっては、わざとbreakを記述しないで処理をする場合もあります。

 「==」やswitch-caseのバグを防ぐためには、デバッグ時にしっかり確認しておくか、違う実装方法に変更するとよいかと思います。たかが「break」の記述ミスですが、ミスなくプログラムをするのは簡単ではありませんね。

6.自己採点シート

 今回の自己採点シートを以下に示します。

問題 内容 配点(点)
音楽プレーヤープログラム 問題を一通り読んだ 50
switch文にbreakが抜けていることを見つけた 50
リスト3 自己採点シート

7.終わりに

 プログラムは考えた通りに動くのではなく、作った通りに動きます。プログラマーは、毎日、このギャップに悪戦苦闘しているはずです。今回は、前回に引き続き、音楽プレーヤーのプログラムを出題しました。Breakの抜けは初歩的なバグですが、「よくある単純バグ」として有名ですね。皆さんは、こんなバグを作らないと思いますが、保守で他人のプログラムに手を入れる場合、switch-caseを見たら、breakがちゃんとあるか、ぜひ、確認してください。

【 筆者紹介 】
山浦 恒央(やまうら つねお)

東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)


1977年、日立ソフトウェアエンジニアリングに入社、2006年より、東海大学情報理工学部ソフトウェア開発工学科助教授、2007年より、同大学大学院組込み技術研究科准教授、2016年より非常勤講師。

主な著書・訳書は、「Advances in Computers」 (Academic Press社、共著)、「ピープルウエア 第2版」「ソフトウェアテスト技法」「実践的プログラムテスト入門」「デスマーチ 第2版」「ソフトウエア開発プロフェッショナル」(以上、日経BP社、共訳)、「ソフトウエア開発 55の真実と10のウソ」「初めて学ぶソフトウエアメトリクス」(以上、日経BP社、翻訳)。

鬯ゥ謳セ�ス�オ�ス�ス�ス�コ鬯ョ�ヲ�ス�ョ髯キ�サ�ス�サ�ス�ス�ス�ソ�ス�ス�ス�ス鬯ッ�ッ�ス�ィ�ス�ス�ス�セ�ス�ス�ス�ス�ス�ス�ス�」鬯ッ�ョ�ス�エ髣費ソス�ス�・�ス�ス�ス�ウ�ス�ス�ス�ィ�ス�ス�ス�ス髯懶ス」�ス�、�ス�ス�ス�ク�ス�ス�ス�イ鬯ゥ蠅捺��ス�ソ�ス�ス�ス縺、ツ€�ス�ス�ス�ス�ス�ス�ス�」鬯ッ�ョ�ス�エ鬯ゥ蟶壽桶�ス�ュ鬮ョ�」�ス�ソ�ス�ス�ス�ス�ス�ィ鬮ッ蛹コ�サ繧托スス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�コ鬮」蛹�スス�オ髫エ謫セ�ス�エ�ス�ス隶難ス」�守「托スュ雜」�ス�「�ス�ス�ス�ス�ス�ス�ス�ゥ鬯ゥ蟷「�ス�「髫エ雜」�ス�「�ス�ス�ス�ス�ス�ス�ス�シ鬯ゥ蟷「�ス�「髫エ荳サ�ス隶捺サゑスソ�ス邵コ�、�つ€鬯ッ�ョ�ス�ヲ�ス�ス�ス�ェ鬩包スカ闔ィ�ス�ス�ヲ�ス�エ�ス縺、ツ€髯キ闌ィ�ス�キ�ス�ス�ス�ス�ス�ス�ス�サ鬯ッ�ッ�ス�ェ�ス�ス�ス�ュ�ス�ス�ス�ス�ス�ス�ス�イ鬯ゥ謳セ�ス�オ�ス�ス�ス�コ鬮ッ�キ�ス�キ�ス�ス�ス�カ�ス�ス�ス�ス�ス�ス�ス�ス New
前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.