Webシステム開発にあたっての性能試験の重要性について、テストツールである「HP LoadRunner」とデータベース「Oracle」の提供を行っているアシストに、経験から得たポイントを聞いてみた。
テスト環境構築の重要性
アシスト 運用ソフトウェア事業部 技術第2部 矢野英也氏 |
Webシステムに限らず、システム開発において性能試験は非常に重要なものだ。近年話題なったシステム障害の中にも、事前に十分なテストができていれば発生が防げられたと考えられるものが大半だ。 「大きなシステム障害の事例では、負荷試験をきちんと行っていたものも多くあります。試験そのものはやっていたけれど、適切な試験ができていなかったことが障害の原因となったのです。適切ではないテストとは、たとえば本番に全く見合わない規模でのテストをしているようなケースですね。ツールを使う前に、まずテスト環境が用意できているのかということを考えなければなりません」と、運用ソフトウェア事業部 技術第2部の矢野英也氏は指摘する。
矢野氏は適切なテスト環境として、できる限り本番環境と似たものを用意すべきだとしている。これは、ハードウェアスペック的なものに加えて、データベースの内容についても考えなければならない部分だ。しかし実際には、本番と同程度の環境をテスト用に用意できる企業は多くない。様々な環境を構築してラボを持っているような大企業は別として、テスト用環境の構築には苦慮することが多いだろう。
「中には、意味のあるテストができる環境が用意できないからテストはしない、というところまであります。一方で、環境が用意できないから本番環境でテストしてしまおう、というところもあります。本番環境に影響を与えないテスト環境を用意するために、仮想環境などを利用するのも一つの手段でしょうね」と矢野氏は語る。性能試験を行うカットオーバー直前のタイミングで環境構築に悩むのではなく、計画段階から考慮することで対応しやすくなるだろうとも指摘した。
環境構築の難しさに加えて、開発現場のテストに対する意識の低さが十分な性能試験につながらないというケースもある。
アシスト 運用ソフトウェア事業部 技術第2部 兼 販売支援部 部長 林昌洋氏 |
「テストが重要なことはわかっていても、開発者の立場からすればテストは嫌なものです。そのための時間を開発にまわしたい、と考えてしまう。少なくとも、開発する時間よりもテストの時間が多いということはないようにしたい、というのが本音でしょう」と運用ソフトウェア事業部 技術第2部 兼 販売支援部の部長である林昌洋氏は語る。
テストで時間がかかるのは、分析の部分だ。各種データをとった後、比較可能なフォーマットに落とし込み、さらにグラフ等に加工して十分な比較を行わなければならない。しっかりとした検討は必要だが、これに時間がとられて開発時間が削られてしまうというのでは困る。そこで登場するのが、性能試験ツール。アシストでも「HP LoadRunner」を利用した性能試験を提供している。 「開発者は、単体テストでは問題のなかったものばかりを組み合わせているのだから大丈夫だ、と思いたいかもしれませんが、実際には全体を動かしてみたり多くのユーザーが利用して初めてわかる問題も多くあります。ツールを利用することで時間短縮は可能ですから、ぜひしっかりとしたテストを行って欲しいですね」と林氏。
負荷・性能検証ソフト「HP LoadRunner」。これは、シナリオのデザイン画面。スケジューリングによって意図的に負荷の「谷」を作っている |
「HP LoadRunner」のバージョン9.0から追加されたサービスレベル・アグリーメント(SLA)分析機能 |
負荷をかけ続けるだけがテストではない
環境を用意し、時間を裂いてテストを行うからには意味のあるものにしなければならない。パフォーマンステストにはベンチマークテスト、負荷テスト、ストレステスト、ボリュームテスト、ベースラインテストといったものがあり、どれも重要なものとなっている。 「最初に、ハードウェアがどれだけ耐えられるかを確認するためにベンチマークテストを行います。これは、とにかく負荷をかけて様子を見ることになります。しかし後につづく負荷テストなどでは、負荷はかけつづければ良いというわけではありません」と矢野氏は語る。
たとえば、「HP LoadRunner」にはスケジューリング機能があり、負荷の高さを上下させることができる。午後一番と終業前にはアクセスが集中するから高負荷だが、その間には谷がある、というような実際の利用状況を想定した負荷試験を行うことができる。この「谷」の存在によって、負荷が下がったときの挙動を確認できるのがポイントだ。
「たとえば、負荷が下がったのにメモリが開放されないような状態の場合、ただ負荷をかけ続けるだけのテストだけを通過してしまって納品後1週間ほどで障害が発生する、というようなケースが考えられます。多彩な状況での挙動を確認し、原因を切り分けることでチューニングすべき部分が見えてくるのです」と矢野氏。
「HP LoadRunner」はデータを自由に加工できることで、様々な角度から独自に分析を行いたいという要望を満たせるとともに、原因特定のための切り分けなどは非常にスムーズに行うことができるのも特徴だ。
「レスポンスが悪いからハードウェアを強化しよう、というのは適切な答えではありません。たとえば、データベースの負荷は低いのにウェブサーバがボトルネックとなっている、ということがわかればウェブサーバ側の設定をチューニングするだけで改善することもあります。ハードウェアには負荷がかかっていないということがはっきりすれば、アプリケーションの改修が必要だとわかります。ハードウェアの能力を使い切っていない状況ではハードウェアだけ強化しても意味がありません」と林氏が経験を語る。
テストを行う開発終盤においてアプリケーション改修を行うというのは心理的な抵抗も大きいが、その改修すべき部分を分析するためのツールとして、アシストでは「HP Diagnostics for J2EE」を提供している。アプリケーションサーバの処理を分析し、特定メソッドの応答時間遅延の原因であるSQLまでを知ることができる。
「HP Diagnostics for J2EE」。アプリケーションごとのメモリ使用量(上)、アプリケーションのロード(中央)、時間のかかった要求(下)が表示される |
「HP Diagnostics for J2EE」のSQL分析。各SQL文の処理時間が表示される |
5月29日発売の『システム開発ジャーナル Vol.4』では、特別記事として『「手戻りを上流工程で防ぐ!! Webシステム性能設計の極意』を掲載。Webシステムの性能問題を回避するための対策として、開発の上流工程から性能を設計・管理する方法を紹介しています。そちらもぜひ参照されたい。