What-are-non-functional-requirements

非機能要件とは? 重要性、定義、種類

ソフトウェア開発プロジェクトでは、プロジェクトを成功させるために、様々な要件を特定し、文書化し、満たす必要があることがよくあります。その中でも、非機能要件(NFR)は、ソフトウェアシステムの全体的な品質、使い勝手、性能、信頼性を定義する上で重要な役割を担っています。NFRは機能要件とは異なり、「何をするか」ではなく「どのように機能させるか」に重点を置いています。本記事では、非機能要件の定義、ソフトウェア開発における非機能要件の重要性、ソフトウェアシステムの設計・開発時に開発者が考慮すべきさまざまな種類のNFRについて詳しくご説明します。

1.非機能要件とは?

まず、非機能要件の定義を説明していきます。

非機能要件の定義

非機能要件、または品質属性と呼ばれることもあり、機能的な動作を超えたソフトウェアシステムの特性や特徴を指します。これらの要件は、ソフトウェア・システムが、ユーザー、利害関係者、およびそれらが運用されるより大きな環境の期待やニーズを満たすことを保証するために重要です。ここの「機能」は、顧客の「要求」とほぼ同義であることもあります。例えば、「待ち時間を5秒以下にしましょう」とか、「これらの情報パックが1つの画面にすべて含まれるようにしましょう」などです。

非機能要件は言い換えれば、ソフトウェアシステムの性能、セキュリティ、ユーザビリティ、信頼性、保守性、拡張性、相互運用性、法規制への対応、環境への影響などを記述したソフトウェア要件です。機能要件と非機能要件を比較した場合、システムが何をすべきかを規定する機能要件とは異なり、非機能要件は、システムがどれだけうまくそれを行うべきかに焦点を当てます。また、ソフトウェアシステムが意図した目的を満たし、ユーザーや利害関係者のニーズを満たし、関連する法律、規制、標準に準拠することを保証するのに役立ちます。

非機能要件の重要性

非機能要件は、ソフトウェアプロジェクトの成功に不可欠です。重要な理由は以下の通りです。

  • ソフトウェアシステムをビジネスまたはユーザーのニーズに合わせる: システムがユーザーの期待するパフォーマンス、ユーザビリティ、セキュリティに合致していることを保証します。
  • ベンチマークまたは基準を提供する: ソフトウェアシステムが望ましい品質属性を満たしていることを確認するために、測定とテストのための基準を与えます。
  • リスクの軽減を支援する: 非機能要件は、システムの信頼性、拡張性、保守性に影響を与える可能性のあるリスク、セキュリティ侵害、性能ボトルネック、メンテナンス問題などのエラーを軽減することができます。

ソフトウェアシステムの品質と持続可能性の向上に貢献する:より適応性、拡張性、効率性を高める。そして最も重要なことは、ユーザーや顧客のニーズを満足させることです。

2.非機能要件の定義と文書化の方法

非機能要件を定義し文書化するには、体系的かつ構造的なアプローチに従う必要があります。ここでは、いくつかの重要なステップをご紹介します。

1- ビジネスニーズとユーザーニーズを特定する

最初の段階は、ソフトウェアシステムのステークホルダーやユーザー、および彼らのニーズ、期待、懸念事項を特定することです。これには、インタビュー、アンケート、ワークショップなどを通じて意見情報を収集することが含まれます。

2- 要求事項の優先順位付け

第2段階は、非機能要件の重要度、実現可能性、トレードオフに基づいて、優先順位をつけることです。リストにまとめ、どれを採用するかを決めます。これには、MoSCoW(Must-Have, Should-Have, Could-Have, and Won’t-Have) や Weighted Decision Matrix などの手法を利用し、要件をランク付けします。

3- 要件の測定とテスト

第3段階はテストです。非機能要件が望ましい品質属性を満たしていることを確認するために、測定とテストを行うことが極めて重要です。パフォーマンステスト、侵入テスト、ユーザビリティテスト、コードレビューなどのツールやテクニックを使用することを検討することができます。

3.非機能要件の主な種類

非機能要件は、その性質、範囲、目的によっていくつかの種類に分類することができます。一般的には、主に10種類ありますが、本記事では、以下の6つの非機能要件に分類します。

パフォーマンス・スケーラビリティ

ソフトウェア・システムの機能性に関しては、パフォーマンスとスケーラビリティの2つの重要な要素があります。性能要件は、ソフトウェアシステムがそのタスクを実行する速さや効率、ユーザーの入力に対する応答などを指定します。これには、応答時間、スループット、待ち時間、リソース利用率などの要素が含まれます。パフォーマンス要件は、ソフトウェアシステムがユーザーの期待するスピードや効率に応えるために重要です。

ウェブスピードをチェックするための推奨ツールには、GoogleのPageSpeed Insightsがあります。

スケーラビリティは、ソフトウェアシステムの性能に関する非機能要件を満たすためにも役立ちます。これは、ソフトウェアシステムがワークロード、ユーザー、データ量の増減にどの程度対応すべきかを定義するものです。これには、水平方向のスケーリング(サーバーにマシンを追加する)、垂直方向のスケーリング(マシンにRAMとCPUを追加する)、ロードバランシング、クラスタリングなどの要素が含まれます。スケーラビリティ要件は、ソフトウェアシステムが将来の成長や変化に対応できることを保証するために重要です。

相互運用性・互換性

相互運用性要件は、ソフトウェアシステムが他のシステム、アプリケーション、およびプラットフォームとどの程度統合し、共存すべきかを説明するものです。これには、データ交換形式、API、プロトコル、互換性などの要素が含まれます。相互運用性要件は、ソフトウェアシステムが他のシステムや機器と通信して動作できることを保証する上で極めて重要です。

また、環境の文脈では、互換性非機能要件は、システムまたはその要素が、ある環境または別の環境内でどのように起動できるかを決定します。通常、ハードウェア、ソフトウェア、またはその他の使用プラットフォームの仕様が含まれます。言い換えれば、あるプラットフォームで実行されたアクションが、別のプラットフォームでどの程度うまく実行されるかを定めるものです。また、2つの異なる環境からシステム要素にアクセスし、相互作用することができるかを規定します。

Google Analyticsなど、訪問者のデータにアクセスできる分析プラットフォームを使って、どの種類のデバイスやブラウザ、そのバージョンが最もよく使われているかを調べることができます。そのため、OSの互換性を維持するために、継続的なアップデートが必要なデバイスを決定します。

信頼性・保守性

信頼性の要件は、可用性、耐障害性、回復性、エラー認識など、通常および異常な状況下で、ソフトウェアシステムがどの程度タスクを実行すべきかを規定します。より具体的には、所定の状況において、システムがエラーなく完璧に動作する可能性がどれだけあるかということです。信頼性要件は、ソフトウェアシステムの信頼性と回復力を確保するために不可欠です。

さらに、時間の経過とともにソフトウェアシステムを修正、更新、修理することの容易さは、保守性基準によって記述されます。例えば、モジュール性、テスト容易性、文書化、コード品質などです。言い換えれば、バグ修正に必要な時間を表しています。保守性要件は、ソフトウェアシステムの適応性と持続性を保証するために重要です。

また、システムの復旧にかかる時間を評価するために、MTTRSの指標を使用することも検討できます。例えば、MTTRSが0.8であれば、システムは24時間で80%の保守性を持ち、バグが1日で修正される確率は80%であることを意味します。

ユーザビリティ

ユーザビリティの観点からの非機能要件とは、ソフトウェア・システムのユーザーによる使いやすさ、学びやすさ、満足度を指します。これには、ユーザーインターフェイスの設計、ナビゲーション、フィードバック、エラー処理などの要素が含まれます。ユーザビリティの要件は、ソフトウェアシステムがユーザーフレンドリーでアクセスしやすいことを保証するために不可欠です。

ユーザビリティの評価として提案されているのは、ニールセン・ノーマン・グループのフレームワークに基づくもので、以下のようなものがあります。

  • 学習性:ユーザーがインターフェイスを見たら、どう行動すればいいのかがわかりやすいか
  • 効率性:ユーザーはどれだけ早く目標に到達できるか、望ましいアウトプットを見つけることができるか
  • 記憶性:ユーザーは、時間が経っても、すぐにそのインターフェイスで効率的に作業できるか
  • エラー:ユーザーはどれくらいの頻度でミスを犯すのか

満足度:UX/UIは使っていて心地よいか

セキュリティ

セキュリティ非機能要件は、システムまたはその部品内のすべてのデータが、マルウェア攻撃や不正アクセスから保護されることを保証します。セキュリティ非機能要件のシェアは、具体的な機能的対応に変換することができます。

システムのセキュリティが特定の標準や暗号化技術に依存しており、管理画面を不正アクセスから保護したい場合は、ログインフローやさまざまなユーザーの役割を、システム動作やユーザーアクションとして定義します。

環境要件

環境要件は、ソフトウェアシステムが物理的または自然環境に与える影響について記述します。これには、エネルギー消費、二酸化炭素排出量、持続可能性などの要素が含まれます。環境要件は、ソフトウェアシステムが環境に配慮したものであることを保証するために不可欠です。

まとめ

まとめると、非機能要件は、ソフトウェアプロジェクトの成功に重要な役割を果たします。非機能要件は、ソフトウェア・システムが、ユーザー、利害関係者、およびソフトウェアが運用される大きな環境の期待やニーズを満たすことを保証します。非機能要件は、ソフトウェアシステムが望ましい品質属性を満たしていることを確認するための測定とテストのベンチマークを提供します。また、リスクを軽減し、ソフトウェアシステムの品質と持続可能性を向上させ、ユーザーと顧客のニーズを満足させるのに役立ちます。非機能要件の定義、重要性、種類を理解することで、ソフトウェア品質専門家は、ユーザーの期待に応え、ビジネスを成功に導くより良いソフトウェアシステムを開発することができます。

ソフトウェア開発において、多くのITエンジニアへのアクセスをお考えなら、豊富なリソースを擁するCMC Japanを選択肢のひとつとして検討してみてはいかがでしょうか。CMC Japanは、30年の開発実績と2200人以上のIT専門家をもって、お客様のプロジェクトをお手伝いさせていただきます。お気軽にご相談ください。