テストでバグ発見!(11)機能追加した扇風機シミュレーターのバグを検出せよ【解答編】:山浦恒央の“くみこみ”な話(153)(3/3 ページ)
提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」。今回は、前回出題した扇風機シミュレーターの機能追加開発におけるバグ検出についての解答編だ。
3.3 筆者が意図したバグ
今回のバグを以下に示します。
- 機能追加した首振りモードの遷移が正しくない
- ログの運転ON/OFFボタンステータスの項目が出力結果と違う
上記を詳しく見ていきましょう。
3.3.1 機能追加した首振りモードの遷移が正しくない
先述のリスト1におけるNo.3のテスト項目を実施すると、首振りモードOFFが正しく遷移しないことが分かります。下記に出力データ(output.csv)の抜粋を示します(表2)。
首振り変更ボタンステータス (0:それ以外、1:押下) |
首振り管理ステータス (0:OFF 1:ON) |
備考 | |
---|---|---|---|
0 | 0 | ||
1 | 1 | ここでボタンを押下し、首振りモードONに遷移する | |
0 | 1 | ||
0 | 1 | ||
0 | 1 | ||
1 | 1 | ここでボタンを押下し、首振りモードOFFに遷移するはずがしない | |
0 | 1 | ||
表2 出力データ(output.csv)の抜粋 |
首振りモードON(首振り管理ステータスがON)の状態で、首振りモード変更ボタンを押下しても首振りモードがOFFとなりません。これでは、プログラムを終了しない限り首振りモードをOFFにできないことになります。
3.3.2 ログの運転ON/OFFボタンステータスの項目が出力結果と違う
出力結果のoutput.csvを確認すると、ヘッダの名称が、「0:それ以外、1:押下」となるはずが、「(0:OFF 1:ON)」となっており、データ設計と一致しません(表3)。
出力項目(仕様) | 出力項目(output.csv) | |
---|---|---|
項番(ログ記録回数) | 項番 | |
運転ON/OFFボタンステータス(0:それ以外、1:押下) | 運転ON/OFFボタンステータス(0:OFF 1:ON) | |
モード変更ボタンステータス(0:それ以外、1:押下) | 運転ON/OFFボタンステータス(0:OFF 1:ON) | |
首振り変更ボタンステータス(0:それ以外、1:押下) | 首振り変更ボタンステータス(0:OFF 1:ON) | |
表3 出力ヘッダの抜粋 |
項番はともかく、名称はきちんと一致させるべきですね。
3.4 バグレポート
バグレポートを下記にまとめます。
3.5 気付き
前回の問題を取り組んだ方は、「運転ON/OFFボタンステータス」の入力方法が以前と違っていることに気付くでしょう(表4)。
運転ON/OFFボタンステータス (0:それ以外 1:押下) |
モード変更ボタンステータス (0:それ以外 1:押下) |
備考(実際にはこの行は作らない) | |
---|---|---|---|
0 | 0 | 運転OFF | |
1 | 0 | 運転ONボタン押下し、運転モードへ遷移 | |
1 | 1 | 運転ON状態で、モード変更ボタン押下し、中速回転モードに遷移する。また、モーター回転数=50となる | |
1 | 0 | 運転ON状態で、また、モーター回転数=100となる | |
1 | 1 | 運転ON状態で、モード変更ボタン押下し、高速回転モードへ遷移し、モーター回転数=150となる | |
表4 以前の問題文 |
表4は、連載第149回「テストでバグ発見!(7)状態遷移モデルで扇風機シミュレーターのバグを摘出せよ【出題編】」3ページ目の入力データの作成方法を再掲載したものです。
ここには、「運転ON/OFFボタンステータス(0:それ以外 1:押下)」と書いてあります。上記の問題部を見ると、運転ON/OFFボタンステータスが、連続して押下することで、運転モードを変更する記述となっています。
つまり、前回の「ボタンを押下、非押下」と「ボタンのON状態、OFF状態」を混同しています。その結果、常に、ボタンを押下した状態で、モード変更をする入力をしないと正しく実行できません。正しくは、下記のようになっている必要があります(表5)。
運転ON/OFFボタンステータス (0:それ以外 1:押下) |
モード変更ボタンステータス (0:それ以外 1:押下) |
備考(実際にはこの行は作らない) | |
---|---|---|---|
0 | 0 | 運転OFF | |
1 | 0 | 運転ONボタン押下し、運転モードへ遷移 | |
0 | 1 | 運転ON状態で、モード変更ボタン押下し、中速回転モードに遷移する。また、モーター回転数=50となる | |
0 | 0 | 運転ON状態で、また、モーター回転数=100となる | |
0 | 1 | 運転ON状態で、モード変更ボタン押下し、高速回転モードへ遷移し、モーター回転数=150となる | |
表5 表4の問題文の修正版 |
これは、筆者が第1バージョンからバグを見過ごしていたことが原因です。そこで、今回の問題作成時にコッソリ変更しておきました。前の段階からお気付きになった方は素晴らしい! 品質保証エンジニアとしてのセンスがあると10年間、威張っても構いません。
他にも、気付き事項はたくさんあると思いますので、自分なりに列挙していただければと思います。
4.まとめ
築50年を越えて老朽化したマンションは建て替えるのが理想ですが、建て替え費用を積み立てていなかったり、住人が全会一致で建て替えに賛成することがまずあり得なかったりします。そのような事態を考えれば、今あるものを使って改善を重ねる「保守」が非常に重要なことは理解していただけると思います。ソフトウェアでも、ソフトウェアのライフサイクルやコストの3分の2から4分の3を保守が占める現在、保守はソフトウェア開発での最大の課題となっています。
今回は、扇風機シミュレーターの保守に焦点を当て、解答編をお届けしました。ポイントは以下の通りです。
- 改修した機能が正しく動作するか
- 改修することによって、既存の無関係の機能に影響を与えていないか
- 気付かなかった残存バグがないか
上記のポイントをテストフェーズでの限られた工数とコスト内で、きちんと確認することが重要です。他にも、筆者が気付かなかったバグがたくさんあるでしょう。それらも併せて探してみてください。
山浦先生の書籍が発売中です!
前シリーズ「ソフトウェア技術者のためのバグ百科事典」を大幅に加筆、修正した山浦恒央先生の書籍「ソフトウェア技術者のためのバグ検出テキスト」が日科技連出版から好評発売中です。連載でも取り上げた、「要求仕様書のバグ」「実装抜けのバグ」「テスト業務のバグ」など、バグを36種類に分類して解説しています。囲碁や将棋であれば、「相掛かり」「矢倉」「四間飛車」「藤井システム」のような戦法を網羅した内容になっています。
前著「ソフトウェア技術者のためのバグ検出ドリル」(2019年11月刊行)も好評発売中です。実際にバグを含む要求仕様書、設計書、コーディング、デバッグ、保守を具体的に取り上げ、練習問題として31問を出題しました。同書は、囲碁や将棋における「次の一手」的な問題であり、ピンポイントの場面を取り上げ、実践力を鍛えることを目的としています。
両書とも興味のある方は、Amazon.comや書店でチェックしてください!
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- ≫連載「山浦恒央の“くみこみ”な話」バックナンバー
- テストでバグ発見!(10)機能追加した扇風機シミュレーターのバグを検出せよ【出題編】
提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」。今回は、これまで題材にしてきた扇風機シミュレーターに対して保守開発を本格的に適用した問題の出題編となる。 - テストでバグ発見!(9)状態遷移図への機能追加の勘所は「混ぜるな、危険!」
提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」。今回は、前回までの題材だった扇風機シミュレーターを使って、状態遷移図への機能追加を行う。その勘所は「混ぜるな、危険!」だ。 - テストでバグ発見!(8)状態遷移モデルで扇風機シミュレーターのバグを摘出せよ【解答編】
提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」。今回は、扇風機シミュレーターをテーマとする問題の解答編。状態遷移モデルをベースにしたデバッグに取り組もう。 - テストでバグ発見!(7)状態遷移モデルで扇風機シミュレーターのバグを摘出せよ【出題編】
提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」。今回は、扇風機シミュレーターをテーマとする問題の出題編。状態遷移モデルをベースにしたデバッグに取り組もう。 - テストでバグ発見!(6)電卓プログラムに潜むバグ【解答編】
提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」。今回は、前回出題した電卓プログラム問題の解答編だ。演習問題としては大規模だが、正面からじっくり向き合い、適切にテスト設計すればバグを検出できるはず!