ソフトウェアテスト基本テクニック

第8回 性能テスト

この記事を読むのに必要な時間:およそ 3 分

性能テストの目的

さて,性能を把握するための要素がわかったところで,次は性能テストの目的について見ていきましょう。性能テストの目的は,冒頭でもお話しした通り,性能問題を引き起こさないためにあらかじめシステムの性能を把握しておくことです。具体的には「性能目標の達成」「性能限界とその対応策」を把握する必要があります。それぞれについて見ていきましょう。

まず性能目標の達成ですが,この話をする前に性能目標について説明しなければなりません。性能目標とは,システムが必要とする性能のことです。例えば,1秒間に50人のユーザからアクセスがあり,それらのレスポンスタイムは3秒以内である必要があるシステムがあるとします。この場合,システムの性能目標は「スループット 50件/秒⁠⁠,⁠レスポンスタイム3秒以内」となります。この目標を満たしているかどうか,つまりシステムが必要とされる性能を持っているかを把握することが必要になります。

次に性能限界とその対応策ですが,これは,システムが出すことのできる最大の性能と,それ以上の性能を出すための対応策を把握することです。なぜこれらを把握する必要があるかというと,システムに対して性能限界以上のアクセスが発生しそうな場合に備えて,打つべき対策をあらかじめ立てておく必要があるからです。

今回のショッピングサイトの例だと,サーバのCPU使用率が100%まで達しており,性能問題が発生していました。したがって,この時に取るべき対策は,サーバのCPUを追加する,CPU使用率を下げるためのチューニングを施す等の対策が考えられます。しかし,これでは遅いのです。すでに性能問題は発生しています。もし,今回の特売セールで発生するアクセス数が,システムの性能限界以上のアクセス数であることがわかっていて,さらに性能限界に対する対策をあらかじめ立ててあれば,この性能問題は防げたはずです。そのため,性能限界以上のアクセスが発生しそうな場合に,予防的な対応がとれるよう,性能限界とその対応策を把握しておく必要があるのです。

ここまでの話をまとめると図2のようになります。

図2 性能テストの目的

図2 性能テストの目的

性能テストの方法

それでは,具体的に性能テストをどのように実施するのかについて見ていきましょう。簡単に言うと,システムに対して,運用中に想定されるアクセスを性能限界に達するまで段階的に増加させながら発生させ,その際の「スループット」⁠レスポンスタイム」⁠リソース使用量」を確認すればよいのです。

まず,アクセスの発生のさせ方ですが,一般的に負荷生成ツールというものを使用します。これは,1台のPCで複数ユーザのアクセスを発生させるツールです。負荷生成ツールの例としては,オープンソースのツールではJMeterApacheBenchなどが挙げられます。負荷生成ツールには一般的にはスループットとレスポンスタイムを計測する機能が備わっています。そのため,この機能を使用すればスループットとレスポンスタイムが確認できます。

負荷生成ツールで発生させるアクセスに関しては,⁠アクセスの種類」を考慮しておきましょう。たとえば,⁠商品を購入する」⁠商品を閲覧する」⁠会員登録を行う」などの処理は,それぞれ違う画面遷移のアクセスになりますので,それぞれに合ったアクセスを発生させる必要があります。これらはテストシナリオと呼ばれます。このテストシナリオを作りこむ機能も,一般的には負荷生成ツールに備わっています。

また,これらテストシナリオの「実行割合」も考える必要があります。運用中に発生する各テストシナリオのアクセス割合は,均等ではないはずです。たとえば,先ほどの例だと「商品を購入する」アクセスより,⁠商品を閲覧する」アクセスの方が圧倒的に多いはずです。このように,性能テストで発生させるアクセスについては,運用中に実際に発生する割合を考慮する必要があります。

最後にリソース使用量ですが,これは一般的にはシステムのOSの機能を使用して確認します。Windowsであればパフォーマンスモニタ,UNIX系であればsar,vmstat,iostat,netstatなどを使用します。性能テストで一般的に確認されることが多いリソース使用量の種類を表1に挙げます。

表1 一般的に確認されることが多いリソース使用量の種類

 種類
CPU CPU使用率
実行待ちプロセス数
ディスク ディスクビジー率
実行待ち要求数
メモリ メモリ使用量
スワップ使用量
ネットワーク 帯域使用量

ここまでで気付いた方もいると思いますが,実は「性能テスト」では同時に「負荷テスト」も実施しているのです。厳密に言うと「性能テスト」はレスポンスタイムが性能目標に達しているかどうかを確認するテストで,⁠負荷テスト」はシステムがどこまでのスループットを出すことができるかを確認するテストです。しかし,両者を別々に実施するのは時間がもったいないので,一般的に「性能テスト」では両者を同時に実施します。

ここまでの話をまとめると図3のようになります。

図3 性能テスト

図3 性能テスト

著者プロフィール

堀江幸紀(ほりえ ゆきのり)

(株)NTTデータ 基盤システム事業本部所属。Webシステムのインフラ設計に関する研究開発を経て,現在はシステム開発の全工程における性能管理を支援する「性能プロフェッショナルサービス」のプロモーションと人材育成を担当。