入出力(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回前のデータなんです……」のようなログの出力タイミングのズレみたいなものがある場合があります。
今回の問題では、減速モード時に電源ONを押しても無視するプログラムとなっていました。この場合、減速時に電源ONを押しても反応せずに、違和感を持つ可能性があります。表現方法の一つとして、減速モード時に電源ONを押すと運転モードに戻ってくる仕様としてもよいでしょう。
今回は、状態遷移モデルを題材とした扇風機シミュレーターの問題の解答編でした。組み込み系のソフトウェア開発では、状態遷移図・状態遷移表を用いて作成すると、構造が簡単になり、入出力の動作が理解しやすくなるので、実装・テストが分かりやすくなります。また、誰が設計してもほぼ同じ構造になりますし、保守や変更も容易になります。仕様書を見たら、最初に状態遷移モデルで実装することを考えるといいでしょう。
状態遷移モデルをベースにしたソフトウェアをテストする場合、状態遷移表のマス目と状態遷移図の線は、確実にテストしましょう。例えば、「ある状態から抜け出せない」「別のモードに遷移する」というバグなどが見つかる可能性があります。
前シリーズ「ソフトウェア技術者のためのバグ百科事典」を大幅に加筆、修正した山浦恒央先生の書籍「ソフトウェア技術者のためのバグ検出テキスト」が日科技連出版から好評発売中です。連載でも取り上げた、「要求仕様書のバグ」「実装抜けのバグ」「テスト業務のバグ」など、バグを36種類に分類して解説しています。囲碁や将棋であれば、「相掛かり」「矢倉」「四間飛車」「藤井システム」のような戦法を網羅した内容になっています。
前著「ソフトウェア技術者のためのバグ検出ドリル」(2019年11月刊行)も好評発売中です。実際にバグを含む要求仕様書、設計書、コーディング、デバッグ、保守を具体的に取り上げ、練習問題として31問を出題しました。同書は、囲碁や将棋における「次の一手」的な問題であり、ピンポイントの場面を取り上げ、実践力を鍛えることを目的としています。
両書とも興味のある方は、Amazon.comや書店でチェックしてください!
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
Copyright © ITmedia, Inc. All Rights Reserved.