開発におけるテストについての復習

テックポエム

皆様はゲームやアプリなどでバグを発見したことはありますでしょうか?

私はけっこうゲームが好きで、よくプレイ中にゲームの仕様の穴をついた挙動を探したりします。

たまにネットにも挙がっていないバグや裏技を発見すると嬉しくなってしまいます。

ゲームならバグも含めて楽しんだりしますが、もし業務アプリやWebコンテンツなどの個人情報を取り扱う箇所などにバグがあった場合、利用者との信用に関わり、経済的な損失に繋がってしまいます。

なのでバグを出さないために、それぞれ用途に合わせたさまざまなテストを行う必要があります。

最近はテスト仕様についての議題が多くなり、テスト仕様書の見直し方を整理する必要がありましたので、簡単にではありますが、備忘録も兼ねて各テストごとの目的と特徴について復習した内容をポエムとして残したいと思いました。

今回復習したテストは以下になります。

  • 単体テスト(UT)
  • 結合テスト(IT)
  • システムテスト(ST)
  • 受入テスト(UAT)

単体テスト(UT)

単体テストは一般的にプログラムのクラスや関数といった小さな単位で行うテストのことを指します。

個々の画面や機能で実施される動作を確認することが目的となります。

例えば動画サイトや通販サイトの場合は、表示機能や検索機能といった機能を一つずつ確認していきます。

主に確認する内容は

  • 設計書や仕様書通りに動作することを確認する
  • プログラムの構造に沿って、処理や分岐などが正しく実行されるかを確認する
  • データや変数が正しい順に行われているかを確認する

となります。

基本的にその画面内でできることは全て確認します。

結合テスト(IT)

結合テストは単体テストで検証した複数のプログラムを組み合わせて行うテストのことを指します。

単体テストでは確認しなかった画面間や機能間の連携やデータの受け渡しに問題がないかを確認することが目的となります。

例えば検索機能を使ったときに、「正しく検索結果が表示されているか」といったことを確認します。

単体テストで確認した一つの画面内で完結する内容についてはこちらのテストでは省略できるようです。

主に確認する内容は

  • 他の機能から必要な情報を取得できているかを確認する
  • 他の機能で変更を加えたデータが反映されているかを確認する

といったことを確認していきます。

システムテスト(ST)

システムテストは開発の工程でベンダー側の最終テスト段階で行われることが多いです。

実際に運用される状況と同じ設定や環境を再現してテストを行います。

ハードウェアも含めた全体の通したテストを行います。

例えば通販サイトではトップページから商品一覧へ遷移して商品を検索し、注文が完了してメールが送信されるまでの一連の流れを確認します。

また、一連の流れを確認するだけではなく他にも様々なテストを行います。

主に確認する内容は

  • 変更または修正を行った後に、新たな不具合が生まれていないかを確認する
  • 外部からの攻撃などの脆弱性がないかを確認する
  • 処理能力または処理速度十分であるか確認する
  • 高い負荷をかけた状況での動作を確認する

となります。

受入テスト(UAT)

受入テストは納品されたシステムに対して、ユーザー企業側が導入しても問題ないかを判定するためのテストです。

業務として利用できる基準を満たしているかなど、最終的な確認を行います。

主に確認する内容は

  • 実際の操作環境で正しく動作するか確認する
  • 開発者以外の人が操作して、不具合がないことを確認する
  • リリース前の製品を一般ユーザーが操作して、不具合がないことを確認する

となります。

以上のまとめが何の役に立つかと言いますと、

これらのテストがあることを認識したうえで、現在進んでいるテストがどのテストにあたるかを考え、そのテストの目的を明確化することで、そのテストにおける大事な観点がはっきりするということです。

今回の復習のため久々にITパスポートの参考書を引っ張り出しましたが、忘れてしまっていたこと、また知識として知ってはいたが当時は活用の仕方がわからなかったことなどもあり、日々の業務に活かせていなかったので、今後も定期的に復習しなければいけないと感じました。