はじめに
今回は、次のフェーズから非機能要件テストをするかも?になったので、事前に非機能要件テストはなんなのか、どのようなものがあるのかについてメモしていきたいと思います。お客さんのビジネス目標を達成させるために、いろいろなテストがあるんだなーともう一度思いますね。
非機能要件テストとは
非機能要件テスト(Non-Functional Requirements Testing)とは、システムの動作特性に焦点を当てたテストの一種です。機能要件テスト(Functional Requirements Testing)はシステムが「何を」するかを検証するのに対し、非機能要件テストはシステムが「どのように」動作するかを検証します。
- パフォーマンス
- セキュリティー
- 信頼性
- 使用性
と言った要件となります。たとえば、ログイン機能があるかどうかを確認するのは機能テストですが、100人が同時にログインしたときに事前に定めたレイテンシー内なのかなどを確認するのは非機能テストです。
非機能要件テストの重要性
非機能要件テストは以下の理由で非常に重要です
- ユーザー体験の質を確保する:速度、使いやすさなどはユーザー満足度に直結します
- システムの信頼性と安定性を保証する:予期せぬ障害や負荷にも耐えられるシステムを構築できます
- セキュリティリスクを軽減する:脆弱性を早期に発見し対策を講じることができます
- ビジネス継続性を確保する:災害やトラブル時の復旧能力を検証できます
非機能要件テストの種類と具体的なテストケース
1. パフォーマンステスト
負荷テスト
予想される通常の負荷条件下でシステムの応答性と安定性を検証します。
例)
- 1,000人の同時ユーザーがログインした状態でのシステム応答時間が非機能要件に満たしているのか
- データベースに10万件のレコードを格納した状態での検索機能の応答時間が非機能要件に満たしているのか
ストレステスト
システムの限界を超える負荷をかけて、どのように崩壊するか、またどの程度まで耐えられるかを検証します。
例)
- 想定ユーザー数の3倍のユーザーが同時アクセスした場合のシステム動作検証
- メモリ使用量が上限に達した時のエラー処理と回復能力の検証
スケーラビリティテスト
様々なユーザーの操作によるシステムが増加する負荷に合わせてアプリケーションまたは、システムがどの程のの上手く機能するかを測定するテストです。
例)
- ユーザー数を段階的に増加させた時のレスポンスタイムの変化測定
- データベースサイズが2倍、5倍、10倍に増加した場合の性能変化検証
2. セキュリティテスト
脆弱性スキャン
「脆弱性評価」とも呼ばれ、ネットワークやIT資産についてセキュリティー上の脆弱性、すなわち外部または内部の脅威アクターが悪用できる欠陥や弱点を評価するためのテストです。(IBM参照)
例)
- SQLインジェクションやXSS攻撃に対する脆弱性チェック
- 古いライブラリやコンポーネントの使用によるセキュリティリスクの特定
ペネトレーションテスト
ットワークに接続されているシステムに対し、ホワイトハッカーが実際に侵入を試みることにより、システムの脆弱性の有無を確認するテストのことです。(NTT参照)
例)
- 権限昇格の試行による管理者権限の不正取得可能性の検証
- セッションハイジャックによる認証バイパスの試行
セキュリティコンプライアンステスト
業界標準や法規制に基づくセキュリティ要件へ準拠しているかを検証するテストです。
例)
3. 信頼性テスト
回復性テスト
システムが障害から回復する能力を検証します。
例)
- データベースサーバーがダウンした後の自動フェイルオーバー機能の検証
- 突然の電源喪失後のデータ整合性とシステム回復の検証
フォールトトレランステスト
システムが部分的な障害の中でも機能を継続できるかを検証します。
例)
- ロードバランサー配下の一部のサーバーが停止した場合のサービス継続性確認
- ネットワーク遅延が発生した場合のタイムアウト処理と再試行メカニズムの検証
4. 使用性テスト
ユーザビリティテスト
一般的にはWebサイトやアプリの最適化を目的とした評価・検証手段を指します。ユーザーにWebサイトやアプリで実際に見える画面を体験してもらい、使い勝手についてフィードバックを得るテストです。簡単にいうと「ユーザーがシステムを効率的かつ満足して使用できるか」を検証します。(Kaizen Platform参照)
例)
- 新規ユーザーが説明なしで特定のタスクを完了できるかの検証
- 各画面の操作完了までにかかる時間と操作ステップ数の測定
アクセシビリティテスト
障害を持っているユーザーを含め、すべてのユーザーがシステムを使用できるかを検証するテストです。
例)
- スクリーンリーダーを使用した視覚障害者向け機能の検証
- キーボードのみでの操作可能性の確認(マウス操作が不要)
5. その他の非機能要件テスト
互換性テスト(ブラウザバリエーションテスト)
異なる環境、ブラウザ、デバイスでのシステム動作を検証します。
例)
- 異なるブラウザ(Chrome、Firefox、Safari、Edge)での表示と機能の一貫性確認
- 様々な画面サイズやモバイルデバイスでのレスポンシブデザインの検証
インストール・アンインストールテスト
システムのインストールとアンインストールのプロセスを検証します。
例)
- クリーンインストールと既存システムからのアップグレードの検証
- アンインストール後のシステム設定とファイルの残存物チェック
構成テスト
システムが様々な構成設定で正しく動作するかを検証します。
例)
- 異なるデータベース設定(MySQL、PostgreSQL)での動作確認
- 様々なキャッシュサイズや接続プール設定での性能検証
ドキュメントテスト
システムのドキュメントが正確で完全かつ理解しやすいかを検証します。
テストケース例:
- インストールガイドに従った実際のインストールプロセスの検証
- ユーザーマニュアルの手順に従って新機能を利用できるかの確認
非機能要件テストの実施プロセス
非機能要件テストを効果的に実施するためのステップは以下の通りです
- 要件の特定と分析: システムに求められる非機能要件を明確にします
- テスト計画の作成: テスト範囲、スケジュール、必要なリソースを計画します
- テスト環境の構築: 本番環境に近い適切なテスト環境を準備します
- テストケースの設計: 各非機能要件を検証するためのテストケースを作成します
- テストの実行: テストを実行し、結果を記録します
- 結果の分析と報告: テスト結果を分析し、問題点や改善点を報告します
- 改善策の実施: 発見された問題に対する対策を講じます
まとめ
非機能要件テストは、システム開発において機能テストと同様に重要なプロセスです。パフォーマンス、セキュリティ、信頼性、使用性など、様々な観点からシステムの品質を確保することで、ユーザーに優れた体験を提供し、ビジネス目標の達成に貢献します。
適切な非機能要件テストを計画・実施することで、機能的に正しいだけでなく、ユーザーの期待に応える高品質なシステムを構築することができるでしょう。
