テストでバグ発見!(8)状態遷移モデルで扇風機シミュレーターのバグを摘出せよ【解答編】:山浦恒央の“くみこみ”な話(150)(4/4 ページ)
提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」。今回は、扇風機シミュレーターをテーマとする問題の解答編。状態遷移モデルをベースにしたデバッグに取り組もう。
4.4 気付き
4.4.1 出力データの出力タイミングがおかしく見える
入出力(input.csvとoutput.csv)を確認すると、出力データのタイミングにバグがあると思った人もいるでしょう。
項番 | 運転ON/OFFボタンステータス (0:OFF 1:ON) |
モード変更ボタン (0:OFF 1:ON) |
動作管理ステータス (0:アイドルモード 1:運転モード 2:減速モード) |
運転管理ステータス (0:OFF 1:ON) |
運転モードステータス (弱:0 中:1 強:2) |
モーター回転数 |
---|---|---|---|---|---|---|
1 | 0 | 0 | 0 | 0 | 0 | 0 |
2 | 1 | 0 | 1 | 1 | 0 | 0 |
3 | 1 | 0 | 1 | 1 | 0 | 50 |
4 | 1 | 0 | 1 | 1 | 0 | 100 |
表3 出力ファイルの例 |
表3を見ると、運転モードになっているのに、なぜモーター回転数が上昇しないのかと思う人もいるでしょう。例えば、項番2を見てください。今、動作管理ステータスが運転モードにいるのでモーターの回転数は50になっているはずと思われます。これは、プログラムの内部構造によるものです(図8)。
図8は、このプログラムの基本的な処理フローです。項番2で運転ON/OFFボタンを押下する場合は、アイドルモードですので、結果的に、アイドルモード状態で、アイドルモードから運転モードに切り替える処理だけを行いログを記録します。結果として、回転数を上昇する処理が行われませんので、回転数は0のままとなり、1回分遅れて見えてしまうのです。
このように、「ログがいつのデータなのか」というのは評価担当者には分からないので、開発側にフィードバッグし、バグかどうか確認しましょう。「このログに出ているのは実は1回前のデータなんです……」のようなログの出力タイミングのズレみたいなものがある場合があります。
4.4.2 減速モード時に電源ONをする
今回の問題では、減速モード時に電源ONを押しても無視するプログラムとなっていました。この場合、減速時に電源ONを押しても反応せずに、違和感を持つ可能性があります。表現方法の一つとして、減速モード時に電源ONを押すと運転モードに戻ってくる仕様としてもよいでしょう。
5.終わりに
今回は、状態遷移モデルを題材とした扇風機シミュレーターの問題の解答編でした。組み込み系のソフトウェア開発では、状態遷移図・状態遷移表を用いて作成すると、構造が簡単になり、入出力の動作が理解しやすくなるので、実装・テストが分かりやすくなります。また、誰が設計してもほぼ同じ構造になりますし、保守や変更も容易になります。仕様書を見たら、最初に状態遷移モデルで実装することを考えるといいでしょう。
状態遷移モデルをベースにしたソフトウェアをテストする場合、状態遷移表のマス目と状態遷移図の線は、確実にテストしましょう。例えば、「ある状態から抜け出せない」「別のモードに遷移する」というバグなどが見つかる可能性があります。
山浦先生の書籍が発売中です!
前シリーズ「ソフトウェア技術者のためのバグ百科事典」を大幅に加筆、修正した山浦恒央先生の書籍「ソフトウェア技術者のためのバグ検出テキスト」が日科技連出版から好評発売中です。連載でも取り上げた、「要求仕様書のバグ」「実装抜けのバグ」「テスト業務のバグ」など、バグを36種類に分類して解説しています。囲碁や将棋であれば、「相掛かり」「矢倉」「四間飛車」「藤井システム」のような戦法を網羅した内容になっています。
前著「ソフトウェア技術者のためのバグ検出ドリル」(2019年11月刊行)も好評発売中です。実際にバグを含む要求仕様書、設計書、コーディング、デバッグ、保守を具体的に取り上げ、練習問題として31問を出題しました。同書は、囲碁や将棋における「次の一手」的な問題であり、ピンポイントの場面を取り上げ、実践力を鍛えることを目的としています。
両書とも興味のある方は、Amazon.comや書店でチェックしてください!
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- ≫連載「山浦恒央の“くみこみ”な話」バックナンバー
- テストでバグ発見!(7)状態遷移モデルで扇風機シミュレーターのバグを摘出せよ【出題編】
提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」。今回は、扇風機シミュレーターをテーマとする問題の出題編。状態遷移モデルをベースにしたデバッグに取り組もう。 - テストでバグ発見!(6)電卓プログラムに潜むバグ【解答編】
提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」。今回は、前回出題した電卓プログラム問題の解答編だ。演習問題としては大規模だが、正面からじっくり向き合い、適切にテスト設計すればバグを検出できるはず! - テストでバグ発見!(5)電卓プログラムに潜むバグ【出題編】
提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」。今回は電卓プログラムをテーマとする問題の出題編。かなりのステップ数になる電卓プログラムに潜むバグを見つけ出そう。 - テストでバグ発見!(4)懐かしい「解の公式」のプログラムからバグを探し出せ
提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」。第4回は、多くの読者が中学校の数学で学んであろう、2次方程式の解を求める「解の公式」のプログラムに潜むバグを見つけ出そう。 - テストでバグ発見!(3)単位取得判定プログラムに潜むファイル入力のバグ
提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」。第3回は、大学の単位取得を判定するプログラムから、ファイル入力に潜むバグを見つけ出しましょう。