筆者が複数人で1つの製品をテストしていたときの例を挙げます。
テストの途中で、別の作業員が手順を確認していました、筆者はいつもと同じテストだったので、待機していました。その待機中、筆者に同僚からの着信があり、「待機中なので電話に出ても構わないだろう」と通話を始めました。30秒経過したころ、「そろそろテスト再開するよ」という無言の視線を感じました。電話の相手の同僚に「後でかけ直す」と伝え、テストを再開したところ、全く意図しない動作をしました(図2)。
図2は、テスト手順のフロー図を表したものです。原因は、「入力値の設定」手順をスキップして電話をしてしまい、その後、入力値の設定をした「つもり」になっていました。「つもり」は、本人がそう確信しているため、非常に厄介ですね。
このテストでは、入力値を設定することで機器の目的地を設定していました。手順が抜けた結果、目的地が初期値の0となり、下手をすれば機器を破壊して大惨事となるところでした。
以降、筆者は心を入れ替え、大事なテスト中には電話に出ないと心に誓いました。
あるモードに遷移してから4秒以内にスイッチをONにするテストがありました。筆者は、このテストを実施するのが初めてで、「なるべく早くやらないと」と思いました。いざテスト本番となり、素早く実行すると、思い通りの結果となりません。原因を担当者に確認したところ、「あまりに早くスイッチを押すとうまくいかない」と聞き、ガックリしました。
筆者は反復作業が苦手です。特に、疲労がたまると、「自分は今何をやっているのだろう」と考え込むことも少なくありません。例えば、そんなときに起こるのが、次の表5のケースです。
No. | テスト項目 | 入力値1 | 入力値2 | 期待値 | 出力値 | 良否 |
---|---|---|---|---|---|---|
… | … | … | … | |||
20 | 加算処理を確認する | 1 | 2 | 3 | 3 | OK |
21 | 10 | 20 | 30 | 3 | NG | |
… | … | … | … | |||
表5 テスト項目例 |
筆者は、表5のようなテスト項目を見ながら、黙々とテストをしていました。No.21のテストを実施し、出力値を確認したところ、期待値と一致しません。テスト項目を再確認すると、そもそも実施するべきテスト項目はNo.20だったことに気付き、自分の疲れがピークに達したと痛感しました。
プログラムの起動前に初期設定値を入力する必要があるプログラムがありました(図3)。
図3は、プログラム実行前に使用する設定値のイメージです。左がテスト項目に記載してある設定値で、外部入力ファイルに転記してテストする予定でした。
ファイルに値を転記し、実行したのですが、思い通りに動作しません。「修正のミス」「設定値のミス」「プログラムのバグ」を疑いましたが、原因は分かりません。次の日、もう一度よく確認すると、そもそも、入力すべきデータ名称が逆順になっており、間違った値を設定していました(図4)。
図4は、外部入力ファイルの設定値です。よく見ると分かる通り、意図しないデータ値を設定しています。なぜ、逆順に書いたのか、今でも不思議です。
テスト業務は、ソフトウェア開発の中でも地味で、長時間にわたる根気と労力が必要な作業です。その作業の中でも、今回は、テストのバグのケーススタディーを紹介しました。
組織によってやり方は異なるため、全て当てはまらないとは思いますが、以下に注意してテストをしましょう。
上記に気を付けて、よりよいテスト業務となれば幸いです。
本コラムでバグに関して興味を持った方は、バグ検出テキスト(書籍)や、過去記事(第122〜第138回)をご参照いただければと思います。
本シリーズ「ソフトウェア技術者のためのバグ百科事典」を大幅に加筆、修正した山浦恒央先生の新刊「ソフトウェア技術者のためのバグ検出テキスト」が日科技連出版から発売されました。連載でも取り上げた、「要求仕様書のバグ」「実装抜けのバグ」「テスト業務のバグ」など、バグを36種類に分類して解説しました。囲碁や将棋であれば、「相掛かり」「矢倉」「四間飛車」「藤井システム」のような戦法を網羅した内容になっています。
前著「ソフトウェア技術者のためのバグ検出ドリル」(2019年11月刊行)も好評発売中です。実際にバグを含む要求仕様書、設計書、コーディング、デバッグ、保守を具体的に取り上げ、練習問題として31問を出題しました。同書は、囲碁や将棋における「次の一手」的な問題であり、ピンポイントの場面を取り上げ、実践力を鍛えることを目的としています。
両書とも興味のある方は、Amazon.comや書店でチェックしてください!
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
Copyright © ITmedia, Inc. All Rights Reserved.