![困った顔で働く会社員のイラスト(男性)](http://make-a-living-as-a-se.com/wp-content/uploads/2023/10/kaisya_komaru_man-300x300.png)
システムエンジニアの仕事内容でよく見かける”上流工程”と”下流工程”ってどういうこと?
何がどう違うの?
システムエンジニアお仕事内容を調べていると”上流工程”と”下流工程”という言葉をよく見かけますよね。
上流工程と下流工程でどちらがすごくて稼げるのかという観点で結論から言うと、上流工程です。
理由は、上流工程のは設計フェーズで、下流工程は製造フェーズだからです。
この記事では、前述の内容を深堀して初心者にわかりやすく解説していきます。
そもそも上流工程と下流工程とは?
そもそも「上流」と「下流」の言葉の語源は川の流れをからきています。
IT業界では、プロジェクトの前半部分を「上流」と呼び、この段階ではプロジェクトの計画や商談を行います。
一方、後半部分を「下流」と呼び、ここでは実際にプログラミングを行い、システムの構築や動作確認を行います。
上流工程の業務
1. 要求分析
要求分析は、新たなシステム設計に際しての定義に関わる要求項目の洗い出しやシステム化のニーズについて整理する作業です。
つまり、開発においてどのような機能が必要になるのか、現状との差異はどのくらいかということを調査し、プロジェクト全体の方向性を決めます。
通常、この業務はプロジェクトマネージャーが担当し、プロジェクト全体の舵を切る役割を果たします。
この業務はコーディングとは異なり、全体機能のバランスを俯瞰的に観察・調整する必要があるため、ある程度の経験が必要とされ、中堅以上の社員が担当することが多いです。
要求分析は基本的に以下の順番で行われます
- 要求項目の洗い出しと分析
- クライアントのニーズの整理
- 制約条件等の整理 見積もりなどのステップも含まれ、エンジニアが商談に同伴することもあります。
2. 要件定義
要件定義は、システム等の開発において実装すべき機能や性能を明確にする作業です。
要求分析に基づき、システム化の範囲や機能、業務全体の枠組みを具体的にします。
プロジェクトマネージャーがリーダーを務め、要求分析で集めた情報を具体的な開発計画に落とし込みます。
この工程では、チームの仕事割り振り等も考慮する必要があるため、システム全体に対する幅広い知識や経験、コミュニケーション能力が求められます。
3. 外部設計(アーキテクチャ・機能)
基本設計とも呼ばれますが、ユーザーインターフェース(UI)やデータベースなど各システムの連携について設計を行います。
ユーザーなど外部からシステムを観察したとき、そのシステムがどのように機能すべきかを明らかにする工程です。
画面遷移のルーティングや画面操作方法もこの外部設計時に決定されます。
下流工程の業務
1. 内部設計
外部設計によって決定された仕様に基づき、それらをどのようにプログラムで実現するかを詳細に設計する工程です。
採用するアルゴリズムの決定やモジュール(機能)間の接続方法など、機能ごとに実現手順を設計します。
これらは専門性のあるシステムエンジニアが担当することが多く、この設計をもとにコーダー(プログラマー)が機能を実現します。
2. コーディング
コーディングは、上流の要求分析や外部設計と下流の内部設計によって決定された仕様に基づき、機能を実際に動作するようにプログラムを書く作業です。
プログラムの小さなバグはその場で修正することができますが、テスティングでしか予期できないバグについては、単純に主要な機能がすべて動くようにプログラミングを行います。
これらの作業はコーダー(プログラマー)が担当し、小さな機能では若手社員も参加することがあります。
3. テスティング
テスティングは、プログラムが正しく動作するかを確認する作業です。
テストには以下の種類があります
単体テスト(ユニットテスト)
システムを構成するモジュール(プログラムのひとかたまり)が正常に動作するかを小さな単位でテストします。
各モジュールがうまく動作しなければシステム全体として動作しないため、関数やメソッドを中心にテストを行います。
これらの作業はそれぞれのモジュールを開発しているコーダーやプログラマーが担当し、バグが発生した場合は修正が必要です。
システムテスト
システム全体が機能要件を満たしているかを検証します。
単体テストではユニットごとのテストを行いましたが、システムテストは実際にシステムが利用される環境に近い環境で行われます。
ソフトウェアに加えて、使用するハードウェアのテストも同時に行われ、ハードウェア側の不具合も検出される場合があります。
これらのテストは全体要件を満たす必要があるため、プロジェクトマネージャーやシステムエンジニアのリーダーが担当します。
受入テスト
システムを発注したクライアントが行う最終テストです。
外注したシステムが本来の目的通りに動くかどうか、契約通りかどうかを様々な観点から検証します。
ベータテストとして限られた第三者にサービスを実際に利用してもらい、レビューを取る方式も取られます。
プログラマー?システムエンジニア? 同じようなことをやる仕事じゃないの? どう違うの? システムエンジニア(SE)とプログラマー(PG)は、しばしば同一視されることがありますが、実際には明確な違いが存在[…]
最初はみんな下流工程からスタート
現在、大手IT企業の最前線で活躍しているエンジニアや億越えのプロジェクト契約を結ぶエンジニアも、初めは下流工程からスタートしています。
下流工程は実際にプログラミングを行う工程で、システムの構築や実装など、エンジニアの現場の仕事です。
この現場の仕事をしっかりと学ぶことで、プロジェクトの全体像を把握できるようになり、技術力も身についていきます。
下流工程で現場の経験を積んだエンジニアは、徐々に上流工程にシフトしていきます。
お客さんとの商談を行ったり、プロジェクトの計画を立てたり、下流工程のエンジニアのマネジメントを行ったりと、プロジェクト全体を任されるエンジニアに成長していきます。
下流工程で活躍するための能力
実務が未経験の人が下流工程でプログラマーとして活躍するには、どのようなスキルが必要でしょうか。
以下に3つの重要な能力を紹介します。
インプット力
エンジニアとして活躍するには、開発言語の習熟に加え、正確な情報を基に問題に対処する能力が必要です。
情報技術に関する幅広い知識を効率的に学ぶインプット力は、下流工程で活躍するための必須能力です。
例えば、未経験者であれば専門書を独学で学ぶのが効果的です。
体系的にまとまった情報を基に学習することで、エラーの原因究明や技術の応用にも役立ちます。
コミュニケーション力
開発プロジェクトではチームでの作業が基本です。
他のエンジニアやプロジェクトマネージャー、クライアントと適切にコミュニケーションを取る能力が求められます。
プログラミングの作業中にも、進捗状況や問題点をチームメンバーに報告することが重要です。
問題解決に向けたディスカッションや情報共有を円滑に行うことで、プロジェクトの成功に繋がります。
問題解決能力
プログラム開発では、予期しないバグやトラブルが発生することが多々あります。
これらの問題を冷静に分析し、迅速に解決する能力が求められます。
未経験者でも、プログラムの基本構造やデバッグ方法を学ぶことで、問題解決能力を磨くことができます。
また、経験豊富なエンジニアのアドバイスを積極的に取り入れ、実践的な知識を身につけることも大切です。
上流工程へのステップアップ
下流工程での経験を積んだエンジニアは、次第に上流工程へのステップアップを目指すことができます。
上流工程では、プロジェクト全体の計画や設計を担当し、クライアントとの交渉や要求分析、要件定義を行います。
上流工程へのステップアップには、以下の能力が求められます。
プロジェクト管理能力
上流工程では、プロジェクトの進行管理やスケジュール調整が重要です。
プロジェクトの全体像を把握し、リソースの適切な配分や進捗状況の管理を行う能力が求められます。
ビジネス理解
クライアントのニーズを正確に理解し、ビジネスの視点からシステムの設計や要件定義を行う能力が必要です。
ビジネスの背景や業務プロセスを理解することで、クライアントに対して適切な提案ができるようになります。
リーダーシップ
上流工程では、チームのリーダーとしてプロジェクトを進行させる役割を果たします。
チームメンバーを適切に指導し、協力体制を築くためのリーダーシップが求められます。
まとめ
システム開発は、上流工程と下流工程に分けて進行します。
上流工程ではプロジェクトの計画や設計、下流工程ではプログラミングやテスティングが行われます。
エンジニアはまず下流工程で現場の経験を積み、技術力を身につけた後、徐々に上流工程へシフトしていきます。
それぞれの工程で必要なスキルを身につけ、プロジェクト全体を見渡せるエンジニアを目指しましょう。
SE(システムエンジニア)って年収が高いって聞くけどほんとなの? なんで年収が高いの? 転職の動機として「収入を増やしたい」「将来の安定を考えている」という思いで、SEに転職しようとお考えの人も少なくない[…]