上流工程とはシステムを開発するための初期段階のことです。主に要件定義や基本設計といったシステム概要や必要な機能を決定す工程です。システムエンジニアとしてキャリアアップをするには上流工程でどのようなことが行われているのか把握をしておきたいおものです。この記事では上流工程を理解するために初心者でも分かる流れ、どこまでが上流工程か、下流工程との違いなどを簡単に解説していきます。
上流工程とは要件定義や基本設計などのシステムを開発するための初期段階のことです。上流工程の主な作業は顧客との折衝を重ねることでシステムに必要な要件を汲み取りシステムの全体像を大まかに決め、その概要を元に機能や性能を元にして設計をしていくという内容です。これらの一連の作業が行われる工程を「システム企画」「要件定義」「設計(基本設計・詳細設計)」と呼びます。システムにおける各開発プロセスの役割を明確にし上流工程から下流工程にかけて順序立てて進めていこうことを水が滝のように流れることと見立てて「ウォーターフォールモデル」と呼びます。上流工程ではプログラミングスキルのみならず『顧客折衝能力』『提案力』『マネジメント力』『問題解決力』などが必要とされます。エンジニアとしてのキャリアや給与などの待遇も上流工程へと上がれば上がれるほど高水準になっていきます。
英語表記は“Upstream Process”
略式は”UP”
となっております。
※英語で表現される機会もあるため参考までに
システム開発の基本工程について解説された記事はこちら>>
ウォーターフォールモデルの特徴やメリットについて解説された記事はこちら>>
上流工程における主要な作業工程を見ていきましょう。
お客様自らまたは開発者側がシステム開発の依頼を請けシステム企画の計画書作成に着手します。主にシステムの概要、開発期間、開発費用、リスクの調査分析、費用対効果などを行う工程です。新規システムの開発や既存システムの改修など問題点を調査・分析し、それに基づき、システムの企画を行います。このシステム企画は主に企画者であるお客様側が行う機会が多いですが、開発を請け負う可能性のある開発者側がこの段階から入りお客様にプレゼンテーションを行うこともあります。
システム企画の一般的な取り組みや手順などについて解説された記事はこちら>>
要件定義とはシステム開発を行う際にお客様の要望をヒアリングし実装すべき機能や満たすべき性能などを調査、分析した上で業務要件とシステム要件を明確に定義することです。
お客様はシステムに関する知識が少ないケースが多いため、要望に矛盾や欠陥が合った場合でも実現可能な内容へとまとめあげる必要があります。最終的にお客様とシステム開発者側との要件認識をしっかりと合わせる非常に重要な工程です。
そして要件定義はシステム開発における上流工程の一部であり、開発や実装作業を行う前に取り組みのが基本とされております。
要件定義の一般的な取り組みや手順などについて解説された記事はこちら>>
基本設計とは要件定義の内容をもとに画面や帳票などのユーザーインターフェースを設計します。ユーザーインターフェースとは、画面などの実際に利用する側が目にする見た目のことです。基本設計はユーザーにとって使いやすいシステムを開発するために非常に重要な工程です。システムにおける業務の流れ(業務フロー)を理解する為にお客さんへのヒアリングのみならず実際に業務作業を実施した上で、システム全体の機能の一覧化(機能の洗い出し)を行います。
基本設計の一般的な取り組みや手順などについて解説された記事はこちら>>
詳細設計の工程では基本設計の内容をもとに開発するシステムを大まかな機能ごとに分割し、それらのコンポーネント間をつなぐインターフェースの仕様などを設計します。基本設計でのユーザー側視点と反対に詳細設計においてはプログラム設計など、開発者側の視点でシステム設計をします。そのため基本設計までの工程はお客様との協議や確認などが度々発生しますが、詳細設計の工程からは通常開発者側に進行が委ねられます。この詳細設計の工程でプログラムの仕様が細かく綺麗に書かれていると、どんなプログラマーがプログラミングを対応しても品質にズレの生じないシステムが実装されます。
詳細設計の一般的な取り組みや手順などについて解説された記事はこちら>>
上流工程と下流工程の違いについて説明します。上流工程とは「要件定義や基本設計などのシステムを開発するための初期段階のこと」下流工程とは「製造(プログラミング)やテストなどシステムを実際に作り込む工程のこと」です。ではどこからどこまでが上流工程であり、下流工程なのでしょうか。ウォーターフォール開発の流れを参考に下記の表を見ていきましょう。
上流工程 or 下流工程 | システム開発工程 | 概要 |
【上流工程】 | システム企画 | システムの概要を決定する |
【上流工程】 | 要件定義 | お客様の要件を明確にし、開発見積りを決定する |
【上流工程】 | 基本設計 | 画面や帳票などのユーザーインターフェースを設計する |
【上流工程】 | 詳細設計 | プログラムの設計など、開発者側からの視点でシステムを設計する |
【下流工程】 | 製造(プログラミング) | 設計書に基づき、プログラムの作成を実行する |
【下流工程】 | 単体テスト | モジュールごとにテストを実施する |
【下流工程】 | 結合テスト | 各モジュールを結合してテストを実施する |
【下流工程】 | システムテスト | すべてを含めた(要件定義通りか?)テストの実施をする |
【下流工程】 | 運用テスト | 実際の業務運用に沿って動作検証を実施する |
【下流工程】 | システム移行 | 実際の稼働環境へシステムを移す |
上流工程に必要なスキル(能力)を見ていきましょう。
上流工程ではコミュニケーション能力が必要とされます。顧客の要望を正しく汲み取り実装すべき機能や満たすべき性能などを調査、分析した上で業務要件とシステム要件を明確に定義する必要があります。そのためにはヒアリング力(引き出す力)やわかりやすく伝える力など様々なコミュニケーション能力が必要です。必要に応じてプレゼンテーションを行う場面に出くわすこともあります。正しく顧客要望を把握し、問題発見・解決、そして設計書作成などを遂行するにあたって高い効果をもたらすにはコミュニケーション能力を必要とします。
上流工程ではマネジメント能力が必要とされます。一般的にシステム開発の工程は進めば進むほどプロジェクト規模(人数)は拡大し、マネジメントが必要とされます。その際に上流工程において定義した内容を正しく落とし込み問題発見・解決、進捗管理、コーチングなどを実行することが求められます。担当するプロジェクトの成果は上流SEのマネジメント能力に左右されるといっても過言ではないでしょう。
上流工程では文章作成能力が必要とされます。設計書・資料作成や議事録の作成など様々な文書作成の機会が数多く存在します。第三者が文章を読んだ際に書いてある内容が正しく理解出来るように丁寧に作成する文章力を持ち合わせる必要があります。また文書を作成する際に使用するWordやExcel、PowerPointといったMicrosoft Officeのソフトを各種マスターする必要があります。
上流工程を理解するために初心者でも分かる流れ、どこまで、下流工程との違いなどを簡単に解説させて頂きました。上流工程を一言で表すと『要件定義や基本設計などのシステムを開発するための初期段階』です。上流工程へのキャリアアップを目指す方は各工程での役割と必要な能力を正しく理解する必要があります。その上でシステム開発に携わることでいずれの工程でも全体を見渡した高い生産性を実現することが出来るでしょう。