性能負荷テスト、どうやってますか?
非機能要件に挙げられる性能要件は、全体的な条件がそろわないとなかなか着手できないものです。
とは言え、どこかで必ずやらなければならないでしょう。
開発の後半で実施し、致命的な問題が発生して、手戻りする。
または、実運用になってから、機能的には満足していても、想定外のアクセス数でダウン。
などという話は後を絶ちません。
負荷テスト実施において大きく3つのポイントがあると考えています。
①目標設定
②テストの実施頻度
③テストツールの利用
①目標設定について
負荷テストを実施する上で最も大切なのは、「目標設定」だと考えています。
目標設定がないと、判定基準が曖昧になりがちです。
「テストやったのか?」→「やりました!」となり、負荷テスト実施の有無だけが
とりただされるプロジェクトも多いと感じます。
テストエンジニアは、目標に対し、判定できる基準を持ち、目標をクリアするための
負荷モデルを設計し、テスト実施、評価、分析を可能にします。
②テスト実施頻度
出来る限り初期段階から複数回実施し、予測しながら、要件をクリアしていくのが理想でしょう。
そのとき、開発工程毎にある程度の負荷テストの観点を変えていくことがよいと思います。
・初期:小規模の負荷を繰り返しかけ、応答時間を測定し、基礎データとする。
同時実行性を確認する。
・中盤:想定する負荷をかけ、問題がないことを確認する。
各種リソースが規定範囲内であることを確認する。
・終盤:運用のシミュレーションを行い、全体的なチューニングを実施する。
限界負荷をかけ、ボトルネックを把握する。
長時間の負荷をかけ、問題がないことを確認する。
※初期に作成した負荷テストのスクリプトは、後工程でも負荷ボリュームを変えたり、
タイミングを変えるなどして、負荷のモデルを形成していくのに役立ちます。
③負荷テストツール
負荷テストツールの選定で重要になるポイント
1.正しい負荷が生成できる事
→対象アプリに対し、プロトコルが対応しているか?等
→運用シミュレーションのような、シナリオ的な負荷生成が可能か?
2.安定して負荷を生成することができる事
→大量の負荷を生成したとき、動作が緩慢にならないか?落ちたりしないか?等
3.負荷を生成するスクリプトが作成しやすい事
→誰がいつ利用するかも含め、使いやすいか?
4.サーバ側の情報取得
→データを取得し、負荷との相関関係から分析しやすいか?
等があると思いますが、
負荷テストの目的によって、選定ポイントは変わってくると思います。
※特に4番は、負荷テストツールではなくても、サーバの監視系ツールを利用することも可能です。
負荷テストも自動化すべきテストであり、QCDのバランスを考えて、上手に実施していきましょう。
負荷テストの実際に関しては、また後日アップしたいと思います。