公開:

ソフトウェアテスト

非機能テストとは?主な種類や実施手順、機能テストとの違いを解説

非機能テストとは?主な種類や実施手順、機能テストとの違いを解説

システムが仕様通り動作することを確認しても、使いづらさや障害発生などによりプロダクトの評価が下がる事例は少なくありません。

実用性や市場価値の高いプロダクトを提供するためには、性能やセキュリティ、使いやすさといった非機能要件を検証する「非機能テスト」が重要です。

本記事では、非機能テストの種類や実施手順、実施にあたっての課題と対策を解説します。

第三者検証の重要性|資料ダウンロード

非機能テストとは

システムの品質を多面的に検証する非機能テスト。まずは、その定義や目的について解説します。

定義と目的

非機能テストとは、ソフトウェアにおける「機能以外の品質特性」を検証するテストです。性能やセキュリティ、ユーザビリティ(使いやすさ)といった要件を対象とし、「何ができるか」ではなく「どのように動作するか」を確認します。

このテストは、システムの信頼性や実用性を確保し、リリース後のトラブルやユーザーからの低評価を未然に防ぐうえで重要な役割を担っています。

機能テストとの違い

非機能テストの対となる概念が「機能テスト」です。両者の違いは以下のように整理できます。

機能テスト

機能そのもの(機能要件)を検証するテスト。システムが正しく機能するかを確かめる

非機能テスト

性能、セキュリティ、使いやすさなどの非機能要件を検証するテスト。システムの質が十分かを確かめる

機能テストは「IDとパスワードを入れたらログインできるか」といったように明確な合否判定がしやすいのに対し、非機能テストは「応答時間は何秒以内であるべきか」「同時アクセス数はどこまで想定するか」などの基準設定が難しいのが特徴です。

適切なテスト設計のためには、開発チームやPdM、発注元といった関係者との認識合わせが重要となります。

項目機能テスト非機能テスト
検証対象機能要件(入出力の正しさ)非機能要件(性能、セキュリティ、使いやすさなど)
テストの目的「正しく動くか」を検証「快適かつ安全に使えるか」を検証
検証内容の例・ログイン機能が動作するか
・検索機能で正しい結果が返されるか
・決済機能が正常に処理されるか
・1,000人が同時アクセスしても応答速度が遅くならないか(負荷テスト)
・不正アクセスやサイバー攻撃に対する脆弱性がないか(セキュリティテスト)
・ユーザーが迷わず操作できるか(ユーザビリティテスト)

非機能テストの主な種類

一口に「非機能要件」といっても、性能やセキュリティ、耐久性などさまざまな評価軸が存在し、それぞれに対応した非機能テストが必要とされます。

ここでは、代表的な8種類の非機能テストについて解説します。

非機能テストの主な種類

性能テスト

「性能テスト」は、システムの応答時間や処理速度が要求水準を満たしているかを検証するテストです。

身近なプロダクトに関する検証内容としては、「ECサイトで商品検索ボタンを押してから結果表示までにかかる時間」「業務システムで帳票出力や月次処理にかかる時間」などが挙げられます。

性能はユーザー体験に直結する要素であり、一定以上の遅延は離脱や満足度低下をもたらすため、本番環境に近い条件(環境、データ量など)で十分に検証を行っておくことが重要です。

関連記事:性能テストにおけるCPU負荷測定の目的と方法

負荷テスト

「負荷テスト」は、想定される同時アクセス数やトランザクション量(単位時間あたりの処理件数)のもとで、システムが安定して動作するかを検証するテストです。通常運用時の負荷を基準に、段階的に負荷を増やしながらシステムの限界値や劣化ポイントを把握します。

BtoCのWebアプリやECサイトなど、不特定多数のユーザーが同時にアクセスするシステムの開発にあたっては、日常的な安定稼働を保証するために特に重要なテストといえます。

関連記事:システムを問題なく稼働させるために、必要な負荷テスト(ストレステスト)とは

ストレステスト

「ストレステスト」は、システムの限界を超える負荷をかけ、障害が発生する条件や障害発生時の挙動を確かめるテストです。

例えば、突発的なアクセス集中やバッチ処理の異常など、通常では発生しない状況下において、システムがどのように破綻するのか、また、破綻後にどのような復旧プロセスが働くのかを検証します。

負荷テストが「通常運用を想定した条件下での安定性の確認」を目的とするのに対し、ストレステストは「異常時における耐性と挙動」に重点を置いています。

セキュリティテスト

「セキュリティテスト」は、不正アクセス、情報漏洩、権限の不正利用などに対するシステムの脆弱性を検証するテストです。

個人情報などの機密情報を扱うシステムでは、法令順守やユーザーからの信頼確保のために必須の工程といえます。サイバー攻撃の高度化・多様化が進む昨今、セキュリティテストの内容も日々アップデートを続けることが重要です。

関連記事:脆弱性診断とは?その必要性や診断方法について

ユーザビリティテスト

「ユーザビリティテスト」は、対象ユーザーに近い人物にシステムを操作してもらってその様子を観察し、「使いやすさ」や「わかりやすさ」を評価するテストです。

「保存ボタンの位置がわかりにくい」「エラーが出たときに次に何をすればよいかわからない」といった、開発者が見落としがちなUI/UX上の問題を発見するために行われます。

仕様通りに動作していても、ユーザーが迷ったりストレスを感じたりする箇所があれば、満足度の低下や問い合わせの増加につながりかねません。「優れた技術で開発したプロダクトが市場で売れない」という事態を避けるためには、ユーザーの属性やITリテラシーまで計算に入れた綿密なユーザビリティテストが不可欠なのです。

関連記事:ユーザビリティテストとは?定義や目的、手法別の実施のポイントを解説

ボリュームテスト

「ボリュームテスト」は、大容量のデータを扱う際にシステムが正常に処理できるかを検証するテストで、データ量の上限に達した場合の動作を確認します。

例えば、データベースに数百万件のレコードを登録した際のクエリ性能(検索や集計などのクエリに対する応答速度)や、大量の画像ファイルをアップロードした際のストレージ処理能力などが検証対象となります。

負荷テストが「同時アクセス数」に焦点を当てるのに対し、ボリュームテストでは「データ量」に注目します。初期段階では問題なく動作していても、運用を続けるうちデータが蓄積されてパフォーマンスが低下することは少なくありません。

システムの長期的な安定稼働のためには、ボリュームテストの結果を踏まえたデータアーカイブ(古いデータの退避)やパーティショニング(データの分割管理)などの対策が求められます。

障害許容性テスト

「障害許容性テスト」は、システム障害が発生した際に、適切に検知・通知され、復旧が正しく行われるかを検証するテストです。サーバーダウンやネットワーク障害を意図的に発生させ、自動復旧や予備システムへの切り替えが期待通りに動作するかを確認します。

障害発生時の影響範囲や復旧までの時間を把握することで、運用体制の整備やユーザーへの説明準備にもつながります。

耐久テスト

「耐久テスト」は、システムを長時間連続稼働させた際に、メモリリークやリソース枯渇などの問題が発生しないかを検証するテストです。

このテストでは、数日間から数週間にわたって稼働させ、パフォーマンスの劣化や予期しない停止が起きないかを確認します。

金融や医療分野をはじめとするミッションクリティカルなシステムは、恒常的な安定稼働が必須であるため、耐久テストを通して問題点を事前に発見・解消しておくことが欠かせません。

非機能テストの実施手順

非機能テストでプロダクトの品質を確保するためには、限られたリソースを適切に配分するための優先順位付けや、テスト時の条件を可能な限り本番稼働に揃える設計プロセスが重要です。

ここでは、非機能テストの実施手順と各工程での注意点について解説します。

非機能テストの実施手順

1. 非機能要件の明確化

テストの前提として、開発チームや発注元と非機能要件を具体的にすり合わせておくことが重要です。

「応答時間は何秒以内であるべきか」「同時アクセス数はどの程度を想定するか」「セキュリティ対策としてどのレベルまで求めるか」など、具体的な数値目標や許容範囲を定義します。

非機能要件が曖昧なままテストを進めると、「テストチームは十分だと思ったが、要求水準に達していなかった」という行き違いや、「品質を厳しく求めすぎてしまい、テストの工数を浪費した」といった問題が起こります。

限られたリソースを有効活用して必要な品質を確保するために、計画段階での共通認識を形成しましょう。

2. テスト計画の策定

非機能要件を定義できたら、テスト計画として次のような項目を検討します。

  • テスト範囲・優先順位
  • 実施期間
  • 担当者
  • 使用するツール・環境

有限なリソースのなかで十分な品質を確保するためには、優先度に基づいたリソースの最適化が欠かせません。例として、ECサイトであれば、決済処理の性能とセキュリティを最優先とし、管理画面のユーザビリティは次の段階で検証するといった判断が考えられます。

3. テスト設計

全体の計画を策定した後は、具体的なテスト観点の洗い出しやテストケースの作成を進めます。

非機能テストのテストケースには、例として次のような要素を含めます。

非機能テストのテストケースに含める要素(一部)

性能テスト・負荷テストなど

  • テスト対象(機能やAPI)
  • テスト条件(同時ユーザー数、データ量など)
  • 期待結果(応答時間、スループットなどの基準値)
  • テスト手順
  • テストデータの仕様

セキュリティテスト

  • 検証する脆弱性項目
  • 攻撃パターンの詳細
  • 期待される防御動作

実際の利用方法や起こり得るリスクを多面的に考慮してテストケースを設計することで、リリース後のトラブルを予防し、安定したシステム運用につなげられます。

4. テスト環境の構築とデータ準備

次に、本番環境に近いインフラ構成やネットワーク環境を用意し、実際の運用状況に近い状態を再現できるテスト環境を構築します。

負荷テストやボリュームテストでは、実運用を想定した大量のテストデータや、複数ユーザーを模したアクセスパターンを準備します。

5. テスト実行と結果分析

設計したテストケースに従ってテストを実施し、応答時間、エラー率、リソース使用状況などのデータを収集します。

取得したデータを要件と照らし合わせて合否判定を行い、改善が必要な個所を特定します。

【結果分析の例】負荷テストの場合

  • 要件:同時アクセス数が1000人以下の状況で、1秒以内に応答できる
  • テスト結果:同時アクセス500人を超えると3秒以上かかる
    →パフォーマンス改善が必要

6. 改善と再検証

テストで発見された問題を開発チームに共有し、修正や最適化を実施します。改善後は再テストを行い、問題が解消されたか、ほかの箇所に影響が出ていないかなどを確認します。

1回のテストですべての問題を解決できないことも多いため、改善と再検証のサイクルを繰り返し、優先度の高い問題から段階的に対処していく姿勢が重要です。

非機能テストで、快適かつ安全に使えるプロダクトを実現する

非機能テストは、システムの実用性と信頼性を担保するために不可欠な検証工程です。プロダクトの性質に応じて適切な内容のテストを実施することで、安全かつ快適に使えるシステムの実現につながります。

一方で、観点の多様さや合否判定の難しさなどから、非機能テストの設計にあたっては、機能テスト以上に専門的な知見が求められます。設計に不安がある場合には、専門的な知見を持つ第三者機関との協業も有効な選択肢の一つです。

AGESTのソフトウェアテストサービスでは、非機能テストの設計から実施、改善計画まで一気通貫でサポートを提供しています。豊富な実績を持つテストエンジニアが、お客様の状況や課題に適切な助言を行い、長期的な内製化の支援まで行います。

自社の品質保証体制の見直しをお考えの方は、ぜひ一度ご相談ください。

ソフトウェアテスト サービス詳細ページ

TFACT (AIテストツール)

関連コンテンツ

この記事をシェア