今回は、システム開発において実現すべき機能や性能を明確にするプロセスである要件定義とは何かを解説します。
なお過去の記事で要求定義と要件定義の違いを説明していますので、以下より参照ください。
要件定義とは何か
要件定義は、システム開発プロジェクトにおける初期段階で、システムがどのような機能や性能を持つべきかを明確にするための重要なプロセスです。この段階で決定された要件は、開発全体の指針となり、プロジェクトの成功に直結します。要件定義では、以下のポイントが考慮されます。
What:何を書くのか
要件定義では、システムが満たすべき業務要件、機能要件、非機能要件などを書きます。これには、ユーザーが期待するシステムの機能や性能、操作性、セキュリティ要件などが含まれます。詳細は”記載事項”の章を参照ください。
How:どのようなフォーマットで書くのか
要件定義書は、文書形式、図表、フローチャートなどを活用し、読みやすく整理されることが求められます。ツールとしてはスライド・ドキュメント・スプレッドシートなど多岐に渡りますが、企業ごとにテンプレートを使うことも多いです。
Who:誰が書くのか
要件定義は、プロジェクトマネージャー、ビジネスアナリスト、システムアナリスト、ユーザー代表者などが協力して作成します。またSIerなどでは要件定義と設計はSE(システムエンジニア)が、より下流工程の開発やテストはプログラマーが担当することもあります。
For Whom:誰のために書くのか
要件定義は、開発チーム、テストチーム、運用チーム、さらにはプロジェクトのステークホルダーに向けて書かれます。これにより、全員がプロジェクトの目標や期待する成果を共有し、一貫した理解を持つことができます。
When:開発のどのタイミングで書くのか
要件定義はプロジェクトの起点となるので、開発の初期に作成されます。詳細は次項を参照ください。
ウォーターフォール開発における要件定義の位置づけ
ウォーターフォール開発モデルでは、開発プロセスが段階的に進行します。要件定義はこのプロセスの最初のフェーズであり、その後の設計、実装、テスト、運用といったフェーズの基盤となる重要な位置づけです。
前後のプロセス
前のプロセス
要件定義に先立って、プロジェクトの企画やビジネス要件の分析が行われます。この段階で、ビジネス上の目標や課題が明確にされ、それを実現するためのシステムの必要性が議論されます。
後のプロセス
要件定義の後に、システム設計が行われます。この段階では、要件定義で決めた内容を基に、システムの構造や技術的な仕様が詳細に設計されます。
要件定義で何を決めるか
前項の”What”で述べた通り、システムがどのような機能を持ち、どのように動作すべきか、またどのような制約があるかを決定します。具体的には業務要件、機能要件、非機能要件が含まれます。詳細は次項参照ください。
要件定義の記載事項
要件定義書には、業務要件、機能要件、非機能要件が明確に記載されます。これらはシステム開発の成功に不可欠な要素であり、プロジェクトの目標を達成するために必要な仕様を網羅的に定義します。
業務要件
業務要件は、システムがビジネスのニーズをどのように満たすかを定義するものです。これには、システムが解決すべきビジネス上の課題、ユーザーが期待する成果、ビジネスプロセスの改善点などが含まれます。業務要件は、システムが達成すべき大きな目標を示しており、すべての機能要件や非機能要件の基盤となります。
機能要件と非機能要件
機能とは何か
そもそも”機能”とは、システムがユーザーに提供する具体的な動作やサービスを指します。しかしこの説明だけだと、何が機能要件で何が非機能要件なのかわかりずらいですね。機能を言い換えると、ユーザーに対して直接的に”何をするか”と言えます。そして機能を定義している機能要件は”システムが何をするか“であると言え、非機能要件は”システムがどうやってそれをするか“や、”どのような条件で動作するか“を説明するものだと言えます。
機能要件の具体例
- ユーザー認証:ユーザーがシステムにログインするための認証機能。IDとパスワードを使用して、ユーザーがシステムにアクセスできるようにする。
- データ入力フォーム:ユーザーが特定のデータを入力し、データベースに保存できるようにする機能。
- レポート生成:ユーザーが特定の期間の売上データを選択し、そのデータに基づいてレポートを生成する機能。
非機能要件の具体例
- 性能要件:システムが1秒以内に検索結果を表示できること。これにより、ユーザーのストレスを軽減し、システムの使いやすさを向上させる。
- セキュリティ要件:システムがユーザーのデータを保護するために、SSL暗号化や多要素認証を採用すること。これにより、データの安全性を確保する。
- 可用性要件:システムが99.9%の稼働率を維持すること。これにより、ユーザーがいつでもシステムを利用できるようにする。
要件定義で何を決めないか
要件定義では、システムがどのような機能や性能を持つべきかを決めますが、具体的な技術的設計や実装方法については決定しません。具体的には、プログラミング言語の選定、データベースの構造設計、インターフェースの詳細な設計、使用するフレームワークやライブラリの選択などは、設計フェーズで詳細に検討されます。要件定義は”何を実現するか”に焦点を当て、”どうやって実現するか”は技術的な詳細を決める設計フェーズに委ねられます。
例えば、要件定義では”ユーザーがログインできる”という機能を定義しますが、ログイン機能をどのように実装するか(例: OAuthを使うのか、独自の認証方式を採用するのか)は設計フェーズで決めます。また、「システムが高い可用性を持つべき」という要件を決めますが、それを実現するための具体的なインフラ構成や冗長化の方法は設計フェーズの議題です。
コメント