背景
昨年から会社でWeb開発の手法を学んできましたが、開発技術面がある程度理解できてきたので、設計面での勉強を開始しました(開始させられました)。Udemy「【入門】システム要件定義と基本設計」を視聴して、理解したことをアウトプットしていこうと思います。
Udemyの講義はこちら
https://www.udemy.com/course/digisaku_requirements_definitio
要件定義の進め方
要件定義の段階
要件定義には、要望、要求、要件という段階があり、それに検討と提案を含めた5つのフェーズで進められる。
- 要望 こんなシステムがあったらいいな(ユーザーが出す)
- 要求 こんな機能を作ってほしい(PMがSEに要求する)
- 要件 作る機能は何か(双方の合意を得る)
上記に加えて検討と提案を含めた5つのフェーズで進められる
要望→要求→検討→提案→要件
要望フェーズ
まずは要望フェーズで、現状とゴールを把握し、ギャップから「こんなシステムがあったらいいな」という要望を洗い出す。
このフェーズではPMがユーザーにヒアリングを行い、ユーザーが抱える課題や問題点を抽出し、それを解決するための要望を明確にする。
要望フェーズで明確にすること
- 現状の洗い出し
- ゴール設定
- ギャップ分析
- システムに求めるもの(ユーザーにヒアリング)
失敗例
ユーザーから部分最適な要望しか抽出できない
それらが実装、反映されなかった時の反発の可能性がある
要求フェーズ
次に要求フェーズでは、要望フェーズで出された要望をもとに、PMがエンジニアに「こんなシステムを作りたい」と伝える。
このフェーズでは、数値目標や受け入れ条件を明文化し、業務フローや機能・非機能などを定義する。
PMは立場の違いによる意見の食い違いを収拾してまとめることが必要。
要求フェーズで明確にすること
- 数値目標
- 目標を課題に分割
- 受け入れ条件の明文化
- 業務フロー
- 機能・非機能(実装したい事)
失敗例
要望をそのまま記載するののはNG
どんな課題を解決するかを明確にすることが求められる。
検討フェーズ
検討フェーズでは、SEがITの目線で企画の実現性を検討する。
要求の中で特に何を開発するか、すべて開発するのか、何からするかなどを検討し、必要な機能がそろっているか、技術的に可能か、予算算出、納期・スケジュール感などを明確にする。
検討フェーズで明確にすること
- 必要な機能がそろっているか
- 技術的に可能か
- 予算算出
- 納期・スケジュール感
失敗例
PMからの要求そのままに機能を実装するのはNG
トレンドなどから本当にこの要求で問題ないかを検討するべき。
提案フェーズ
提案フェーズでは、ビジネス側にヒアリングしつつエンジニア側が検討したことをフィードバックする。
代替案を出したり、実装する機能しない機能を明確にすることが求められる。
実装が難しくても「できません」といった断り方ではなく代替案や困難な理由を提示するなどビジネス側が納得できる根拠を提示する。
提案フェーズで明確にすること
- 要求事項へのフィードバック
- 実装する機能・しない機能
- 開発コスト
- 期間
失敗例
このフェーズではエンジニアが伝えても伝わらないことがあるため、画面サンプルを作ったり、変更点や当初から変わったことはしっかりと伝える必要があることがある。
要件フェーズ
ビジネス側とエンジニア側で決定事項を協議し、共通認識とすることが目的
要件フェーズで明確にすること
要件フェーズでは、ビジネス側とエンジニア側で決定事項を協議し、共通認識としする。
機能一覧や実装の順番、実装しない機能、業務フローの最新版などを明確にすることが求められる。
失敗例
机上の空論になりやすい。
ユーザーにとって使いやすいように業務フローに沿って確認すること。
最後に
各フェーズで明確にすることや失敗例などがあるが、要件定義にはシステム開発において重要なポイントが多くある。
要件定義が不十分だとシステムの開発プロセス全体が混乱し、コストや時間の浪費、開発成果物の不備といった問題が生じるため、正しい要件定義を行うことが求められる。