システム・テストは、システム全体の性能ベースのエンド・ツー・エンドのソフトウェア・テストです。このエンド・ツー・エンドテストには、Functional Testing、Non-Functional Testing、インターフェース・テスト、ストレス・テスト、およびリカバリー・テストの側面が含まれます。
このユニットを持つ顕微鏡で、その最大倍率でソフトウェア・システムを見ていると想像してくださいこれは、ソフトウェア・システムの基本的な構成要素です。次に、ビューが外側に拡大すると、次のレベルの拡大、つまり個々のユニットによって作成されたモジュールが含まれます。最後に、完全にズームアウトすると、システム・レベルに到達します。このレベルの拡大率では、システム内のすべてと、それらのモジュールによって作成されたすべてのコンポーネントがどのように連携して動作するかを確認できます。
システム・テストはある意味で顕微鏡のサイトに似ていますが、重要な違いがあります。システム・テストはブラックボックス・テストの一種であり、テスターがシステム全体の機能よりも、システムのアセンブリーに含まれるコンポーネントのビューに関心がなく、このような「合格/不合格」の観点から見ると、システムの動作は、システムの性能に関連するものであれば、唯一注目に値します。(ホワイトボックス・テストにより、システム内のコンポーネントの性質をより詳細に可視化できます)。
システム・テストでは、多くの場合、特定のソフトウェア・システム内で連携して動作する場合とそうでない複数の個別のソフトウェア・システムの分析が含まれます。
IBMニュースレター
AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。登録の際はIBMプライバシー・ステートメントをご覧ください。
ニュースレターは日本語で配信されます。すべてのニュースレターに登録解除リンクがあります。サブスクリプションの管理や解除はこちらから。詳しくはIBMプライバシー・ステートメントをご覧ください。
宇宙ロケットの打ち上げに至るまでのカウントダウンを考えてみましょう。点火から発射の前の劇的な10ステップのカウントダウンは誰もが覚えていますが、フライト長に尋ねられ、「ゴー」と積極的に答えた多数の部門チェックを覚えている人はほとんどいません。典型的な宇宙打ち上げでは、計画された運用、ミッションの安全性、宇宙機のシステム、予想される気象条件など、数多くの事項について部門長らに意見を求めます。各部門が質問を受け、各部門長が順番に応答します。
同様に、システム・テストは、新しいソフトウェア・システムを起動する前の最終チェックリストと考えることができます。ソフトウェアの既知のバグのクリーンアップの最終回が完了しました。そして、初期の宇宙先駆者が考案した歴史的なチェックオフ・リストと同じように、システム・テストに含まれる各「部門」の最終的な決定にすべてをもたらします。
各クエリは、システムの機能の観点から日取りされます。
システム・テストについて説明するときは、当然ながら依存関係の話題に遭遇します。依存関係とは、テスト・ケース内に存在する関係です。このような状況では、あるテスト・ケースの成果が別のテスト・ケースの成果に部分的または完全に依存する可能性があります。依存関係には、機能、テスト環境、またはセキュリティー・ポリシーも含まれる場合があり、組織が維持するテスト・プロセス全体に影響を与える可能性もあります。
システム・テストの方法論では、内部の仕組みについて詳しく知ることはできません(これはブラックボックス・テストの一種であることを忘れないでください)。その代わりに、特定のアプリケーションが動作するかどうかを知ることができます。システム・テストは、ソフトウェア・アプリケーションの全体的な機能を決定する際に、ギャップ、エラー、または欠落している要件を特定するのに役立ちます。
システム・テストは通常、統合テストの後、受け入れテストの前に実施されます。これにより、全てのコンポーネントが適切に連携して機能することが保証されます。ご覧のように、多くの場合、システムの機能的側面と非機能的側面の両方が含まれます。厳密に機能する領域と広範な非機能領域の両方に基づいているため、ユーザビリティー、セキュリティー、性能などの領域に影響を及ぼします。
システム・テストの主な目的の1つは、ソフトウェアのコーディング言語を使用可能なプログラムに変換できることをV検証することです。ただし、システム・テストの包括的な目標は、評価対象のソフトウェアが利用するユーザーのビジネス要件を適切にサポートしていることを確認することです。
テスト・プロセスは、使用されるのと同じ運用環境を反映することを目的としており、変化する現実世界の状況に応じて必要に応じてソフトウェアが機能することを確保します。同様に、テスト・データは現実世界のデータや状況を模倣するように作成されます。テスト・ケースが実施されると、ソフトウェアの欠陥を特定して修正できます。
システム・テストは、主に3つのグループのいずれかに分類できます。1つ目はFunctional Testingです。これは性能に関係するものですが、ソフトウェアが約束したとおりに機能するかどうかの確認以上に、深い答えは求めません。Functional Testingの主な種類をいくつか紹介します。
Functional Testingは非常に重要な情報を提供しますが、そのデータは基本的に、システムが想定通りに動作するかどうかに基づく賛成か反対かの判断に限定されます。これにより、システム・セキュリティー、UX、性能面など、膨大な数の関連変数が省略されます。
非機能システム・テストは、システムがどのように動作するかを判断する手段を提供します。Functional TestingとNon-Functional Testingの本質的な違いは、次の単純な比較に集約できます。
このことを念頭に置いて、非機能システム・テストの主な形式をいくつか次に示します。
機能テスト、非機能テストというカテゴリーに分類されずに、他のタイプのシステム・テストも役に立ちます。ここでは、これらの方法論の中で最も注目に値するものをいくつか紹介します。
システム・テスト・プロセスでは極めて包括的なブラックボックス性能テストが実施されますが、システム・テストの実行には潜在的な問題がないわけではありません。
システム・テストが満たさなければならない要件は、その組織に固有のビジネス要件、そのソフトウェアに固有の機能要件、またはそのオペレーションに適用される可能性のある指定要件など、多岐にわたります。実際、オペレーティング・システムが吸収する必要があるシステム要件が不足していることは決してないようです。多くの場合、要件の変更によりシステムが混乱し、不完全なテスト・ケースのバッチが残されたままになる可能性があります。
期限がビジネス環境に大混乱をもたらす可能性があることは、誰もニュースとして認識されるべきではありません。締め切りは、仕事のスケジュールがカレンダー主導の期待と予定が異なる場合に、厳しい影響を生み出すための伝説的な存在です。ソフトウェア開発における期限というプレッシャーは、適切かつ十分なシステム・テストが多くの場合、すぐに変更され、不完全な方法で実施されるか、完全に無視されることに起因します。多くの場合、ソフトウェア開発ライフサイクルの後半での再テストが必要になります。
システム・テストは、孤立した状態で、あるいは手間をかけずに行われることはありません。それには、テスト・チームの熟練した作業、その作業を支援するテストツール、そしてそもそもそれを可能にするための十分な予算が必要です。これらのコンポーネントがないと、その場所にショートカットが実装されやすく、テストが不完全になります。そして、その方程式の一部が変更または否定されると、そのアプリケーションまたはソフトウェア製品のシステム・テストから得られる成果に悪影響を与える可能性があります。
多くの潜在的な脆弱性はテスト・プロセス中にアセスメントできますが、ソフトウェア・エンジニアリング・スタッフがそのようなアセスメントを行うことができるのは、作業しているテスト環境をサポートし、管理している場合に限られます。テスターが安定した環境で作業していないと、ソフトウェアの潜在的な欠陥を見逃しやすくなります。また、不安定な環境にあるテスト担当者が修正の必要なソフトウェアのバグを発見した場合、後でそのバグを再現するのが困難になることがよくあります。
作業にソフトウェアの品質保証が含まれる場合、コンピューター・コードの行をレビューするのは骨の折れる作業であり、退屈で時間がかかる可能性があります。こうした作業をさらに不快なものにしているのは、テスター、開発者、その他の利害関係者間でコミュニケーションのギャップが生じている場合です。他のビジネス活動と同様、コミュニケーション上の問題は誤解を招き、欠陥が検出を避け、オペレーティング・システム内に根付いてしまう実稼働環境を構築します。
テストの手法はさまざまで、成果は、単純に理解されたテスト・データから、テスト・フェーズ中やテスト・フェーズ後により重大な管理を必要とする膨大で複雑なデータセットまで、あらゆる段階で変化します。テスト環境が本番環境を完全に反映していない場合、プロジェクトの複雑さのレベルはさらに高まります。ソフトウェア開発プロセス中に実装されるストラテジーでは、これらの問題を最適に回避する方法を検討する必要があります。
Javaアプリケーションを開発および配信するためのフルマネージドのシングルテナント・サービス。
DevOpsソフトウェアとツールを使用して、複数のデバイスや環境でクラウドネイティブ・アプリケーションを構築、デプロイ、管理します。
クラウド・アプリケーション開発は、一度構築すれば、迅速に反復し、どこにでもデプロイできます。