実システムを構築する上で、負荷試験というテストは欠かせない。今回は、さまざまな負荷のパターンについて解説するとともに、負荷試験の設計時に考慮すべきポイントなどについて考えていこう。
前回のまとめ |
前回はテスト種別の紹介の前半として単体テスト、機能試験、性能検証について紹介した。前回解説したように、テストの設計を行うにあたってはまずテスト計画を立案する必要がある。いきなりテスト要件を洗い出すことは必要となるテスト種別が抜け落ちたり、各テストのプロジェクト内での優先順位があいまいになったりなどの問題が発生するため、必ずテスト計画を作成し、各テストの重要度、工数、スケジュールを明確にしておくことが大切である。また、テスト要件を洗い出すときは事前に優先順位付けした要件から作成し、テスト要件にも優先順位付けを行い、優先順位を考慮した作業の進め方を行うといいだろう。
今回はテストの設計の第2回として、負荷検証、ロード検証について紹介を行う。
負荷試験は一つのサブプロジェクトである |
実システムを構築する上で、負荷試験というテストが含まれていないことはほとんどないだろう。構築するシステムがどの程度の負荷に耐えられるかを測定することで、システムの信頼性とシステムの耐用範囲が明確になる。構築するシステムがインターネット上で利用されるWebアプリケーションの場合では、負荷試験を実施することで、どの程度の同時アクセスユーザー数を処理できるほか、それ以上になった場合のシステムの振る舞いを把握できるのである。
では負荷試験はどのように設計すればいいのだろうか。負荷試験といっても負荷をかけるパターンには下表のようなものがある。また、これらの組み合わせ(コンビネーション)を考慮する場合や構築しているシステムが利用するほかの製品の負荷、例えばメールサーバや認証サーバなどへの負荷を組み合わせたものを考慮する場合もあり、考慮すべきポイントは多岐にわたる。それぞれについて以下で紹介していこう。
・CPU負荷 ・メモリ負荷 ・I/O負荷 ・ネットワーク負荷 ・高アクセス負荷 ・大容量データ負荷 |
CPU負荷検証はCPUに負荷をかけ、システムの振る舞いを調べるものである。Windowsベースのシステムの場合、マイクロソフトが提供しているWindows 2000 Resource Kitに含まれるcpustres.exe(図1)を利用することでCPUの負荷が高い状態をシミュレートできる。常時稼働しているアンチウィルスソフトやある特定の時間に実行されるバックアップツールがCPUに負荷をかける可能性がある場合は入念に行う必要があるだろう。
メモリ負荷検証はメモリの空き容量が少ない状態でのシステムの振る舞いを調べるものである。メモリストレスをかけるツールとして有名なものはWindows環境で利用できるEATMEMというツールである。これはコマンドラインで指定したサイズのメモリを占有するツールであり、このツールを利用することで空きメモリが少ない状態をシミュレートできる。
同一サーバで稼働しているシステム監視ツールなどの常駐型アプリケーションがメモリを利用してしまい、負荷がかかってしまう可能性も考慮する必要があるだろう。
I/O負荷検証にはディスクアクセスの負荷と空き容量が少ない状態のものとの2種類が存在する。ディスクアクセス負荷の場合はシステムを動作させながら、大きなファイルのコピーや削除を連続的に行うなどの方法でシミュレートできる。もちろん、市販のテストツールを利用し、I/O負荷を上げてしまうのもいいだろう。
空き容量が少ない状態でのシステムの振る舞いについてはとにかくディスクの空き容量を減らすことを行えばよい。空き容量が少ない状態での動作の振る舞いの検証の優先度をあまり高く感じられない方も多いかもしれないが、アプリケーションのトランザクション処理が失敗する、エラー発生時にログが書き込めない、などの問題が発生することが多く、必ず行わなければならない負荷検証である。
空き容量を減らすには、指定されたサイズのファイルを作成するようなツールを利用することで行うことができるだろう。このようなツールはフリーウェアで数多く存在しているが、筆者の場合は使い慣れたプログラミング言語を使ってリスト1のような簡単なプログラムを作成、それを用いている。このeatdiskというツールはコマンドラインで指定されたサイズのファイルを作成するものである。必要なツールを自分自身で作成することもQAエンジニアに必要なスキルである。
リスト1 指定されたメモリを占有するツールのソース(eatdisk.dpr) |
program eatdisk; {$APPTYPE CONSOLE} uses SysUtils; VAR HowMuch : LongInt; Code : Integer; F : File; BEGIN IF ParamCount > 1 THEN BEGIN Val(ParamStr(1), HowMuch, Code); IF (Code = 0) AND (HowMuch > 0) THEN BEGIN Assign(F, ParamStr(2)); Rewrite(F, 1); Seek(F, (HowMuch * 1024*1024) - 2); BlockWrite(F, Code, 2); Close(F); END; END ELSE begin writeln('引数を指定してください。'); writeln('例. c:\>EATDISK 100 c:\temp\temp.dsk'); writeln('c:\temp\temp.dskという100MBのファイルを作成します'); end; end. |
次ページはそのほかの負荷試験、およびロード検証について
Copyright © ITmedia, Inc. All Rights Reserved.