ソフトウェアテストにおけるストレステストとは何ですか?
⚡ スマートサマリー
ストレステストは、アプリケーションを通常の動作限界を超えて負荷をかけ、限界点を見つけ出し、障害が適切に処理されることを確認し、極端な負荷が取り除かれた後にシステムが正常に復旧することを証明します。
ストレステストとは何ですか?
ストレステスト ストレステストは、ソフトウェアアプリケーションの安定性と信頼性を検証するソフトウェアテストの一種です。ストレステストの目的は、極めて高い負荷条件下でのソフトウェアの堅牢性とエラー処理能力を測定し、緊急時にソフトウェアがクラッシュしないことを確認することです。意図的に通常の動作範囲を超えたテストを行い、極限状態におけるソフトウェアの動作を評価します。
ストレステストでは、テスト対象アプリケーション(AUT)に短時間負荷をかけ、その耐性を調べます。ストレステストの最も重要な用途は、システム、ソフトウェア、またはハードウェアが破損する限界値を特定することです。また、その限界値を超えた場合に、システムが効果的なエラー管理を行うかどうかも確認します。
In ソフトウエアエンジニアリングストレステストは、しばしば以下の項目と並んで挙げられます。 耐久試験しかし、この2つには違いがあります。ストレス試験は、短時間で異常に高い負荷をかけて破壊点を見つけるのに対し、耐久(浸漬)試験は、適度な負荷を数時間かけて保持し、徐々に劣化していく様子を明らかにします。
以下のスクリーンショットは、ウェブページから大量のデータがコピーされている様子を示しています。
テスト対象のアプリケーションは、ウェブサイトから5GBのデータをコピーしてメモ帳に貼り付けると負荷がかかります。メモ帳は負荷がかかり、「応答なし」というエラーメッセージを返します。これは次のスクリーンショットに示されています。
同じ原理は、サーバー側のシステムにもそのまま適用できる。
ストレステストの必要性
ストレステストの活用が明確になる、以下の実際の事例を考えてみましょう。
- フェスティバル期間中、オンラインショップping サイトへのアクセス数が急増したり、セールを発表したりすることがある。
- ブログが大手新聞で言及されると、トラフィックが突然急増します。
このような異常なトラフィック急増に対応するためには、ストレステストを実施することが不可欠です。この急激なトラフィック増加に対応できない場合、収益と評判の損失につながる可能性があります。
ストレステストは、以下の理由からも非常に価値があります。
- システムが異常な条件下でも正常に動作するかどうかを確認します。
- システムに負荷がかかっている際に、適切なエラーメッセージが表示されることを確認します。
- 極限状況下でのシステム障害は、莫大な収益損失につながる可能性がある。
- 事前にストレステストを実施することで、極端な状況に備える方が良いでしょう。
次のセクションでは、ストレステストが成功するために証明しなければならない事項について説明します。
ストレステストの目標
ストレステストの目的は、システム障害発生後の動作を分析することです。ストレステストを成功させるには、システムが極限状態にあるときに適切なエラーメッセージを表示する必要があります。
ストレステストを実施する際には、膨大なデータセットが使用されることがありますが、システム障害発生時にそのデータが失われる可能性があります。テスターは、ストレステスト中にセキュリティ関連データが失われないようにする必要があります。
ストレステストの主な目的は、システムが障害発生後に復旧することを確認することであり、この特性は復旧性と呼ばれる。 回復テスト 次に、その復元手順を詳細に検証します。
負荷テストとストレステストの比較
どちらのテクニックも 性能試験 家族向けなので、混同しやすい。下の図は、2つの負荷プロファイルを比較したものである。
| 負荷テスト | ストレステスト |
|---|---|
| 負荷テスト 通常のワークロード条件下でのシステム動作をテストし、実際に想定されるワークロードをシミュレートします。 | ストレステストは、極限状態におけるシステムの動作をテストするもので、システムが故障するまで実施されます。 |
| 負荷テストはシステムを破壊しません。 | ストレステストとは、大量のデータをシステムに送り込んだり、リソースを極端に不足させたりすることで、意図的にシステムを破壊しようとするテストである。 |
関連プロフィールには以下が含まれます スパイクテスト (突然の短い爆発) ボリュームテスト (多数のユーザーではなく、大量のデータ) スケーラビリティテスト (成長の余地がある)。
ストレステストの種類
以下に、ストレステストの種類を一つずつ説明します。
分散型ストレステスト
分散クライアント/サーバーシステムでは、サーバーからすべてのクライアントに対してテストが実行されます。ストレスサーバーの役割は、ストレステストのセットをすべてのストレスクライアントに配布し、 trackは各クライアントの状態を示します。クライアントがサーバーに接続すると、サーバーはクライアント名を追加し、テスト用のデータの送信を開始します。下の図は、ストレスサーバーが一部のクライアントには到達するものの、他のクライアントには到達しない様子を示しています。
一方、クライアントマシンは、サーバーとの接続が維持されていることを確認する信号(ハートビート)を送信します。サーバーがクライアントマシンから信号を受信しない場合、そのマシンをデバッグのためにさらに調査する必要があります。図では、サーバーは2台のクライアント(Client1とClient2)とは接続できますが、Client3とClient4からは信号を送受信できません。
こうしたストレステストのシナリオでは、一晩かけて実行するのが最善の選択肢です。大規模なサーバーファームでは、調査が必要なストレス障害が発生したコンピューターをより効率的に特定する方法が必要です。
アプリケーションストレステスト
このテストは、単一のアプリケーションにおけるデータロックとブロッキング、ネットワークの問題、およびパフォーマンスのボトルネックに関連する欠陥の発見に重点を置いています。
取引ストレステスト
これは、2つ以上のアプリケーション間の1つ以上のトランザクションに対してストレステストを実行します。システムの微調整と最適化に使用されます。
全身性ストレス検査
これは、同一サーバーを共有する複数のシステム間で実行できる統合ストレステストです。あるアプリケーションが別のアプリケーションのデータ処理をブロックしてしまうような不具合を検出するために使用されます。
探索的ストレス試験
これは、実際のシナリオでは発生しそうにない異常なパラメータや条件下でシステムをテストするために使用されるストレステストの一種です。次のような予期せぬ状況における欠陥を発見するために使用されます。
- 多数のユーザーが同時にログインしました。
- 全てのマシンで同時にウイルススキャナーを起動します。
- ウェブサイトからアクセスされている最中に、データベースがオフラインになる。
- 大量のデータが同時にデータベースに挿入されている。
どちらのバリアントが適用されても、実行順序は同じです。
ストレステストはどうやって行うのですか?
ストレステストのプロセスは、主に以下の5つのステップで実行できます。
- ステップ 1) ストレス テストを計画する: ここでは、システムデータを収集し、システムを分析し、ストレステストの目標を定義します。
- ステップ 2) 自動化スクリプトを作成します。 このフェーズでは、ストレステストの自動化スクリプトを作成し、ストレスシナリオ用のテストデータを生成します。
- ステップ 3) スクリプトの実行: この段階では、ストレステストの自動化スクリプトを実行し、ストレステストの結果を保存します。
- ステップ 4) 結果分析: この段階では、ストレステストの結果を分析し、ボトルネックを特定します。
- ステップ5)微調整と最適化: この段階では、目標とするベンチマークを満たすことを目指して、システムの微調整、構成の変更、コードの最適化を行います。
最後に、調整によって望ましい結果が得られたかどうかを判断するために、サイクル全体を再度実行します。たとえば、パフォーマンス目標が達成されるまでにストレス テスト プロセスを 3 ~ 4 サイクル実行する必要があることは珍しくないため、スクリプトは通常、 回帰 上。
ストレステストに推奨されるツール
以下の4つのツールは、エンタープライズ向けスイートから無料のオープンソースオプションまで、ほとんどのニーズに対応しています。
LoadRunner
LoadRunner は広く使われている負荷テストツールで、現在は OpenText HPからMicro Focusに移行した後、Professional、Enterprise、およびCloudエディションで OpenTextLoadRunnerによって生成された負荷テスト結果は、ベンチマークとして扱われます。
JMeter
Apache JMeter はオープンソースのテストツールです。 Java ストレスおよびパフォーマンス テスト用のアプリケーションであり、負荷、機能、ストレスなどのテスト タイプをカバーすることを目的としています。現在の 5.6.x リリースでは Apache JMeter 必要とする Java 8歳以降で、 Java 17件のおすすめ。
ストレステスター
このツールは、Webアプリケーションのパフォーマンスを詳細に分析し、結果をグラフィカルな形式で表示します。使い方も簡単です。高度なスクリプトは不要で、投資対効果は低く抑えられます。trac小規模チーム向け。
Neo負荷
Neo負荷、現在は Tricentis ポートフォリオは、Webと モバイルアプリケーション数千人のユーザーをシミュレートすることで、負荷がかかった状態でのアプリケーションのパフォーマンスを評価し、応答時間を分析できます。また、クラウド統合型のパフォーマンス、負荷、ストレステストをサポートし、拡張性にも優れています。
その他のオプションはガイドに記載されています パフォーマンステストツールどちらを選択しても、その出力は以下の指標に対してのみ意味を持ちます。
ストレステストの指標
メトリクスはシステムのパフォーマンスを評価するのに役立ち、一般的にストレステストの最後に分析されます。よく使用されるメトリクスは、大きく3つのグループに分類されます。
拡張性とパフォーマンスの測定
- ページ/秒: 1秒あたりにリクエストされたページ数を測定します。
- スループット: 基本的な指標としては、1秒あたりの応答データサイズが挙げられる。
- ラウンド: テストシナリオが計画された回数と、クライアントが実際に実行した回数の比較。
アプリケーションレスポンス
- ヒットタイム: 画像またはページを取得するのにかかる平均時間。
- 最初のバイトまでの時間: データまたは情報の最初のバイトを返すのにかかる時間。
- ページタイム: ページ上のすべての情報を取得するのにかかる時間。
失敗
- 接続失敗: クライアントによって拒否された接続失敗数(信号が弱いため)。
- 失敗したラウンド: 失敗したラウンド数。
- 失敗したヒット: システムによる試行失敗回数(リンク切れまたは未表示画像)。
最後のセクションでは、ストレステストを実施することが最も正当化される状況を列挙しています。
ストレステストの例
ストレステストは、イベントによってトラフィックが日常の基準値を大幅に超えることが予想される場合に有効です。
- フェスティバルセールを告知するECサイト。
- 重大な出来事が発生した時点でのニュースウェブサイト。
- 教育委員会が試験結果を公表する。
- ソーシャルネットワーキングサイト、ブログ、モバイルアプリは、バイラル現象の際に活用される。
いずれの場合も、テストはメモリ、プロセッサ、ネットワークなどのリソースを監視し、負荷がかかった状態で適切なエラーメッセージが表示されることを確認し、その後システムが正常に戻ることを確認します。 ソフトウェアテストのライフサイクル 非機能チェックとして システムテスト そしてより広いセット ソフトウェアテストの種類.

.png)
.png)

