数あるソフトウェアテストの種類の中でも、開発側が最後に行うのがシステムテスト(総合テスト)です。システムテストによって、ソフトウェアに求められる要件を満たしているか検証される必要があります。

このテストが無事に完了すれば、ソフトウェアのリリースや顧客への引き渡しが行われることから、重要な役割を担っていると言えるでしょう。この記事ではシステムテストとはどんなものかや、どのような種類があるかを解説しています。

システムテスト(総合テスト)とは

ソフトウェアテストの範囲
システムテストとはソフトウェア開発の最終段階で実施される、ソフトウェア全体に対する総合的なテストのことです。個々のモジュールをテストする「単体テスト」、複数モジュールの組み合わせをテストする「結合テスト」に続いて行われます。

ソフトウェアテストのテストレベル

テストレベルにおけるシステムテスト

システムテストの目的は、求められる要件をソフトウェアが満たしているか検証することです。システムテストによって、実際にユーザーがソフトウェアを利用したときに、要件通り動作することが確認されなくてはなりません。そのためシステムテストは本番とできるだけ同じ環境で、ユーザーの実際の利用を想定しながら多角的に行うことが必要です。

システムテストにより、これまでの開発環境でのテストでは発見できなかったバグが検出されることもあります。本番で実際に利用されるハードウェア環境に関わる不具合が発見されることも少なくありません。

システムテストのテストベース

まずテストベースとは、テストを実際にどのように行うかをまとめた「テストケース」作成時に、その情報源となるもののことです。たとえば仕様書を参考にテストケースを作成した場合、仕様書がテストベースとなります。

システムテストにおいては、様々なものがテストベースとして採用されます。その主な例としてあげられるのが以下の通りです。

  • クライアントの求める機能の詳細をまとめた各種「要求仕様書」
  • 利用者がソフトウェアをどのように使うかまとめた「ユースケース」
  • ソフトウェア利用時のリスクについてまとめた「リスク分析レポート」
  • システムの動作について高いレベルで記述したモデル等

システムテストの種類(テストタイプ)

一口にシステムテストと言っても複数の種類(テストタイプ)があります。ここでは、その中でも覚えておきたい機能テストと非機能テストについて解説します。

機能テスト

機能テストは文字通りソフトウェアの各機能に関するテストですが、単純に動作をチェックするだけでは足りません。テスト対象となる個々の機能が、仕様書等で定義された役割をきちんと果たせているかを検証する必要があります。言い換えると、テスト対象の機能が要件を本当に満たしているかを確かめるテストということです。

非機能テスト

非機能テストとは、ソフトウェアの「機能以外」をチェックするテスト全般を指します。何をもって「機能以外」とするかの定義は非常に広くなりますが、代表的な種類(テストタイプ)としては以下があげられます。

ユーザビリティテストソフトウェアの使いやすさ(理解しやすさ/ユーザビリティ)を検証するテスト
セキュリティテスト仕様書にセキュリティに関する項目がある場合に、各機能がそのセキュリティレベルを満たしているか検証するテスト
障害許容性テスト障害発生時に、各機能が求められる役割を果たせているか検証するテスト
性能テストソフトウェアの各性能(処理能力・稼働率等)が、要件を満たしているか確認するためのテスト
負荷テストテスト対象の各機能が、過負荷の状態でも求められる役割を果たせているか検証するためのテスト

※ソフトウェアテストに求められる内容によっては、ここにあげた以外の「非機能」が検証される場合もあります。

システムテストを行うときの注意点

システムテストはソフトウェアが組みあがった状態で、ソフトウェア全体に対して行われます。そのため検証すべき機能は多岐にわたりますが、上位の機能からテストすると、バグ発見時に原因の切り分けが難しくなります。様々な下位機能が関連すると考えられることから、疑うべき箇所が多くなってしまうためです。

そのためソフトウェアの基本的な機能(最低限必要となる機能)から、テストを開始することが推奨されます。その方がバク発見時にチェックすべき項目が少なくなり、原因の切り分けが簡単です。

また基本的な機能にバグがないことが検証された状態で、より上位の機能を検証すれば、原因を疑う対象から基本機能を外せます。バグが発見された際には、原因を特定しやすくなるのです。

まとめ

システムテスト(総合テスト)によって、開発したソフトウェアが求められる要件を満たしているか検証します。そのため本番と同じ環境で、実際にユーザーが利用するシーンを想定して実施することが必要です。

システムテストによって、これまでの単体テストや結合テストで発見されなかったバグが検出されること少なくありません。ソフトウェアテストの種類のなかでも、重要な役割を担うテストといえるでしょう。