パフォーマンス・テストでは、さまざまな規模の負荷がかかった状態での、システムのパフォーマンスまたはアプリケーションのパフォーマンスを判断します。
主な基準には、速度(どれだけ速く動作するか)、安定性(クラッシュせずに動作するか)、拡張性(増加する負荷がどれだけスムーズに処理されるか)、応答性(ユーザーのプロンプトにどれだけ速く応答するか)などがあります。
ソフトウェア性能の概念はあらゆるコンピュータの使用の根底にあり、性能が低いと、質の高いユーザー・エクスペリエンスを提供するための組織の最善の努力が台無しになる可能性があります。開発者がパフォーマンス・テストを適切に監督しない場合、またはパフォーマンス・テストを十分な頻度で実行しない場合、パフォーマンスのボトルネックが発生する可能性があります。この状況は、予想される期間中における典型的なトラフィック負荷であってもシステムの処理能力を阻害する可能性があります。予期せぬピーク使用時にさらなる需要が生じると、問題はさらに深刻になります。
この課題は、企業の対外的なオペレーション全体を危険にさらす可能性があります。品質に対する定評を得るには、通常、長い期間を要します。しかし、システムやアプリケーションが信頼できる機能性を持って動作するかどうか、一般の人々が疑問を持ち始めると、評判に対してすぐに永久的な損害を与える可能性があります。エンド・ユーザーの忍耐力は、ますます限られたものになりつつあります。企業の評判が危険にさらされることが多いため、性能に関する問題が話題になる場合は、さまざまな面で重要な意味を持ちます。
IBMニュースレター
AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。登録の際はIBMプライバシー・ステートメントをご覧ください。
ニュースレターは日本語で配信されます。すべてのニュースレターに登録解除リンクがあります。サブスクリプションの管理や解除はこちらから。詳しくはIBMプライバシー・ステートメントをご覧ください。
まず、ほとんどのパフォーマンス・テスト・シナリオで使用される方法論を定義しましょう。6つの複数パートに分かれたステップで、一般的なパフォーマンス・テスト・プロセスを定義します。
すべてのテストをあらゆる状況で使用すべき、というわけではありません。開発者やその他のテスターは、テストが何の分析を意図しているのかを定義する必要があります。
まず、上位の使用シナリオを範囲設定し、実際のユーザーのやり取りを反映したテスト・ケースを設計します。次のステップは、テスト・プロセス中に使用されるテスト・データとワークロードを指定することです。
これらの変数をロックダウンした後、テスターは使用するパフォーマンス・テスト・ツール、テスト・スクリプト、およびテスト手法を選択します。このステップには、コードに基づく品質ゲートにより、後の本番手順へのアクセスを許可または拒否するプロセスであるゲーティングの設定が含まれます。
パフォーマンス・テストでは帯域幅も調べ、データ転送速度がワークロードのトラフィックを十分に処理できることを確認すします。
パフォーマンス・テスト・プロセスを正式に開始する前に、最後のステップを実行する必要があります。テスターは、システムの実際の本番環境を正確に模倣したテスト環境を構築し、テスト対象のソフトウェア・アプリケーション(AUT)がテスト環境内にデプロイされていることを確認します。
最終準備には、テスト中にシステムによって生成されたパフォーマンス・メトリクスを取得するための監視ツールの統合が含まれます。
ここまででテスト・パラメーターが明確に定義されたので、パフォーマンス・テストを実行します。テスターまたはテスト・オートメーションは、選択されたテスト・シナリオを実行し、それらのテストはパフォーマンス・テスト・ツールと共に使用されます。
テスターは通常、システムのパフォーマンスをリアルタイムで監視するため、スループット、応答時間、リソースの使用状況をチェックできます。テスト・シナリオ全体を通じて、テスターはパフォーマンスのボトルネックやテスト・メトリクスに反映されているその他のパフォーマンス関連の異常を監視します。
次に、テスターはテスト・プロセス中に収集されたパフォーマンス・データを評価します。収集されたデータに目を通し、改善が必要なパフォーマンス領域を探します。
次に、テスターはこれらのテスト結果を、テスト・プロセスの最初のステップで確立されたパフォーマンス・ベンチマークと比較します。この比較を通じて、テスターは、テスト結果が予想されるパフォーマンスからどこで乖離し、どこでボトルネックが発生する可能性があるのかを知ることができます。
テスト・データの分析を通じて性能の問題を特定した後、開発者はコードを使ってシステムを更新します。コードの最適化、リソースのアップグレード、または構成変更を使用して、挙げられた性能の問題を軽減します。
変更を実装した後、開発者はソフトウェアのテスト・シーケンスを繰り返し、変更が正常に適用されたことを確認します。開発者は、結果が定義されたベンチマークと一致するまで、この手順を繰り返します。
パフォーマンス・テストは、システムまたはアプリケーションのアウトプットを内部で詳細までチェックするため、ソフトウェア開発チームがパフォーマンス・テスト手法の最も一般的なユーザーであることは自然な成り行きと言えます。この最初のユーザー グループには、開発者、品質保証(QA)エンジニア、 DevOpsチームなど、開発プロセスに積極的に関与する専門家が含まれます。それぞれがパフォーマンス・テストから独自の情報を取得します。
次のユーザー・グループは、開発者ではありませんが、それでもシステムのパフォーマンス管理を仕事の主要な要素として、現場レベルで働いています。
しかし、パフォーマンス・テストを実施するのは会社の経営陣だけではありません。多くの組織や企業では、あらゆる規模で、さまざまな目的でパフォーマンス・テストを頻繁に利用しています。
開発者は、特定の種類の結果データを導き出し、特定のストラテジーをサポートするために、さまざまな種類のパフォーマンス・テストを実行します。ここでは、最も一般的な種類のテストを紹介します。
負荷テストは、予想される負荷で動作するときにシステムがどのように動作するかを示します。負荷テストの目的は、平均的な同時ユーザー数による通常の作業条件下でルーチン規模のワークロードが発生した際のシステム動作を示すことです。
例:電子商取引Webサイトの場合、テスターはサイト・ユーザーとして品目を購入し、カートに商品を入れて、その購入代金を支払う手順をシミュレートします。
負荷テストは、システムが通常の負荷条件に対応できるかどうかを示します。拡張性によって、処理されるデータ量やユーザーの負荷が増え、そのシステムはストレスにさらされます。このテストは、増加したペースに対応しながら結果を達成できるかどうかを示します。
例:垂直スケーリングでは、開発者はデータベース・サーバーのCPUとメモリを増強して、より大量のデータ・クエリに対応できるようにする場合があります。
ストレス・テストは、潜水艦の乗組員による潜水試験に似ています。このテストでは、システムが限界点に達するまでにどれだけの時間がかかるかを正確に判断するために、理解されている運用上の限界まで負荷をかけ、さらにそれを超えたストレスを与えます。
例: フェイルオーバー・テストは、コンポーネントの障害をシミュレートすることから始まる極端な形式のストレス・テストです。目標は、システムが回復してオペレーションを再開するために要する時間を確認することです。
このテストでは、ユーザー・トラフィックやデータ量の転送において、アクティビティが急増した場合の、別の種類のストレスをテストします。システムは通常のオペレーションを続けながら、さまざまな変化に対応しなければなりません。
例:Webサイトを運営する企業は、障害に備えるだけでなく、オンライン状態を復旧すると同時にサイトにアクセスしようとするユーザーが急増することにも備える必要があります。また、システムが需要の急激な増加に対応できるかどうかを評価する必要もあります。スパイク・テストでは、そういった事態にどれほどスムーズに対処できるのか、その可能性を計測できます。
時には、パフォーマンスと並行して、ユーザー・トラフィックについて議論することがあります。対照的に、ボリューム・テストは、システムが大量のデータをどのように管理するかに関係しています。データの質を落とすことなく、システムはデータを完全に処理し、データ・ストレージを提供できるでしょうか。
例:ある診療所では、膨大な患者情報を保管しており、それらの患者記録や関連する医療データにアクセスできることが法的に義務付けられています。こうしたデータの絶え間ない流入は、システムのストレスにつながります。ボリューム・テストにより、ユーザーは自身のシステムが、断続的により多くのデータを受け入れるという課題に対応できるかどうかを知ることができます。
このテストは、長期にわたるパフォーマンス・テストと考えてください。耐久性テスト(ソーク・テストとも呼ばれる)が見つけ出す本質的な問題は、長期間にわたって発生することが多いデータの劣化とメモリ・リークの問題です。
例:ソーシャル・メディア・プラットフォームは24時間稼働しており、継続的に使用すると、プラットフォームの安定性、データストレージ、ユーザー・アカウントに問題が生じる可能性があります。耐久性テストでは、現在のオペレーションの全体像と将来のパフォーマンスの指標が得られます。
開発者とテスターは、パフォーマンス・テスト用に設計された多数のツールから選択できます。ここでは、最も人気の高いものをいくつか紹介します。
コンピュータに関連するほぼすべての事柄と同様に、人工知能(AI)は現在、ソフトウェア・テストをまったく新しいレベルの効率に押し上げています。これにより、全体的なパフォーマンス・テスト・プロセスがより速く、より正確になり、自動化が容易になりました。
具体的には、AIは短いテスト・サイクルを採用できるため、テストの実行にかかる時間が短縮されます。また、AIの卓越した精度により、人間のテスターが見逃す可能性のある、より微妙なパフォーマンスの変化に気づくことができます。また、予測分析を通じて、AIは運用傾向と履歴データを評価し、次にボトルネックが発生する可能性のある場所と時期を予測できます。また、その予測的なシステム動作を活用し、それに基づいてテスト・パラメーターを調整することもできます。
しかし、これまでのところ、AIがパフォーマンス・テストのために行った最も重要なことは、自動化を可能にすることで大規模な取り組みを支援したことです。この自動化が際立っているのは、パフォーマンス・テスト・プロセスをすべて実行できる点です。
AIはテストの実施方法を自動化できるだけでなく、実行を目的としたテスト・スクリプトを作成することもできます。さらに、バックエンドでテスト結果を解釈し、問題の状況を修正するためのガイダンスを提供できます。
パフォーマンス・テストに対するAIの影響の中で最も興味深い、有望な影響の1つは、人間とAIのコラボレーションの増加です。このような取り組みによって、人間の本能と知識が依然として重要な役割を果たすことがわかります。実際、状況によっては、人間の衝動に従うことが依然として最も重要な指針となります。
一部の専門家は、将来のパフォーマンス・テストはこのハイブリッド・アプローチを採用することになると確信しています。このアプローチでは、コンピューターの思考や処理能力と、人間の文脈的感覚やニュアンスを組み合わせます。
オンプレミス、クラウド、またはメインフレームのあらゆるアプリケーションのソフトウェア配信を自動化します。
DevOpsソフトウェアとツールを使用して、複数のデバイスや環境でクラウドネイティブ・アプリケーションを構築、デプロイ、管理します。
IBMのクラウド・コンサルティング・サービスで新しい機能にアクセスし、ビジネスの俊敏性を高めましょう。ハイブリッドクラウド戦略や専門家とのパートナーシップを通じて、ソリューションを共創し、デジタル・トランスフォーメーションを加速させ、パフォーマンスを最適化する方法をご覧ください。