テストを大別すると、機能テストと非機能テストに分けられます。
機能テストは、システムが仕様どおりに動作するかを確認するためのテストであり、非機能テストは、システムの性能やセキュリティ、ユーザビリティなどの品質特性を評価するためのテストです。
本記事では、機能テストと非機能テストの違いや種類、テスト計画への組み込み方について解説します。
両者の違いと相互関係を理解し、より効果的なテスト計画立案にお役立てください。
機能テストとは
機能テストとは、システムが仕様通りの機能を正しく実行するかを確認するテストです。
具体的には、入出力の正当性、業務シナリオの網羅、影響分析による退行チェックなどが中心となっています。
このテストは、「その機能がきちんと“できる”かどうか」を確認することが目的であり、主にユーザーの操作に直接関わる部分に対して実施されます。
主なテストとして、以下のようなものがあります。
- 単体テスト
各モジュールやコンポーネントが正しく動作するかを確認します - 結合テスト
複数のモジュールやコンポーネントを組み合わせて、正しく動作するかを確認します - システムテスト
システム全体が正しく動作するかを確認します - 受入テスト
実際に使用するシナリオに基づいて、ユーザーがシステムを操作し、要件を満たしているかを確認します - 回帰テスト
システムへの変更や修正が、既存の機能に影響を与えていないかを確認します - 探索的テスト
テストケースを事前に定義せず、実際の操作を通じてシステムの挙動を確認します - 例外処理テスト
異常系の入力や操作に対して、システムが適切にエラー処理を行うか確認します。
非機能テストとは
一方、非機能テストは、システムの機能以外の特性、つまり性能、信頼性、セキュリティ、使いやすさ、拡張性などといった品質全般に関わる特性を評価するためのテストです。
例えば、大量アクセス時に応答速度がどれくらい保たれるかといった性能面や、個人情報が適切に保護されているかというセキュリティ面を確認します。
非機能テストの目的は、「機能がどれだけ快適・安全・効率的に使えるか」といった、機能そのものではなくその周辺の品質を評価することにあります。
主なテストとして、以下のようなものがあります。
- パフォーマンステスト
システムの処理速度やレスポンス時間など、システムのパフォーマンスが要求を満たしているか確認します - 負荷テスト
システムに高負荷(同時接続、高負荷な処理など)をかけて、性能や安定性を確認します - ストレステスト
システムに極端な負荷をかけて、システムの限界や耐障害性を確認します - 運用テスト
バックアップやリカバリ、障害時の対応手順など、システムの運用に関する要件を確認します - アクセシビリティテスト
システムが障害者や高齢者など、特定のユーザーに対しても利用可能かを確認します - 互換性テスト
システムが異なる環境やプラットフォームで正しく動作するかを確認します - ユーザビリティテスト
システムのUI/UX(操作性や視認性)を確認します - セキュリティテスト
データの暗号や機密データの取り扱い、脆弱性診断などシステムのセキュリティ要件を確認します。
▶ パフォーマンステスト(性能テスト)の主な4種類や指標、実施フローをプロが解説
機能テストと非機能テストの違いを比較
ここでは、機能テストと非機能テストの違いを「目的」「評価視点」「成功基準」「テスト実行タイミング」の4つの観点から解説します。
| 観点 | 機能テスト | 非機能テスト |
| 目的 | システムが仕様通りに正しく動作するかを確認。 | システムの品質(性能、セキュリティ、操作性など)が期待通りかを確認。 |
| 評価視点 | 入力と期待出力に基づいたテストケースで検証。成功/失敗の判定が明確。 | 性能や安全性、操作性など多面的に評価。基準を明確に定義する必要がある。 |
| 成功基準 | 期待された結果が得られれば成功。例:ログイン成功/失敗の判定。 | ISO 25010などの品質モデルに基づいて基準を設定。複数の評価項目がある。 |
| テスト実行タイミング | 実装後の各工程(単体、結合、システムテスト)で段階的に実施。 | 要件定義や設計段階から準備し、システム完成後に本格実施(負荷・セキュリティ等)。 |
3-1 目的
機能テストの目的は、システムが仕様どおりに正しく動作しているかを確認することです。
具体的には、ある入力に対して期待される出力が得られるか、業務フローが問題なく処理されるかといった観点でテストを行います。ログイン機能やデータ登録処理など、ユーザーの操作によって実行される機能の正確性を検証することに焦点が当たります。
一方、非機能テストの目的は、システムの「品質特性」を評価することです。たとえば、システムの応答速度や同時アクセスへの耐性、セキュリティの堅牢性、操作性の良さなどが対象です。つまり、「機能が正しく動くか」ではなく、「機能がどれだけ快適・安全に使えるか」を検証するのが非機能テストです。
3-2 評価視点
機能テストでは、各機能が仕様どおりに動作するかを確認するためのテストケースを作成します。
業務フローやユーザー操作に沿ったシナリオをもとに、「入力」と「期待される出力」に基づいて評価します。そのため、テストの結果は成功か失敗かが明確になります。
一方、非機能テストでは、性能、セキュリティ、ユーザビリティなど、品質に関するさまざまな観点から評価を行います。例えば、性能テストでは負荷をかけて応答時間や処理能力を測定し、セキュリティテストではツールを使って脆弱性の有無を確認します。こうしたテストでは、評価項目や基準が機能テストよりも幅広く、成功基準が明確でないことも多いため、あらかじめ評価基準を定義しておくことが重要です。
3-3 成功基準(判定基準)
機能テストでは、入力と期待される出力の一致をもって成功と判断します。
たとえば、正しいユーザー名とパスワードを入力してログインできれば合格、できなければ不合格といったように、判定が明確です。
非機能テストでは、成功基準をより総合的に定義する必要があります。たとえば、ISO/IEC 25000シリーズ(SQuaRE)やISO 25010などの品質モデルが参考にされます。これらの規格では、「利用時の品質」と「製品の品質」という2つの視点が定義されています。
- 利用時の品質:有効性、効率性、満足性、リスク回避性、利用状況適合性
- 製品の品質:機能適合性、性能効率性、互換性、使用性、信頼性、セキュリティ、保守性、移植性
非機能テストでは、これらの観点に沿って、「何をもって合格とするか」を明確に定義した上で評価を実施します。
3-4 テスト実行タイミング
機能テストは、開発工程の後半にかけて段階的に実施されます。
具体的には、実装直後の単体テスト、複数モジュールを組み合わせた結合テスト、システム全体を対象としたシステムテストなどが該当します。
非機能テストは、開発の初期段階から計画・実施することが可能です。
たとえば、要件定義や設計段階で非機能要件を明確にしておき、開発中には性能テストやセキュリティチェックを並行して行う場合があります。
特に、リリース前の最終段階では、負荷テストや脆弱性診断などを通じて、システム全体の安定性や安全性を確認することが求められます。
テスト計画への組み込み方
最後に、機能テストと非機能テストをテスト計画にどのように組み込むべきかを解説します。
両者はそれぞれ異なる観点で品質を保証するものであり、相互に補完し合う関係にあります。以下の5つの観点を意識して、テスト計画を立てましょう。
- 品質リスクの洗い出しと評価
- カバレッジ戦略
- 自動化と手動の棲み分け
- 計測指標と受入基準
- テスト環境/テストデータの整備
4-1 品質リスクの洗い出し
まずは、機能面・非機能面の両方から品質リスクを整理します。
機能テストでは業務フローや処理機能に対するリスク、非機能テストでは性能・セキュリティ・操作性などの品質特性に関するリスクを抽出し、それぞれの重要度や影響度を評価します。
4-2 カバレッジ戦略の策定
洗い出したリスクをもとに、機能・非機能それぞれのカバレッジ(網羅範囲)を定義します。
機能テストでは、機能単位でのテストケース設計が中心となります。
非機能テストでは、たとえば「セキュリティ診断ツールでOWASP Top 10をカバーする」など、対象範囲と基準を明確にしておくことが重要です。
4-3 自動化と手動の棲み分け
機能テストと非機能テストの自動化と手動の棲み分けを考慮します。
機能テストではユニットテストや回帰テストの自動化が効果的です。
非機能テストでも、負荷テストやセキュリティスキャンなどは自動化が可能です。ただし、すべてを自動化するのは現実的ではないため、「頻度」や「工数」に応じて手動と自動のバランスを取ることが重要です。
4-4 計測指標と受入基準の明確化
機能テストと非機能テストの計測指標と受入基準を明確にします。
機能テストでは「入力に対して期待通りの結果が出ること」が判断基準となります。
非機能テストでは、応答時間・スループット・同時接続数・検出された脆弱性の有無など、定量的な指標を事前に定め、達成すべき基準値(例:応答時間1秒以内)を明示します。
4-5 テスト環境/テストデータの整備
テストの信頼性を担保するには、実環境に近いテスト環境と現実的なテストデータが必要です。
機能テストでは、業務フローを正確に再現できる環境が重要です。
非機能テストでは、性能測定やセキュリティ検証が正しく行えるように、負荷をかけられる本番相当の環境や、実データに近いサンプルが求められます。
機能テストと非機能テストの双方において、テスト環境やテストデータの整備が重要です。
特に非機能テストでは、性能測定やセキュリティ検証が正しく行えるように、負荷をかけられる本番相当の環境や、実データに近いサンプルを用意することで、より正確な評価が可能になります。
機能テストにおいては、結合テストやシステムテストなどで、実際の業務フローに近い環境やデータが必要になるでしょう。
まとめ
本記事では、ソフトウェアテストにおける「機能テスト」と「非機能テスト」の違い、具体的なテストの種類、そしてテスト計画への組み込み方について解説しました。
機能テストは、システムが仕様どおりに正しく動作するかを確認するためのテストであり、主に業務フローやユーザー操作に直結する部分を対象とします。
一方、非機能テストは、性能やセキュリティ、ユーザビリティなど、機能以外の品質特性に着目し、快適さや信頼性を評価するためのものです。
両者は目的や観点が異なり、補完し合う関係にあります。どちらか一方で良いというものではありません。適切に組み合わせて、システム全体の品質を確保していきましょう。
バルテスはテスト専門企業として、コンサルティングやテスト自動化、テストアウトソーシングなど、さまざまなサービスを提供しています。