自動化された機能テストと負荷テストの組み合わせ
カンファレンスでは、どうすればリスクカバレッジを高め、ユーザーエクスペリエンスを最大限に引き出すことができるかという質問がしばしば寄せられます。
予算の制約と時間的なプレッシャーにより、テスターは、最小限のリソースを使用して最大限の結果を達成することを迫られているというのが実情です。実際のところ、製品がリリースされた後に発生する問題は常に存在します。これらの問題は予測が難しいいっぽうで、ユーザーエクスペリエンスを大きく損なう可能性があります。
今回の記事では、機能テストと負荷テストを組み合わせることが理にかなっていることが多い理由を説明したいと思います。
システムのパフォーマンスと機能性が重要な理由
まずなによりも、アプリやウェブサイトは正常に動作する必要があります。
オンラインショップなら、ユーザーはサイトを開いて目的の商品を選択し、ショッピングカートに追加して注文を完了することができなければなりません。これらの手順のいずれかが機能しない場合、ユーザーは製品を購入できません。これはユーザーエクスペリエンス(UX)を低下させ、最悪の場合、顧客を失うことになります。また、システムの信頼性もUXに影響します。サイトがきちんと動作するのは当然です。しかも、さまざまな条件の下で、繰り返し動作しなければなりません。
トラフィックが増加したとき、異なるブラウザーが使用されているとき、さらに、新しい機能が追加されたときにも動作する必要があります。ウェブサイトが信頼できるパフォーマンスを提供していない場合、顧客はサイトを利用したがりません。機能性とパフォーマンスがウェブサイトの成功にとって重要であるのは、動かしがたい事実です。
理想的なケースは、すべての可能なシナリオをテストすることです。しかしテストには時間がかかり、誰にも余裕はありません。どのテストをいつ、どのくらいの頻度で自動化するかを決める必要があります。適切なテストケースを選択するには、リスクアセスメントが不可欠です。
潜在的な問題のリスク寄与の評価
リスクカバレッジを最大限にしてテスト戦略を作成するには、特定の問題が発生する可能性を見積もり、システムへの影響を評価する必要があります。システムが高い負荷を受けている場合にだけ表面化する機能的な問題もあります。これらは特に予測が困難です。しかし、問題がどれほど起こりそうにないものであっても、その影響によっては、リスクを許容できない場合もあるでしょう。何千人ものユーザーが同時にサイトにアクセスするサイバーマンデー(訳注: アメリカ合衆国で感謝祭(11月の第4木曜日)の次の月曜日、オンラインショップにとって、売り上げが急増する年末商戦の開始日であるため重要)にショッピングカート内の「購入」ボタンが表示されない場合の影響について考えてみてください。
別個に行われる自動機能テストと負荷テスト
通常、テストタイプは明確に分離されています。これは自動化された機能テストと負荷テストにも当てはまります。自動機能テストにより、システムの機能を自動的かつ確実に検証することができます。負荷テストは、負荷がピーク時のシステムの動作を検証します。典型的なテストの流れは次のようになります。
まず、機能的な自動テストで、ウェブサイトやアプリが期待どおりに機能するかどうかを検証します。次に、チームは、ソフトウェアを動かしながら人力でバグを見つけようとします。これらのテストは、システムの処理に余裕がある状態で実行されます。これらのテストが成功した後、パフォーマンステストではさまざまなトラフィック、複数のユーザー、ネットワーク負荷の増加など、実際の使用状況でのシステムの動作が検証されます。最後に、シミュレーションされた負荷条件を使用してシステムが手動で検証されます。
機能テストと負荷テストを分離する場合の短所
まず、このテストシナリオでは、2つの箇所で手動テストを行います。当然ながら、手動テストには多くの時間がかかり、繰り返しに弱く、テストカバレッジが低下します。また、自動化された機能テストでは、システムの負荷が高くない状態でどのように動作するかに関するフィードバックしか得られません。負荷テストの結果から機能的な正確さを評価することはできません。実際に即した使用状況で、システムが高負荷下でどのように動作するかが判明するのは、テストプロセスの最終段階になります。
自動機能テストと負荷テストを組み合わせる場合の利点
現実には、特定の条件が重なる場合に発生するバグが常に存在します。たとえば、サイトのトラフィックが増加した場合にリンクが切れる、更新しないとサイトのコンテンツがロードされないといった問題です。リスクカバレッジを向上させ、高負荷状態で表面化する機能上の問題を発見するには、自動機能テストに負荷テストを含める必要があります。テストプロセスは次のようになります。
自動化された機能テストに持続的な負荷を組み込むことができます。このテスト手法により、ビジネスにとって最も重要な主要機能を現実的な使用状況下で確実にテストすることができます。
負荷がかかった状態でだけ表面化する問題をテストプロセスの早い段階で発見できるため、問題を修正しやすくなり、最終的には多くの時間を節約できます。しかし、さらに重要なのは、エンドユーザーがWebサイトをどのように体験しているかについて非常に重要な洞察を得られるようになることです。
最終的には、お客様のシステムにおいて、この種の問題が与える潜在的な影響を評価し、機能テストと負荷テストを組み合わせることが有効であるか、判断してください。
負荷テスト・パフォーマンステストツール NeoLoad についても、合わせてご覧ください。
(この記事は、開発元 Ranorex 社 Blog 「Combining Automated Functional and Load Testing」2016年10月6日の記事を元にしています。)