ソフトウェアテストにおける耐久性テストとは? (例あり)

⚡ スマートサマリー

耐久性テストは、アプリケーションを通常の負荷条件下で長時間実行し、時間の経過とともにパフォーマンスが低下するかどうかを明らかにするテストです。1時間の負荷テストでは検出できない欠陥を見つけることができるテストです。

  • 🕒 持続負荷: 想定されていた本番環境のトラフィックは、数分ではなく数時間、あるいは数日間も滞留した。
  • 📉 劣化に焦点を当てる: 問題は、目標が一度達成されたかどうかではなく、応答時間が徐々に長引くかどうかである。
  • 💧 共通する所見: メモリリーク、接続プールの枯渇、およびログまたはキャッシュの際限のない増加。
  • 📊 監視対象セット: メモリ、CPU、応答時間、スループット、およびデータベース接続数(実行全体を通して)。
  • 🛠️ ツーリング: 標準的な負荷管理ツールがトラフィックを制御し、APMツールがリソース曲線を記録する。
  • <XNUMXxEXNUMX><XNUMXxEXNUMX><XNUMXxXNUMXA><XNUMXxXNUMX><XNUMXxXNUMXA>️️ トレード・オフ: 結果は価値が高いものの、得られるまでに時間がかかるため、テストの実施頻度が制限される。

耐久テストとは

耐久テストとは何ですか?

耐久試験 非機能タイプのソフトウェア テストでは、継続的な使用下でのソフトウェア アプリケーションの動作を評価するために、長時間にわたって高負荷をかけてソフトウェアをテストします。 耐久性テストの主な目的は、アプリケーションが応答時間の低下なしに長時間の負荷を処理できるかどうかを確認することです。

このタイプのテストは、パフォーマンス実行サイクルの最終段階で実行されます。 耐久性テストは長いプロセスであり、場合によっては XNUMX 年にも及ぶこともあります。 これには、インターネット トラフィックやユーザー アクションなどの外部負荷の適用が含まれる場合があります。 これにより、耐久性テストは次のようなものになります。 負荷テスト通常、2、3 時間ほどで終了します。

耐久性とは容量を意味するため、言い換えれば、耐久性テストを容量テストと呼ぶことができます。

耐久試験の目標

  • 耐久テストの主な目的は、メモリ リークをチェックすることです。
  • 継続的な使用下でシステムがどのように動作するかを確認するため。
  • 長期間経過後も、システムの応答時間がテスト開始時と同じか、それ以上であることを保証するため。
  • 特定のシステムがサポートし、パフォーマンス目標を達成できるユーザーおよび/またはトランザクションの数を決定します。
  • 将来の負荷を管理するには、将来の使用をサポートするためにどれだけの追加リソース (プロセッサー容量、ディスク容量、メモリー使用量、ネットワーク帯域幅など) が必要になるかを理解する必要があります。
  • 耐久性テストは通常​​、システムに過負荷をかけるか、特定のシステム リソースを削減してその結果を評価することによって行われます。
  • これは、比較的「通常」と考えられる使用期間後に欠陥やメモリ リークが発生しないようにするために実行されます。

持久力テストで監視すべき事項

耐久試験

耐久テストでは以下のことがテストされます。

  • メモリリークをテストする– チェックは、システムまたは OS のクラッシュを引き起こす可能性のあるアプリケーションにメモリ リークがないかどうかを確認するために行われます。
  • システムの層間の接続の終了をテストする – システムの層間の接続が正常に閉じられない場合、システムの一部またはすべてのモジュールが停止する可能性があります。
  • データベース接続のテストが正常に終了しました– データベース接続が正常に閉じられない場合、システムクラッシュが発生する可能性があります。
  • テストの応答時間 – システムの長時間使用によりアプリケーションの効率が低下するため、システムの応答時間についてテストされます。

持久力テストの実施方法

以下は耐久テストの基本的なテストアプローチです。

  • テスト環境 – 耐久テストに必要なハードウェア、ソフトウェア、オペレーティング システムを特定し、チーム内の役割と責任を割り当てます。テスト実行前に環境を準備しておく必要があります。また、一般的なデータベースの生産規模と年間成長を見積もる必要があります。これは、1 年後、2 年後、または 5 年後にアプリケーションがどのように応答するかをテストする必要があるため必要です。
  • テスト計画、シナリオの作成 – テストの性質 (手動か自動か、あるいは両方の組み合わせ) に基づいて、 テストケース 設計、レビュー、実行を計画する必要があります。 システムに負荷をかけるテスト、ブレークポイントテストなどもテスト計画に含める必要があります。 システムに負荷をかけるテストによって、アプリケーションのブレークポイントが決まります。
  • テストの見積もり – テスト段階が完了するまでにどれくらい時間がかかるかを見積もってください。 関与するテスターの数と必要なテスト サイクルの数に基づいて分析する必要があります。
  • リスク分析 – リスクを分析し、予防のために適切な措置を講じます。 リスク要因に従ってテスト ケースに優先順位を付け、耐久テスト中にテスターが段階的に行う可能性がある以下のリスクと問題を特定します。
  • パフォーマンスは時間が経っても一定に保たれますか?
  • まだ検出されていない他の小さな問題はありますか?
  • 対処されていない外部干渉はありますか?
  • テストスケジュール – 予算を決め、期限内に成果物を完成させる。 として 耐久試験 トランザクションの巨大ではあるが自然な負荷配置をシステム/アプリケーションに継続的に適用します。

耐久試験例

一方、 ストレステスト テストされたシステムを限界まで引き上げ、 耐久試験 アプリケーションを限界まで引き上げる の経時変化の追跡.

例えば、メモリリーク、データベースサーバーの使用率、システムの応答不能といった最も複雑な問題は、ソフトウェアが長時間稼働した際に発生します。耐久性テストを省略すると、こうした欠陥をデプロイ前に検出できる可能性は非常に低くなります。

耐久試験ツール

  • ウェブロード
  • ロードコンプリート
  • Apache JMeter
  • LoadRunner
  • 前倒し
  • ロードUI
  • OpenSTA
  • Rational Performance Tester

耐久試験のメリット

  • これは、負荷がかかっているシステムがワークロードをどのように処理できるかを判断するのに役立ちます。
  • 顧客がインフラストラクチャのニーズを検証または強化するために使用できる正確なデータを提供します。
  • システムを長期間にわたって高レベルで実行した後に発生する可能性のあるパフォーマンスの問題を特定します。
  • 一般的な問題は、対象を絞った小規模なパフォーマンス テストで特定されます。これは、非常に短いスパンタイムで巨大な負荷が発生した場合でも、アプリケーションが確実に利用可能な状態を維持できることを意味します。
  • 耐久性テストは、長時間実行した後にパフォーマンスの低下がないかどうかを確認するためにも使用されます。

耐久試験のデメリット

  • どれくらいのストレスをかける価値があるのか​​を定義するのは難しいことがよくあります。
  • 耐久性テストは、アプリケーションやネットワークの障害を引き起こす可能性があり、次の場合に重大な中断を引き起こす可能性があります。 テスト環境 孤立していない。
  • システムに過剰な負荷がかかると、永久的なデータの損失や破損が発生する可能性があります。
  • ストレスが除去された後も、リソースの使用率は非常に高いままです。
  • 一部のアプリケーション コンポーネントが応答に失敗します。
  • 未処理の例外はエンド ユーザーによって監視されます。

このテストがパフォーマンス テスト ファミリーにどのように適合するか

性能テストは包括的な用語です。以下のバリエーションは、加える負荷の形状と負荷を維持する時間のみが異なるため、しばしば混同されます。

テストタイプ 負荷パターン 質問に答える
負荷テスト 予想されるピーク負荷、短時間 通常のピーク時トラフィックにおいて、システムは目標を達成しているか?
ストレステスト 容量を超えて増加し、最終的に故障する どこで壊れるのか、そして、それは優雅に失敗するのか?
スパイクテスト 急激な上昇、その後の下落 交通渋滞による衝撃から生き残り、回復できるだろうか?
耐久試験 通常の負荷を何時間も保持 時間の経過とともに性能は低下しますか?
浸漬試験 長期間にわたる持続的な負荷 メモリリークやリソース枯渇は発生していますか?
安定性テスト 様々な条件下での負荷の変化 状況が変化しても、システムは信頼性を維持できるのか?
ボリュームテスト 一般ユーザー、データ量が非常に多い データベースの規模が拡大しても対応できますか?

耐久試験と浸漬試験は、しばしば同義語として扱われる。 一般的には、どちらも長時間にわたって負荷を持続させるテストです。しかし、チームによっては両者を区別する場合、耐久テストは応答時間が上昇するかどうかに焦点を当て、負荷テストはメモリ、ファイルハンドル、接続プールなどのリソース消費に焦点を当てます。通常、どちらか一方を実行すれば、両方のテスト結果を得ることができます。

テスト中に取得すべき主要指標

パフォーマンステストの精度は、実行中に記録した内容によって決まります。サーバー側とクライアント側の両方で以下の6つの項目を記録し、直感ではなく基準値と比較してください。

メトリック それが何を意味するか 警告サイン
平均応答時間 典型的なユーザー体験 ランニングコース全体にわたる上昇傾向
95パーセンタイル応答時間 最も動作の遅いユーザーの体験 平均をはるかに上回る、つまり一貫性がない
スループット 1秒あたりに処理されるリクエスト数 荷重が一定の状態で落下する
エラー率 失敗またはタイムアウトしたリクエストの割合 合意されたしきい値を超える上昇
CPUとメモリの使用状況 サーバーリソースの余裕 記憶は上昇し、二度と戻ってこない
データベース接続とスレッド プールでの疲労 リリースなしで着実に増加する数

平均値とパーセンタイル値を一緒に読み取ってください。 平均応答時間が800ミリ秒で、95パーセンタイル値が900ミリ秒であれば、システムは安定していると言えます。一方、同じ平均応答時間でも95パーセンタイル値が9秒であれば、20人に1人のユーザーが応答に問題を抱えていることを意味し、平均値ではその問題が隠蔽されていることになります。

値だけでなく、形状にも注目してください。 長時間のテストでは、リソースのグラフが横ばいであれば合格、上昇していれば漏洩と判断されます。たとえテスト終了時点で絶対値が許容範囲内に収まっていても、この判断は変わりません。

持久力テスト:重要なポイント

  • In ソフトウエアエンジニアリング, 耐久テストは負荷テストのサブセットです。
  • 耐久性テストは長いプロセスであり、場合によっては XNUMX 年かかる場合もあります。
  • 確認のためにチェックが行われます
  • メモリリークをテストする
  • テストの応答時間
  • データベース接続のテストなど。

よくあるご質問

負荷試験では、システムが短時間の運転で最大負荷時の目標値を満たしていることを確認します。耐久試験では、通常の負荷を数時間維持し、運転終了時にも目標値が維持されているかどうかを確認します。

応答時間やリソース使用量に持続的な上昇傾向が見られる場合、たとえ閾値を超えていないとしても、それは問題です。欠陥はドリフトそのものであり、本番環境ではいずれ限界を超えてしまうからです。

機能テストと負荷テストに合格した後、発見された不具合を修正できる十分な時間的余裕を持って実施してください。リリース前夜に実施すると、結果に基づいて対策を講じる時間がなくなってしまいます。

AIベースの監視は、指標の傾向が変化する時点を検出し、それをデプロイメントやスケジュールされたジョブと関連付けることで、何時間にも及ぶグラフを特定の容疑者へと変換します。

優先順位付けに役立ちます。リスクモデルは、どのリリースがリークしやすいコードに触れるかを明確にするため、フル実行は最も必要となる可能性の高い変更に限定されます。