1. 概要
要件定義は、システム開発プロセスにおいて極めて重要な初期段階です。要件定義の目的は、システムや業務全体の枠組み、システム化の範囲と機能を明らかにすることです。この段階で、ユーザーや関係者のニーズを正確に把握し、システムが何をすべきかを明確に定義します。要件定義はシステム開発の基盤となるもので、この段階での誤りや不明確さは、後工程での大きな問題や手戻りの原因となります。そのため、要件定義を的確に行うことは、成功するシステム開発において欠かせません。
2. 詳細説明
2.1. 要件定義とは
要件定義とは、システム開発においてクライアントやユーザーの要求を整理し、明確な形で文書化するプロセスです。これは「何を」作るかを定義する工程であり、「どのように」作るかを決める設計工程の前段階に位置付けられます。
flowchart LR subgraph 上流工程 A[企画] --> B[要求分析] B --> C[要件定義] end subgraph 中流工程 C --> D[基本設計] D --> E[詳細設計] end subgraph 下流工程 E --> F[プログラミング] F --> G[テスト] G --> H[運用・保守] end style C fill:#ff9900,stroke:#333,stroke-width:2px style B fill:#ffffcc,stroke:#333,stroke-width:1px style D fill:#ffffcc,stroke:#333,stroke-width:1px
図1:システム開発工程における要件定義の位置づけ
2.2. 要件定義の目的の詳細
要件定義の主な目的は以下の通りです。
2.2.1. システムや業務全体の枠組みを明らかにする
システムが対象とする業務の全体像や関連する業務プロセスを明確にします。これにより、システムが組織のどの部分をサポートするのかが明らかになります。
2.2.2. システム化の範囲を明らかにする
どの業務プロセスをシステム化するのか、どこまでをシステムで自動化するのかを明確にします。これにより、開発の範囲が明確になり、スコープクリープ(要求の際限ない増加)を防ぐことができます。
2.2.3. システムの機能を明らかにする
システムに求められる機能や性能要件を詳細に定義します。ユーザーがシステムに何を期待しているのかを明確にし、それを満たすための機能を特定します。
graph TD A[要件定義の目的] --> B[システムや業務全体の
枠組みを明らかにする] A --> C[システム化の範囲を
明らかにする] A --> D[システムの機能を
明らかにする] subgraph 3要素の関係 E((システムや業務全体
の枠組み)) --- F((システム化の範囲)) F --- G((システムの機能)) E --- G end style A fill:#f9f,stroke:#333,stroke-width:2px style B fill:#bbf,stroke:#333,stroke-width:1px style C fill:#bbf,stroke:#333,stroke-width:1px style D fill:#bbf,stroke:#333,stroke-width:1px style E fill:#ffffcc,stroke:#333,stroke-width:2px style F fill:#ccffcc,stroke:#333,stroke-width:2px style G fill:#ccccff,stroke:#333,stroke-width:2px
図2:要件定義の目的の3要素の関係図
2.3. 要件定義の重要性
要件定義は以下の理由から重要です。
- プロジェクトの成功率向上:明確な要件定義は、プロジェクトの目標達成に直結します
- コスト削減:初期段階での問題発見は、後工程での修正に比べて低コストです
- 開発期間の短縮:明確な要件は、無駄な開発作業を削減します
- ステークホルダー間の認識一致:共通理解を形成し、後のトラブルを減らします
項目 | 説明 | 対応する目的 |
---|---|---|
システム概要 | システムの目的、全体像、位置づけの説明 | システムや業務全体の枠組み |
業務フロー図 | 対象業務の全体的な流れを示す図 | システムや業務全体の枠組み |
システム化対象業務 | 自動化・システム化する業務の範囲 | システム化の範囲 |
フェーズ分け | 開発を段階的に行う場合の各フェーズの範囲 | システム化の範囲 |
機能一覧 | システムが提供する機能のリスト | システムの機能 |
画面一覧 | 提供されるUIの概要リスト | システムの機能 |
帳票一覧 | システムから出力される帳票類のリスト | システムの機能 |
外部インターフェース | 他システムとの連携方法・範囲 | システム化の範囲 |
非機能要件 | 性能、セキュリティ、可用性などの要件 | システムの機能 |
表1:要件定義書に含まれる主な項目例
2.4. 要件定義と要求定義の違い
「要件定義」と「要求定義」は混同されやすい用語ですが、情報処理技術者試験では以下のように区別しています。
- 要求定義:ユーザーやステークホルダーから収集した「生の要望・要求」を指します
- 要件定義:要求定義を基に、実際にシステムに求められる要件として整理・体系化したものです
つまり、要求定義が「ユーザーが何を望んでいるか」を示すのに対し、要件定義は「システムとして何を実現すべきか」を示すものと言えます。要件定義では、矛盾する要求の調整や優先順位付けを行い、実現可能な形に整理します。
flowchart TD A[現状業務分析] --> B[問題点・課題の抽出] B --> C[ステークホルダーからの要求収集] C --> D[要求の整理・分析] D --> E[要件の定義] E --> F[要件の文書化] F --> G[要件定義書のレビュー] G --> H{承認されたか?} H -- Yes --> I[要件定義完了] H -- No --> E style E fill:#ff9900,stroke:#333,stroke-width:2px style F fill:#ff9900,stroke:#333,stroke-width:2px
図3:要件定義プロセスのフロー
3. 応用例
3.1. 企業の業務システム開発
大手小売企業が在庫管理システムを刷新する際、以下のように要件定義の目的を達成しました。
- システムや業務全体の枠組みを明らかにするために、物流、販売、調達、会計との連携を含む在庫管理の全体像を図式化し、関連部門と共有しました。
- システム化の範囲を明らかにするために、店舗での在庫確認、倉庫での入出荷管理、自動発注機能などを対象範囲として特定し、文書化しました。
- システムの機能を明らかにするために、リアルタイム在庫管理、予測発注、バーコードスキャン連携などの具体的な機能要件を定義し、優先順位付けを行いました。
3.2. Webサービス開発
スタートアップ企業がECサイトを開発する際、要件定義において以下の取り組みを行いました。
- システムや業務全体の枠組みを明らかにするために、商品管理、顧客管理、注文処理、決済、配送管理を含むECビジネスの業務フロー全体を可視化しました。
- システム化の範囲を明らかにするために、オンラインでの商品表示から購入、アフターサービスまでをシステム化対象として決定し、段階的リリース計画を作成しました。
- システムの機能を明らかにするために、商品検索、レコメンデーション、カート機能、決済処理、会員登録などの必要機能を特定し、プロトタイプを作成して検証しました。
3.3. 公共システムの開発
自治体の住民情報システム刷新では、要件定義の目的達成のために以下の取り組みを実施しました。
- システムや業務全体の枠組みを明らかにするために、住民基本台帳、税務、福祉など関連業務の全体像を業務フロー図としてまとめ、各部門の承認を得ました。
- システム化の範囲を明らかにするために、窓口業務のオンライン化、バックオフィス処理の自動化範囲を詳細に文書化し、優先度に基づくフェーズ分けを行いました。
- システムの機能を明らかにするために、住民情報検索、証明書発行、情報更新、他システム連携などの具体的な機能要件を定義し、ユーザー部門と合意形成を図りました。
4. 例題
例題1
問題: ある製造会社でIoTを活用した生産管理システムを開発することになりました。要件定義の目的に沿って、以下の各項目を適切に分類してください。
- 生産ラインのセンサーデータをリアルタイムで収集する
- 製造工程、在庫管理、出荷管理を含めた生産管理全体を対象とする
- 不良品発生時に自動で生産ラインを停止させる機能を含める
- 生産計画から出荷までの業務プロセス全体を可視化する
- モバイル端末からの在庫確認機能は第2フェーズで実装する
- システムや業務全体の枠組みを明らかにする:b, d
- システム化の範囲を明らかにする:b, e
- システムの機能を明らかにする:a, c
例題2
問題: 以下の要件定義書の記述のうち、要件定義の目的に照らして不適切なものはどれですか。
- 「システムはJavaで開発し、Oracle DBを使用する」
- 「システムは会計、販売、在庫の3つのサブシステムで構成される」
- 「在庫が指定の閾値を下回った場合、自動発注を行う」
- 「システムの対象業務は本社の営業部門とする」
- 「レスポンスタイムは3秒以内とする」
a. が不適切です。要件定義では「何を」作るかを定義するものであり、「どのように」作るかという実装方法(使用言語やDBの種類)は設計工程で決定すべき事項です。
b.~e.はそれぞれシステムの枠組み、機能、範囲、性能要件に関する適切な記述です。
例題3
問題: ある金融機関のオンラインバンキングシステムの要件定義において、「要件定義の目的」の観点から最も重要な課題は次のうちどれですか。
- システムのセキュリティ対策としてどの暗号化アルゴリズムを採用するか
- 既存の口座管理システムとの連携範囲をどこまでにするか
- システム開発に必要な人員配置をどうするか
- システムのリリース日をいつにするか
- 開発言語としてJavaを採用するかPythonを採用するか
b. が最も重要な課題です。既存システムとの連携範囲はシステム化の範囲を明らかにするという要件定義の目的に直接関連します。
a. は設計段階の課題、c. とd. はプロジェクト管理の課題、e)は設計・実装段階の課題であり、要件定義の直接の目的ではありません。
例題4
問題: ある製造業の会社で新しい生産管理システムの要件定義を行っています。以下のステートメントのうち、要件定義の目的(システムや業務全体の枠組み、システム化の範囲と機能を明らかにすること)を達成するために最も適切なアプローチはどれですか。
- 現行システムのソースコードを詳細に分析し、プログラム構造を踏襲する
- 類似業種の他社システムの機能リストを入手し、そのまま採用する
- 主要ユーザー部門にインタビューを行い、業務フローを可視化した上で、システム化対象を決定する
- システム部門の担当者だけで要件をまとめ、開発効率を優先する
- 予算と納期から逆算して実装可能な機能を決定する
c. が最も適切なアプローチです。主要ユーザー部門へのインタビューを通じて業務フローを可視化することで、システムや業務全体の枠組みを明らかにし、さらにシステム化対象(範囲)を決定することができます。
a. は既存システムの「どのように」の部分に焦点を当てており、b. は他社の状況に基づいているため自社の枠組みや範囲を適切に反映できない可能性があります。d. はユーザーの視点が欠けており、e. は予算・納期を優先していて要件定義の本来の目的に合致していません。
5. まとめ
要件定義の目的は、システムや業務全体の枠組み、システム化の範囲と機能を明らかにすることです。これにより、何を作るべきかが明確になり、後工程でのリスクを低減できます。具体的には、業務全体における新システムの位置づけ、システム化する業務の範囲、そして具体的に実装すべき機能を明らかにします。要件定義が不十分だと、開発の後工程での手戻りやコスト増大、最悪の場合はプロジェクト失敗につながります。適切な要件定義はシステム開発の成功の鍵であり、情報処理技術者にとって必須のスキルです。