システム開発の上流工程とは?流れとポイントを解説
COLUMN
最終更新日:2023年08月22日 / 投稿日:2023年08月22日
システム開発には大きく分けて上流工程と下流工程があり、上流工程はシステム開発の土台となる重要な工程です。重要であるからこそ、上流工程をスムーズに進め開発をトラブルなく進めるためには複数の注意点も存在します。
当記事では、システム開発における上流工程で何を行うのか、トラブルを起こさないためにはどうすればよいのか詳しく解説します。システム開発を行う方や、初めて上流工程に関わる方は当記事をぜひ参考にしてください。
1.上流工程とは?
上流工程とは、ウォーターフォール型開発と呼ばれるシステム開発手法の前半部分の工程を指します。ウォーターフォール型開発とは、大きく分けて次の工程を上から順に実施する開発手法のことです。
- システム企画
- 要件定義
- 基本設計
- 詳細設計
- 開発
- テスト
- 運用
上記の開発手法がウォーターフォール型開発と呼ばれるのは、上から順に工程を進める点が、滝の水が上から流れ落ちる様子に似ているためです。
ウォーターフォール型開発のうち上流工程にあたるのは、システム企画から詳細設計業務までの前半部分になります。上流工程業務はシステム開発の土台であり、プロジェクト全体に大きな影響を与える部分と言えます。
一方、ウォーターフォール型開発の開発〜運用までが下流工程です。上流工程ではシステム開発のための方針や方法の決定を行い、下流工程では実際にコーディングやテストを行うという違いがあります。
ここからは、上流工程で具体的に何を行うかについて解説します。
1-1.システム企画
システム企画とは、システム開発の目的や概要を決めること
です。事業やサービスを実行するにあたって、どのようなシステムが最適かを検討し、システムの計画から導入までを取りまとめます。具体的には、システムの概要や開発期間・開発にかかる費用・リスクなどを調査分析し、費用対効果などを検討する工程です。
システム企画では、クライアント自らもしくは開発者側が依頼を受けて計画書を作成します。クライアント自らがシステム開発を行うケースが多いですが、開発者側がシステム企画の段階から入り、クライアントに向けて必要なシステムの提案を行うこともあります。
1-2.要件定義
要件定義とは、システム開発をする上で実施すべき業務内容を想定し、文書として見える化する工程です。
システム開発にあたっては、以下の例のように想定しておくべきことが多くあります。
- システム開発の目的
- システム開発の内容
- ターゲット
- 予算
- スケジュール
- 必要となる機能
- システム開発に関わるメンバー
上記のような具体的な要素をあらかじめ想定し、文書化することが要件定義の内容です。要件定義を行えば、システム設計にかかわるプロジェクトをスケジュール通りに進められる可能性が高まります。
1-3.基本設計
基本設計(外部設計)とは、要件定義で決めた内容の実現に必要な機能を、明確化・具体化することです。
要件定義はあくまでも必要となるシステムの機能・性能を定めたものであり、それを実現するための詳細な内容は定められていません。そこで、基本設計を通してクライアント側の要望を実現するための具体的な機能の洗い出しや、必要なデータの明確化、画面レイアウトの決定などを行います。
1-4.納期・予算の調整
システム開発にかかる納期・予算の調整を行うのも開発側の仕事です。開発者は、システムの設計と合わせて、クライアントが必要とする期日までにシステムを実現させることも求められます。どれほど優れたシステムを開発したとしても、納期が守られない会社は信頼性やブランドの価値を大きく下げてしまうでしょう。
トラブルの元となる納期遅れを発生させないためには、以下のポイントを押さえることが大切です。
- 適切な生産計画を行う
- 生産体制の見える化を行う
- リードタイムの把握をする
- リードタイムを極力短縮する
- 生産管理システムの導入を検討する
また、限られた予算内で実現できるシステムを設計することも開発者の仕事の1つとなります。適切な予算管理を行うためにも、正確かつ適正な見積もりを作成することが大切です。
1-5.詳細設計
詳細設計(内部設計)とは、システム内部構造の専門的な内容に関する設計のことです。詳細設計は下流工程のプログラム実装の直前に位置付けられています。
詳細設計では、基本設計書を元に、どのように機能を実装していけばよいかをプログラマーに指示するための詳細設計書を作成します。詳細設計書に記載されるのは主に以下の内容です。
- クラス図
- 画面遷移図
- シーケンス図
- 状態遷移図
- 入出力設計書
- データベース物理設計書
- バッチ処理詳細定義
- 開発方針・ルール
- 単体・結合テスト設計
2.上流工程をスムーズに進めるポイント
上流工程はシステム開発の初期フェーズであり、システム開発業務全体に関わる非常に重要性が高い工程です。上流工程で決めるべきものが明確化されていない場合、下流工程で手戻りなどのトラブルが発生し、スケジュールや予算に大きな影響を及ぼす恐れがあります。
上流工程をうまく進め、システム開発を滞りなく進めるためには、これから紹介する4つのポイントを押さえることが大切です。
2-1.クライアントとコミュニケーションを取る
システム開発は、クライアントの要求を可能な限り実現させることが目的となっています。そのためには、クライアントと綿密なコミュニケーションを取って要望を引き出すヒアリングスキルが必要です。ただ話を引き出すだけではなく、クライアントの要望を正しく汲み取る能力も必要になります。
仮に開発者側とクライアントとの間に認識の齟齬があるままシステム開発が進んだ場合、思わぬトラブルに発展する可能性もあります。開発者側は、現在どのような実作業をしており、どのような不満を抱えているかといった具体的な情報をクライアントから聞き出し、整理することが大切です。
2-2.設計を標準化する
設計書の作成には共通の基準がなく、システムエンジニアごとに作成方法や表記・仕様が異なります。設計書が属人化しており、作成者にしか内容が分からないという状態も珍しくありません。属人化した設計書を使用すると業務が担当者1人に依存し、プロジェクトの遅れなどが発生しやすくなります。
設計書の属人化を防ぎ、効率的にプロジェクト成功につなげるためには、設計書の標準化を行うことが大切です。設計書を標準化し、設計書の作成方法や品質を統一すれば、時間やコストの無駄が発生しにくくなるでしょう。
2-3.実現性を考える
クライアントはシステム開発の知識を持っていないことも多く、ヒアリングした要望が実現不可能な場合もあります。クライアントの要求を汲もうとするあまり、実現不可能な案件を受注してプロジェクトを立ち上げてしまうと、大きなトラブルや失敗につながってしまいます。
上流工程を担当する場合、受注する前にクライアントの要求を慎重に精査し、実現性があるかどうかをきちんと検討することが大切です。検討した結果実現性がない要望だと判明した場合は、理由を添えてクライアントにはっきりと伝えましょう。
3.各項目でテストの期待値を明確にする
上流工程では、下流工程で実行するテストを視野に入れて考えることが大切です。各テスト工程において「何を確認したいのか」を押さえながら、上流工程に取り組んでみてください。
要件定義 | 対応するシステムテストでは、顧客の要望に合ったシステムであるかを確認します。そのため、要件定義ではクライアントの業務に従った要望が出し切れているかの点検を行います。 |
---|---|
基本設計 | 対応する結合テストでは、表示される項目や出入力の項目などを確認します。そのため、基本設計では必要な項目が表示されているか、外部との連携項目に過不足がないか等を点検します。 |
詳細設計 | 対応する単体テストでは、クライアントの要望通りの機能ができているかを確認します。そのため、詳細設計では単一機能として要望を落とし込めているか等を点検する必要があります。 |
まとめ
システム開発における上流工程とは、システムの企画から要件定義・基本設計・詳細設計までの工程で、プロジェクト全体の根幹にかかわるフェーズです。その後の工程でトラブルが発生しないよう、クライアントとコミュニケーションを密に取りながら実現できるシステム設計を行う必要があります。
また、納期・予算・品質を管理するという観点でも、テスト自動化の導入がおすすめです。上流工程からテストを視野に入れることで、テスト自動化も導入しやすくなりますので、ぜひ意識してみてください。