
システムテストについて
システムテストとはシステム開発の一環として行われるテスト手法の一つで、「総合テスト」とも呼ばれています。
システム開発の最終段階で行われることが多く、実際に使用される状況と同じ設定でテストを行います。
システムテストでは、開発したシステムが期待通りに動作するか、構築したシステムが仕様書通りの機能や性能要件を満たしているかについて検証します。
実際の使用状況を想定して、本番と同じ環境で多角的にテストを行うことで、開発環境ではわからないバグや不具合を発見するのに役立ちます。
さらに、システムの一部だけではなくシステム全体を俯瞰して、ハードウェアも含めたテストが実施されるため、ハードウェアの環境に関連する不具合も検出できます。
システムテストが行われるのは、プログラムや機能ごとの確認を行う単体テストや、プログラムを結合してバグがないかを確認する結合テストを終えた、開発の最終段階です。
納品前に全体を通したテストを行うことでシステムの品質を確保し、クライアントに引き渡したあとに残存するリスクをできるだけ減らすことができます。
1. システム開発テストの流れ

一般的にシステムテストは、計画を立ててからテスト環境を構築します。
テストを行うのは、項目の作成やデータの準備、手順を確認したあとです。
計画自体がうまく機能していかなかったり、途中で手詰まりしたりするとプロジェクト全体の進捗にかかわります。
1.単体テスト
システム開発で最初に単体テストを行います。単体テストでは、作成したプログラムを一つずつ単体でテストして正常に動作するかを検証し、個々のモジュール(部品)について機能や性能、運用性などをチェックします。
2.結合テスト
次に結合テストを行います。結合テストでは、単体テストで確認した複数のモジュールを組み合わせて不具合がないか、連結がうまくいくかを検証します。小さな結合から大きな結合まで、いくつかの段階に分けて実行します。
3.システムテスト
最後にすべてのプログラムとハードウェアを合わせてシステム全体のテストを行います。システムテストが、開発者側の最終テストです。
ハードウェアを実際に動かしながら、通常のバッチ処理、月次処理、四半期処理、年次処理など、すべてのサブシステムで想定される処理を一通り実施します。
システムテストは結合テストが終わり、その修正が完了したタイミングで行います。ただし、テスト計画自体はシステムの基本設計の段階からすでにスタートしています。
システムテストの目的は、基本設計で決めた仕様が満たされているかどうかを確認することです。システムテストで問題がなければクライアントに引き渡され、実際に稼働してユーザーテスト(運用テスト)に移ります。
ユーザーテストでも問題がなければ、そのまま本番に移行します。
2. 主なシステムテストの種類

システムテストは検証する内容でいくつかの種類に分かれます。
その中から代表的なシステムテストの内容と項目を解説します。
2-1. 確認テスト
1.回帰テスト(リグレッションテスト)
システムに修正を加えたとき、変更していない部分に影響が出たり、別の箇所に新たな不具合が発生したりしていないかを確認するテストです。
システムを修正する度に、必ず実行します。
2.デグレードチェックテスト
システムに修正を加えたとき、前のバージョンに戻ったり、修正済みのバグが再度発生したりしていないかを確認します。
2-2. 評価テスト
1.セキュリティテスト
外部からの不正アクセス防止や情報漏洩防止など、セキュリティに関する機能が仕様書通りに動作しているかを確認します。
不特定多数の利用者が想定されるシステムでは、不可欠です。
2.ユーザビリティテスト
システムの操作性や学習性、見やすさ、わかりやすさなど、ユーザーにとって使いやすいかどうかを確認します。
利用したユーザーの満足度にもつながります。
3.障害許容性テスト
障害が発生した際に最低限の機能が維持され、システムが動作することを確かめるテストです。
例えば、ハードウェアの故障やデータベースサーバのダウンなど、擬似的な障害を発生させて、障害対応や復旧手順について確認します。
2-3. 負荷テスト
1.性能テスト
システムの性能要件に基づいて、処理能力が仕様を満たしているかどうかパフォーマンスを評価・判定します。
システムの時間効率や資源効率など条件ごとにレスポンスタイムを測定し、最適化を行います。
2.ロングランテスト
一定の期間、システムを連続して稼働させます。
それによりパフォーマンスが落ちたり、停止したりしないかを検証する、システムの信頼性を確認するテストです。
3.ストレステスト
一度に大量のアクセスを行い、過負荷状態でシステムが正常に動作するかを確認します。
排他制御、競合条件、メモリーリークなどを検出し、高い負荷がかかった場合の状況を検証します。
4.ロードテスト
システムの通常時の動きとピーク時の動きを測定し、ピーク時の稼働に耐えられるかを確認します。
5.キャパシティテスト
パフォーマンスを落とさずに稼働できる最大のトランザクションを測定します。
ユーザー数やデータ量が増加した場合、どのようにシステムを増強するかを考慮するためのテストです。
3. システムテストの手順
システムテストはハードウェアを使用し、システム全体をテストします。
業務で使用するアプリケーションの場合は、データも実際と同じものを用いて行います。

1.テスト計画の作成
システムテスト全体の方針や概要をまとめて、「システムテスト計画書」を作成します。計画書には、システムテストの目的や対象範囲、実施方法、テスト環境、スケジュールなど、テスト全体の方向性が定められています。
2.仕様書の作成
システムテスト計画書に基づき、「システムテスト仕様書」を作成します。システムテスト仕様書は、実際に行うテスト作業の内容をまとめたものです。
システムテストのシナリオやテストデータ、テストケースなど具体的な項目のほか、誰がどのテストを行うか、どの程度なら合格とするかの評価基準なども仕様書で決めておきます。
システムテスト計画書やシステムテスト仕様書は、システム開発メンバー全員とクライアントで共有し、方向性を確認します。
3.環境の構築
システムテスト仕様書に基づいて、システムテストを実施する環境を構築します。原則として本番と同じマシンや付属ハードウェアを用意し、ハードウェアやOS、ミドルウェアからシステム全体の動作を検証します。
データもマスターデータ、トランザクションデータなど、本番と同じものを用意します。
本番と同じデータを使用することで、想定外の動作や不具合がないかを確認します。
4.システムテストの実施
システムテスト仕様書で決められたテストを実施します。バグや不具合を発見した場合は、その箇所を修正し、再度テストを行います。
シナリオをすべて実行し、想定したテストデータやテストケースで問題なくシステムが動作することを確認したらシステムテストは終了です。
その後、クライアントに引き渡します。
4. システムテストが高品質を担保する

「何度も仕様や要件の変更がある」「納期が厳しいためテストの時間がない」など、システムテストを満足に行えず、省略されてしまうことも多くあります。
納期によっては、単体テストや結合テストまででテストを終了し、システムテストを省略する場合もあります。
確かに、システムテストには時間もコストもかかりますが、システムテストを行わないと、どこで未知の不具合が発生するかわかりません。
システムテストをしっかり行うことでシステム全体の品質が向上し、運用開始後のメンテナンスが楽になります。
システムテストは費用対効果が高く、システム開発には不可欠なテストといえるでしょう。