非機能テストとは

完了

Azure Pipelines で機能テストを実行する」では、Selenium UI テストをパイプラインに追加しました。 UI テストは、"機能テスト" の 1 つの形式です。 このパートでは、パイプラインで実行できる "非機能" テストの種類を確認します。

まず、チームは非機能テストを定義します。 彼らは、これらのテストのいくつかの種類について話し合います。 その後、彼らはパイプラインに追加する非機能テストを決定します。

非機能テストの機能テストとの比較

Azure Pipelines で機能テストを実行する」で、機能テストと非機能テストを定義しました。

簡潔に言えば、"機能テスト" では、ソフトウェアの各機能が実行すべき内容を実行していることを検証します。 つまり、機能テストは、アプリケーションの機能を検証します。

"非機能テスト" では、パフォーマンスや信頼性など、アプリケーションの非機能面を検査します。 インフラストラクチャ コンポーネントなどのアプリではないシステムで非機能テストを実行することもできます。 非機能テストの一例は、応答時間が遅くなるなどの問題を発生させることなく、アプリケーションに同時にサインインできるユーザーの数を見極めることです。

Space Game の Web サイトを例として挙げると、機能テストでは、ランキングが正しく表示されて、ユーザーがフィルターを選択したときにそこに正しいレコードが表示されることを検証できます。 非機能テストでは、多くのユーザーが Web サイトに同時に接続した場合でも、ランキング フィルター処理が 1 秒未満で終了することを検証できます。

非機能テストでは、必ず測定可能なものをテストします。 目標は、製品の品質を向上させることです。 これを実現するには、たとえば、アプリケーションによって使用されるリソースの効率を改善したり、多くの顧客がそれを同時に使用するときの応答時間を短縮したりします。 非機能テストが回答できる質問をいくつか次に示します。

  • 通常の状況でアプリケーションはどのように実行されるか?
  • 多くのユーザーが同時にサインインしたときにアプリケーションはどのように実行されるか?
  • アプリケーションはどの程度安全であるか?

実行できる非機能テストの種類

さまざまな種類の非機能テストがあります。 これらの多くは、パフォーマンス テストとセキュリティ テストの広範なカテゴリに含まれます。

パフォーマンス テスト

"パフォーマンス テスト" の目的は、アプリケーションの速度、スケーラビリティ、安定性を向上させることです。 速度のテストでは、アプリケーションが応答する速度を測定します。 スケーラビリティのテストでは、アプリケーションが処理できる最大ユーザー負荷を見極めます。 安定性のテストでは、アプリケーションがさまざま負荷をかけた状態で安定したままであるかどうかを確認します。 一般的な種類のパフォーマンス テストは、ロード テストとストレス テストの 2 つです。

ロード テスト

"ロード テスト" では、実際的な負荷をかけた状態でアプリケーションのパフォーマンスを判別します。 たとえば、ロード テストでは、アプリケーションがそのサービス レベル アグリーメント (SLA) の上限に達したときにどの程度適切に実行されるかを確認できます。 基本的に、ロード テストでは、複数のユーザーが同時にアプリケーションを必要としたときのその動作を確認します。

ユーザーは必ずしも人ではありません。 たとえば、プリンター ソフトウェアのロード テストでは、アプリケーションに大量のデータが送信されることがあります。 メール サーバーのロード テストでは、数千人の同時使用ユーザーをシミュレートする場合があります。

ロード テストは、アプリケーションがその制限で動作している場合にのみ存在する問題を発見するための優れた方法でもあります。 バッファー オーバーフローやメモリ リークなどの問題が表面化する可能性があるのは、このときです。

このモジュールでは、Apache JMeter を使用してロード テストを実行します。 Web サイトに同時にアクセスする一連のシミュレートされたユーザーを使用します。

ストレス テスト

"ストレス テスト" では、高い負荷をかけた状態でアプリケーションの安定性と堅牢性を確認します。 その負荷は、アプリケーションに対して指定した内容を超えます。 ストレス テストでは、アプリケーションがこれらの負荷でクラッシュするかどうかを確認します。 アプリケーションが失敗した場合、ストレス テストではそれが必ず正常に失敗することを確認します。 正常に失敗すると、たとえば、適切で詳細なエラー メッセージが発行されます。

アプリケーションが異常に高い負荷状態で動作する必要があるシナリオは一般的です。 たとえば、自分の動画が急速に広まっている場合は、サーバーが追加の負荷をどの程度適切に処理できるかを把握する必要があります。 もう 1 つの一般的なシナリオは、休暇シーズンにおけるショッピング Web サイトの大量のトラフィックです。

セキュリティ テスト

"セキュリティ テスト" により、アプリケーションが脆弱性、脅威、およびリスクから解放されるようにします。 完全なセキュリティ テストによって、情報の侵害や収益の損失の原因となる可能性がある、システムの考えられる抜け道と弱点をすべて検出します。

セキュリティ テストには多くの種類があります。 そのうちの 2 つは、侵入テストとコンプライアンス テストです。

侵入テスト

"侵入テスト" ("ペン テスト") は、アプリケーションのセキュリティで保護されていない領域をテストするセキュリティ テストの一種です。 特に、攻撃者が悪用する可能性がある脆弱性をテストします。 承認され、シミュレートされたサイバー攻撃は通常、侵入テストの一部です。

コンプライアンス テスト

"コンプライアンス テスト" では、アプリケーションが企業内外の要件のセットに準拠しているかどうかを確認します。 たとえば、医療組織は通常、医療情報を保護するためのデータのプライバシーとセキュリティ規定を定めた HIPAA (1996 年制定の医療保険の携行性と責任に関する法律) に準拠する必要があります。

組織に独自のセキュリティ要件がある場合もあります。 ソフトウェアをテストして、これらの要件に従っていることを確認する必要があります。 たとえば、Linux システムでは、既定のユーザー マスクは 027 またはそれより厳しい制限である必要があります。 セキュリティ テストでは、この要件が満たされていることを実証する必要があります。

計画

このモジュールの残りの部分では、Azure DevOps 環境を設定し、Apache JMeter を使用したロード テストの計画について確認し、Azure Pipelines でロード テストを実行します。

自分の知識をチェックする

1.

最近、自分の Web アプリをデータベースに接続しました。 データベース レコードは、ページが読み込まれると表示されます。 データベースの呼び出しによってページの読み込みが 1 秒以上かかっていないことを検証する必要があります。 どの種類の非機能テストを使用しますか?

2.

Web サイトで、地域の会場のコンサート チケットを販売しています。 会場では、多くの人気のある出演者などが参加する複数日間のイベントを開催しています。 トラフィックの突然の急増をサイトで処理できないかもしれないことに不安があります。 どの種類のテストが不安解消に役立ちますか?

3.

ハッカーが機密データにアクセスすることを可能にする脆弱性が Web サイトで露出している疑いがあります。 この脆弱性を検出するために、どの種類の非機能テストを実行しますか?