耐久テストとは

耐久テスト(Endurance Testing)とは、システムが長期間にわたる継続的な負荷状況下で安定して稼働し続ける能力を評価する非機能テストの一種

耐久テスト(Endurance Testing)は、ソフトウェアテストの一種であり、システムが長期間にわたる継続的な負荷状況下で安定して稼働し続ける能力を評価するために実施される非機能テストです。このテストは、システムがメモリリーク、データベース接続の枯渇、ディスクI/Oのボトルネック、CPU使用率の異常上昇など、時間経過と共に発生しうるパフォーマンスの劣化やリソース関連の問題を抱えていないかを確認することを主な目的とします。

耐久テスト の基本的な概念

システムの性能が単発的なピーク負荷に対応できることと、それが長期間維持できることは異なります。耐久テストは、まさに後者の側面、すなわちシステムの持続的な安定性に焦点を当てます。

主要な概念は以下の通りです。

  1. 目的:
    • システムの長期的な安定性と信頼性の検証。
    • メモリリークやリソース枯渇などの潜在的な問題の特定。
    • パフォーマンスの経時的な劣化傾向の把握。
    • システムの限界とボトルネックの発見。
  2. 負荷の継続性: 通常の負荷テストが短期間に集中した高負荷をシミュレートするのに対し、耐久テストは数時間から数日、あるいは数週間にわたって、定常的な、あるいは徐々に増加する負荷をシステムにかけ続けます。
  3. 監視対象: テスト中は、以下の主要なシステムリソースとパフォーマンスメトリクスを継続的に監視します。
    • CPU使用率: プロセスごとのCPU消費状況。
    • メモリ使用量: ヒープメモリ、非ページプール、ページプールなど、アプリケーションとシステムのメモリ消費量。
    • ディスクI/O: ディスクへの読み書き速度とキューの長さ。
    • ネットワークI/O: スループット、レイテンシ。
    • データベース接続数と応答時間: データベースへの接続プールとクエリ実行時間。
    • アプリケーションログ: エラー、警告、例外の発生状況。
    • トランザクション応答時間: 各ビジネスプロセスの処理時間。

耐久テスト の実施プロセス

耐久テストは、計画段階から結果分析まで、体系的なプロセスを経て実施されます。

  1. 計画フェーズ:
    • 目的の明確化: 何を検証したいのか(例:メモリリークの検出、24時間稼働時の安定性)。
    • テスト環境の準備: 本番環境に近いハードウェア、ソフトウェア構成のテスト環境を構築。
    • テストシナリオの設計: 実際の運用状況を反映したユーザー行動やトランザクションのパターンを定義。
    • 負荷プロファイルの決定: テスト期間、同時接続ユーザー数、トランザクションレートなど、継続的にかける負荷のレベルを設定。
    • 監視対象メトリクスの選定: テスト中に収集すべきパフォーマンスカウンターやログを定義。
    • 成功基準の定義: テストが成功と見なされるための、リソース使用率や応答時間の閾値などを設定。
  2. 実行フェーズ:
    • 定義された負荷プロファイルに基づいて、テストツール(例:JMeter, LoadRunner, k6など)を用いてシステムに継続的に負荷をかけます。
    • 同時に、システムリソースやアプリケーションのパフォーマンスメトリクスをリアルタイムで収集・監視します。
  3. 分析と報告フェーズ:
    • 収集したパフォーマンスデータを分析し、時間経過に伴う変化(例:メモリ使用量の漸増、応答時間の劣化)を特定します。
    • 特定された問題(例:メモリリーク)の原因を特定するために、プロファイリングツールなどを用いて詳細な調査を行います。
    • テスト結果をまとめ、システムの耐久性に関する評価、発見された問題点、改善提案などを報告書に記載します。

耐久テスト で検出される一般的な問題

耐久テストによって、以下のような時間依存性の問題が検出されることが多いです。

  • メモリリーク(Memory Leak): アプリケーションが使用し終えたメモリを適切に解放せず、時間の経過とともにメモリ使用量が累積的に増加し、最終的にシステムのクラッシュや極端な性能低下を引き起こす問題。
  • リソース枯渇(Resource Exhaustion): データベース接続、スレッド、ファイルハンドルなどのシステムリソースが、長期間の稼働により使い果たされ、新規のリクエストが処理できなくなる問題。
  • データベースのロックとデッドロック: 長時間のトランザクションや不適切なロック戦略により、データベースの競合が発生し、応答時間が悪化したり、処理が停止したりする問題。
  • キャッシュの陳腐化: データがキャッシュされ続けることで、最新の情報と乖離が生じ、データ整合性の問題や、キャッシュヒット率の低下による性能劣化が発生する問題。
  • ログファイルの肥大化: ログファイルが制御なく増大し続け、ディスク容量を圧迫したり、I/O性能に影響を与えたりする問題。
  • 数値精度やオーバーフローの問題: 長時間にわたる連続的な計算によって、数値の精度が劣化したり、オーバーフローが発生したりする可能性。

耐久テストは、システムが長期間にわたる継続的な負荷状況下で安定して稼働し続ける能力を評価する重要な非機能テストです。メモリリーク、リソース枯渇、パフォーマンスの漸進的な劣化など、時間経過と共に顕在化する潜在的な問題を特定することを目的とします。

計画、実行、分析の各フェーズを通じて、厳密な監視とデータ分析を行い、システムの長期的な信頼性と可用性を確保するための不可欠なプロセスとして、特に高可用性が求められるシステム開発においてその重要性が認識されています。

関連用語

チューリングテスト | 今更聞けないIT用語集
テスト自動化 | 今更聞けないIT用語集
DevOpsソリューション

お問い合わせ

システム開発・アプリ開発に関するご相談がございましたら、APPSWINGBYまでお気軽にご連絡ください。

APPSWINGBYの

ソリューション

APPSWINGBYのセキュリティサービスについて、詳しくは以下のメニューからお進みください。

システム開発

既存事業のDXによる新規開発、既存業務システムの引継ぎ・機能追加、表計算ソフトによる管理からの卒業等々、様々なWebシステムの開発を行っています。

iOS/Androidアプリ開発

既存事業のDXによるアプリの新規開発から既存アプリの改修・機能追加まで様々なアプリ開発における様々な課題・問題を解決しています。


リファクタリング

他のベンダーが開発したウェブサービスやアプリの不具合改修やソースコードの最適化、また、クラウド移行によってランニングコストが大幅にあがってしまったシステムのリアーキテクチャなどの行っています。