テストでバグ発見!(11)機能追加した扇風機シミュレーターのバグを検出せよ【解答編】山浦恒央の“くみこみ”な話(153)(3/3 ページ)

» 2022年05月18日 07時00分 公開
前のページへ 1|2|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 バグレポート

 バグレポートを下記にまとめます。

バグレポートその1 バグレポートその1[クリックで拡大]
バグレポートその2 バグレポートその2[クリックで拡大]

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や書店でチェックしてください!

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

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


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

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


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.