システム開発の工程では、最初に行われる要件定義のフェーズでクライアントがシステムに実装してほしい機能である機能要件を定義します。
後に続くテスト工程で機能要件の実装内容についてテストを行いますが、テスト工程で確認するべき内容は機能要件だけではありません。
機能以外の要件である非機能要件についてもテストを行う必要があります。今回は、非機能テストについてとその重要性をご紹介します。
非機能テストとは?
非機能テストとは、システムの機能以外を検証するテストのことです。
例えば、生産管理系のシステムにおいて「部品の在庫情報を検索して、検索結果の一覧で表示して確認出来る画面」があるとします。
この画面の「部品の在庫情報を検索して、結果を表示する処理」は、システム本来の目的である「機能」に該当します。
機能の実現にあたって、クライアントと直接打ち合わせていなくても開発側が考慮しなければならない点がいくつかあります。
それは「検索結果は一度に10件まで画面に表示する」や「検索結果は5秒以内に表示する」などのユーザビリティ面や「5分以上無操作状態が続くと自動的にログアウトする」といったセキュリティ面などです。
これらは機能として実際に定義されていない部分ではありますが、機能を実現するうえで開発側は必ず考慮しなければなりません。
このようなシステムを開発する上で定義しなければならない実装する機能以外の内容を「非機能要件」と呼び、非機能要件に対して行うテストが「非機能テスト」です。
機能要件と非機能要件については、こちらの記事でも詳しく紹介しているのでぜひご確認ください。
また、非機能テストは、非機能要求グレードに基づいて行われるケースが多いです。
非機能要求グレードとは、情報処理推進機構(IPA)により制定されたクライアントと開発側の認識齟齬防止のために非機能要件の項目をリストアップして、各項目の要求レベルを示したものを意味します。
非機能要求グレードは、以下の6種類に大きく分類されます。
- 可用性
- 性能・拡張性
- 運用・保守性
- セキュリティ
- 移行性
- システム環境・エコロジー
これら6種類の項目を考慮して、非機能テストのテストケースを作成・実行します。
非機能要求グレードについては、こちらの記事でも詳しく紹介しているのでぜひご確認ください。
非機能テストの種類
非機能テストにはいくつかの種類があり、前述した非機能要求グレードの項目に基づいてテストが行われます。ここでは、代表的な非機能テストをご紹介します。
・性能(パフォーマンス)テスト
システムの処理時間などのパフォーマンスをテストします。
例えば、検索結果を画面に表示する機能を持つ画面にて、検索ボタンを押下した後、検索結果が画面に表示されるまでの応答時間を確認します。
テストの際は実際の利用状況やデータ量を再現してシステムを動かして検証することが理想的です。
・負荷(ストレス)テスト
システムが過負荷状態であっても耐えられる構造となっているかをテストします。
データベースに蓄積されたデータを参照する機能を利用する場合、膨大なデータが蓄積された過負荷状態であっても正常にシステムが稼働するかを確認します。
また、システムへのアクセスが集中した場合でもシステムがダウンしないかなど、クライアントのシステム利用に支障をきたさないかも確認します。
・ユーザビリティテスト
クライアントが利用しやすいシステムとなっているかをテストします。
システムは機能要件を満たしていることも大切ですが、利用するクライアントがストレスを感じないかも重要です。
「画面内のボタン配置や大きさが適切であるか」や「パソコンの利用経験を問わずさまざまな層が直感的に操作できるか」といったユーザビリティ面についてもテストします。
・セキュリティテスト
システムの安全性に関するテストです。悪意ある第三者からの攻撃による情報漏洩やシステム不具合による顧客情報の流出など、システム運用に伴うセキュリティ上のリスクを検証します。
・保守性テスト
システム運用において、メンテナンスしやすいものかをテストします。「エラーが発生した場合のリカバリ対応が迅速に行える環境であるか」や「ソースコードは可読性に長けて修正・拡張が容易か」といった部分を確認します。
・移植性テスト
システムを別の環境へ移行する際、移行作業が容易なものであるかをテストします。この移行作業を「マイグレーション」と呼びます。
システムはアクセス数やデータ量の増加に伴い、クラウド化や高性能なサーバーへの移管を行うケースも少なくありません。
そのため、マイグレーションが容易な設計となっているかはシステムにおいて重要な要素です。
マイグレーションについては、こちらの記事でも詳しく紹介しているのでぜひご確認ください。
非機能要件はなぜ重要?
非機能要件は機能要件と同じくらい重要です。利用は以下に挙げられます。
クライアントの満足度を高めるものだから
ユーザビリティやセキュリティ面などの非機能要件を明確に定義してテストすることで、クライアントはストレスなく安全なシステムを利用出来ます。
結果的に信頼性のあるシステムとなり、クライアントの満足度を高めます。
製品やサービスの市場優位性を左右するものだから
機能要件が正しく定義されていることは、公開されている製品やサービスにおいてはもはや大前提となっています。
そのため、非機能要件の定義を綿密に行いテストすることで他のシステムと差をつけ、市場優位性を高めます。
機能テストとの違いとは?
機能テストと非機能テストの違いは「システムの直接的な機能に関係するかしないか」です。
機能テストは、クライアントとシステムに実装すべき機能について打ち合わせて定義する機能要件についてのテストです。一方、非機能テストは機能要件以外の要素である非機能要件についてテストします。
機能要件は大切ですが、機能を重視するばかりではクライアントの満足度が高いシステムにはなりません。
機能要件と非機能要件のどちらも兼ね備えることで品質の高いシステムとなるため、どちらのテストも正確に行う必要があります。
【まとめ】非機能テストの重要性を理解しよう
非機能テストはシステム利用におけるクラインアントの満足度に繋がり、品質にも大きく影響する非機能要件を保証するための重要なテストです。
重要性を理解して、開発するシステムに必要な非機能要件を定義したうえで適切な非機能テストを行いましょう。