数あるシステム開発の工程の中でも、お客様に納品する前の一番最後の工程となるのがテスト工程です。テストといっても単体テスト・結合テスト・総合テスト・受入テストなど、さらに工程を細分化することもできるのですが、このテストをしっかりと行うことで、質の高いシステムが納品できるのです。
テストもただやみくもに実施すればよいわけではなく、テストを実施する意味や要点をしっかりと理解してから行うことで、より作業の質が高くなります。今回は新人エンジニアにも理解できるように、テストの基本についてご説明していきたいと思います。
テストを実施する意味とは
テストを行う意味は、品質の”保証”と”向上”です。「しっかりと仕様通りに動作する」ことを確かめて品質を保証し、バグをつぶしていくことで品質を向上させるのです。
当たり前のことが当たり前に動くことをテストする
テストは大きく分けて「正常処理チェック」と「異常処理チェック」の2種類があります。
システムを利用するのはエンジニアではなくお客様です。事前に想定した通りの操作をしていただける確証はなく、ときにはとんでもない操作をすることもあります。そうした場合もシステムが異常終了してしまわないよう、エラーメッセージを表示するなどの処理を組み込んでおくのは鉄則です。
上記のことが異常処理に該当するのですが、なぜか新人エンジニアはテストを行う際に、異常処理のチェックばかりを行い、正常処理のチェックをおろそかにしがちです。
先にも述べましたが、テストの目的のひとつには”品質の保証”もあり、当たり前のことが当たり前に動作することを確認することも大事なのです。しっかりと想定通りの操作を行い、想定通りの結果が返ってくることをテストで検証することで、初めて品質を保証できるのです。
バグを検出するためにテストケースを作成しよう
テストではバグを洗い出して、どんどんつぶしていくことで品質の向上がなされます。
もしバグの検出数がゼロ件という場合は、プログラムがしっかりと作りこまれているという解釈もできるのですが、テストケースがしっかりと作成されていなかったという解釈もできます。プログラムも所詮は人のつくりしものなわけで、バグがゼロ件というのはちょっとおかしいと考えるのが基本です。
バグが出すぎるのもよくありませんが、一応ステップ数に応じて適切なバグ検出数の指標というものが各プロジェクトや各企業で独自に決められており、その範囲内であることが理想とされています(実際のところはどうなのか・・という疑問はありますが)。
とにもかくにも、テストの実施はテストケースが上手につくられているかどうかが、非常に重要なポイントとなります。次の項で、テストケースを作成する際のポイントについてご説明していきましょう。
テストケース作成時の要点
それではテストケースの作成時に意識するべき要点についてご説明していきます。今回はテストの基本ということで、新人エンジニアが特に漏らしやすい項目を中心に挙げております。
条件を網羅する
とにかくテストの基本はプログラム中の条件をすべて網羅したテストケースを作成することです。
先に説明した正常チェック、異常チェックの話にもつながりますが、たとえばIF文を使用すれば、条件がtrueの場合とfalseの場合の2つに処理が分岐しますよね。そうしたらtrueとfalse、両方の結果をテストケースに挙げなければなりません。
仕様書に書いてあること、プログラムで実装している処理については、すべてテストケースを作成して、漏れなくチェックするようにしましょう。
ゼロ件チェック
データを処理して結果を返すプログラムの場合、ゼロ件チェックは必ず行いましょう。このゼロ件チェックは新人エンジニアがテストケースを作成する際に漏れてしまいがちなので、特に意識するようにしてください。
入力データが何もなくNullだった場合、システムが処理できずに落ちてしまうのはなく、しっかりとNull値の対応ができているかどうかチェックします。その他にも入力値が空白だった場合や、0だった場合などもゼロ件チェックとしてテストしましょう。
イレギュラーデータでのチェック
イレギュラーなデータでのチェックも忘れてはいけません。上記のゼロ件チェックもそうですが、例えばあまりにも桁数が多いデータが入ってきた際に、システムの内部でオーバーフローを起こしてしまわないかなど。
お客様の業務を理解していないと難しいかもしれませんが、できるだけイレギュラーなデータが発生してしまう状況を想定し、システムがイレギュラーパターンに対応できるかどうかのチェックも行います。
境界値チェック
例えばIF分にて「IF i(変数名) < 50」という条件式があったとします。そうした時にはiの値が50の場合と51の場合でテストを実施します。50と51が境界となって処理の分岐も変わるため、その境界値でテストを行わなければ意味がないのです。
上記の例のほかにも、帳票などで50文字まで表示できる項目があったとしたら、表示データが50文字の場合と51文字の場合のテストデータを用意して、51文字のデータでは51文字目が表示されていないことを確認する必要があります。
文字が一字一句あっているか
例えばログイン認証時のエラーメッセージを表示する場合、仕様書では「パスワードが間違っています」と表示させるよう指示があるのに、実際には「パスワードが違います」と表示されるとします。
「パスワードが間違っています」と「パスワードが違います」という文字列はイコールではありませんが、誰も困りませんし、意味も伝わります。しかしこれもれっきとしたバグです。
プログラムは仕様書通りに実装するのが基本です。だからテストケースも仕様書を正として、仕様書に記載されていること以外の動作はバグとして挙げなければなりません。
おわりに
新人エンジニアの場合、まずはテスト工程から任されることも多いと思いますが、たかがテストと思っていてはいけません。テストはシステムの品質を保証し、お客様からの信頼を得るための非常に重要な工程なのです。
しっかりとテストをする意味や要点を理解して、仕事の質を高めて、より良いシステムを納品できるようにしていきましょう。
【X(旧twitter)でも情報発信中】
Xを最近始めたので、フォローしてもらえると嬉しいです(エンジニア界隈の方はフォローバックさせていただきます)! システム開発に関することや、最新テクノロジーのことなど、世のエンジニアにとって有用な情報を発信してます!