【IT業界研究】上流工程・下流工程とは何か?|システム開発の流れについて解説

CONTENTS

上流と下流ってなに?

上流に分類される業務

①要求分析

②要件定義

③外部設計(アーキテクチャ・機能)

下流に分類される業務

④内部設計

⑤コーディング

⑥テスティング

最初はみんな下流工程からスタート!

下流工程で活躍するための能力とは?

インプット力

論理的思考力

継続力

上流工程で活躍するための能力とは?

コミュニケーション能力

マネジメント能力

技術力

まとめ

情報化が進む昨今では、人々が触れるデータ量の増加に伴いエンジニアやプログラマーなど多くのIT人材が必要とされています。大規模な社内システムの開発からウェブサービスやスマートフォン向けのアプリ開発など様々な仕事がある中で、本記事ではシステム開発のエンジニアを取り上げ、エンジニアの開発工程の種別について上流工程・下流工程にわけて解説していきます!


また以下の記事ではITエンジニアの業種別の業務内容紹介やIT業界を目指す文系就活生必読のノウハウを紹介していますので、ぜひ一読ください!


ITエンジニアの種類別の業務内容について↓


【新卒:職種研究】ITエンジニアの仕事内容とは?種類別で解説!


文系でIT業界に興味ある人向け↓


IT業界を目指す文系就活生の未来は?ITコンサルやエンジニア職について解説


それではそれぞれの過程における特徴を掴みシステム開発の流れについての理解を深めていきましょう!


上流と下流ってなに?



上流」、「下流」とは、まさに川の流れを意味しています。IT業界では、プロジェクトの前半の部分を「上流」と呼びます。この「上流」ではプロジェクトの計画、商談などを行います。その一方で、後半の部分を「下流」と呼びます。実際にプログラミングを行い、システムの構築をしたり、動作確認を行ったりします。


上流過程には要求分析や要件定義といったクライアントが実現したい全体機能の設計業務や全体機能を実現する上で重要な部分機能のアーキテクチャ決定が含まれます。下流過程では決定した要件定義に基づき、それらの内部設計とコーディングと動作確認のためのテスティングが複数含まれます。以下でそれぞれの業務について解説していきます。


上流に分類される業務



上流に分類される業務においては新たなシステムや更新の全体像を決める上で重要な業務が行われます。


①要求分析

要求分析は新たなシステム設計に際しての定義に関わる要求項目の洗い出しやシステム化のニーズについて整理を指します。つまり、開発においてどのような機能が必要になるのか、現状との差異はどのくらいかということを調査しプロジェクト全体の方向性を決める業務になります。


通常、この業務はプロジェクトマネージャーと呼ばれる業種が担当し、プロジェクト全体の舵を切っていくことになります。業務上の特徴としてはコーディングを行うのとは違い、全体機能のバランスを俯瞰的に観察及び調整する必要があることからある程度の経験値が必要とされるため、中堅以上の社員が担当することが多いと言えるでしょう。


一般的に外部委託開発(アウトソーシング)の場合、要求分析は要求項目の洗い出しと分析、それに基づいたクライアントのニーズの整理、制約条件等の整理という順番で行われ、見積もりなどはエンジニアが商談に同伴する場合もあります。対して、社内開発の場合は開発費見積もりや商談といったステップはなく、制約条件などを社内のシステム需要者とエンジニアの間で検討することになります。


②要件定義

要件定義はシステム等の開発において実装すべき機能や性能を明確にしていく作業を指します。要求分析に基づき、システム化の範囲や機能、業務全体の枠組みを明らかにしていきます。こちらも要求分析と同様にプロジェクトマネージャーがリーダーを担当することが多く、要求分析で集めた情報について具体的な開発計画等に落とし込んでいきます。


チームの仕事割り振り等様々なことを考慮する必要があるため、システム全体に対する幅広い知識や経験とコミュニケーション能力が必要とされることが多いです。


③外部設計(アーキテクチャ・機能)

基本設計とも呼ばれることもありますが、ユーザーインターフェース(UI)やデータベース等各システム等の連携について設計を行います。ユーザーなど外部からそのシステムを観察したときにそのシステムがどのように機能すべきかという点を明らかにする工程です。画面遷移のルーティングや画面操作方法などもこの外部設計時に決定されます。


下流に分類される業務



つづいて開発プロセスの「下流」に分類される仕事について解説していきます。システムエンジニアやプログラマーといったIT専門職をあまり知らない方にとっては、ここに分類される業務のほうが親しいかもしれません。パソコンでプログラミング言語をタイピングしているイメージはここの過程に存在します。詳しく見ていきましょう。


④内部設計

外部設計によって決定された仕様に基づき、それらをどのようにプログラム等で実現するかというより詳細な設計工程になります。採用アルゴリズムの決定やモジュール(機能)間の接続をどのような手法で行うかなど機能ごとに実現手順を設計していきます。これらは専門性のあるシステムエンジニアによって細かく設計されることが多いと言えます。この設計をもとにコーダー(プログラマ)が機能を実現していきます。


⑤コーディング

コーディングは下流に分類される業務のうち、上流の要求分析や外部設計と下流の内部設計によって決定された仕様に基づきそれらの機能を実際に動作するようにプログラムを書いていく作業となります。


単純なプログラミングのうち、実際にプログラム言語を使って作業する部分を指し、テスティングはまた独立して存在します。プログラムの小さなバグはその場その場で直すことができますが、テスティングによってしか予期できないバグなどではこの状況下では修正することはせずに、単純に主要な機能が全て動くようにプログラミングを行なっていきます。


これらの作業はコーダー(プログラマ)と呼ばれる職種の人々によって行われます。小さな機能などであれば、若手社員でも参加することもあります。


⑥テスティング

単体テスト

単体テストは別名ユニットテストとも呼ばれるものです。システムを構成するモジュール(プログラムのひとかたまり)が正常に動作するかどうかを小さな単位でテストすることを指します。それぞれのモジュールがうまく動作しなければ、システム全体として動作しないのは当然なので、関数やメソッドを中心に比較的にコード作成時後すぐに行われます。


これらの作業はそれぞれのモジュールを開発しているコーダー及びプログラマーが担当することが多い業務です。バグが発生した場合は修正が必要なためある程度の専門知識が必要となります。


システムテスト

システムテストは単体テストの後にシステム全体が機能要件を満たしているかどうかを検証するためのものです。単体テストではユニットごとのテストでしたが、システムテストは実際にシステムが利用される環境に近い環境で行われます。


ソフトウェアに加えて、使用するハードウェアのテストも同時に実施されるのでハードウェア側の不具合も検出される場合もあります。 これらのテストは全体要件を満たす必要があるため、プロジェクトマネージャーも同伴で、システムエンジニアのリーダー等が行うことが多いです。


受入テスト

受入テストはシステムを発注したクライアントが行う最終テストになります。外注したシステムが本来の目的のとおり動くかどうか、契約通りかといった様々な観点から検証が行われます。


ベータテストといって限られた第三者にサービスを実際に利用してもらい、レビューをとる方式なども取られるため現実で利用される状況とほぼ同様の状態のテストができます。外注開発であればクライアントとエンジニア及びプロジェクトマネージャ等が同伴してチェックを行います。


最初はみんな下流工程からスタート!



いま現在、大手IT企業の最前線で活躍しているエンジニアや億越えのプロジェクト契約を結ぶエンジニアも、はじめは、下流工程を経験しているのです。


下流工程は実際にプログラミングを行う工程です。システムの構築や実装といった、まさにエンジニアの現場の仕事です。この現場の仕事をしっかりと学ぶからこそ、プロジェクトの全体像を把握することができるようになり、また、技術力が身についていくのです。


下流工程で現場の経験を積んだエンジニアは、徐々に上流工程にシフトしていきます。お客さんとの商談を行ったり、プロジェクトの計画を立てたり、下流工程のエンジニアのマネジメントを行ったりと、プロジェクト全体を任せてもらえるようなエンジニアに成長していくのです。


下流工程で活躍するための能力とは?



実務が未経験の人材が下流工程でプログラマとして活躍するにはどのようなスキルが必要になるでしょうか。以下にプログラマとして活躍するために必要な能力について3つピックアップしてご紹介しましたので、ご覧ください!


エンジニアといっても活躍する幅はかなり広く「〇〇エンジニア」というふうに様々な種類のエンジニアがあります。より詳しくエンジニアについて知りたい方は以下の記事を参照してみてください。


【新卒:職種研究】ITエンジニアの仕事内容とは?種類別で解説!


インプット力

エンジニアとして活躍するには開発言語が堪能であることに加えて、正確な情報をもとに問題へと対処していく必要があります。そのためには情報技術に関して総合的な知識を幅広く身につけている必要があるため、それらを効率的に学習するインプット力は下流工程で活躍するための必須能力と言えるでしょう。


例えば、未経験なのであれば経験者とのギャップを埋めるために専門書を独学で読んでサンプルコードを走らせてみたり、同じプログラムでも効率よく問題を解決できる方法がないか探してみると言ったことも広く言えばノウハウのインプットになりますので、トライアンドエラーで多くのことに挑戦していきましょう。


論理的思考力

プログラムはある特定の問題を効率よく解決するために最適なアルゴリズムを設計して作成しなければなりません。そのためには問題の本質を理解して、どのように解決するのが最適なのかを判断する論理的思考力が欠かせません。


論理的思考力は日々コーディングをしたり、問題意識を持つことで鍛えることができるのでぜひ入社前に鍛えてみてください!


継続力

エンジニアなどのIT人材は技術力や知見が要求されますので、継続的に技術を学習する必要があります。専門的な技術やノウハウは一朝一夕で身につくものではありませんから、根気よく学び続ける継続力が必要になります。入社後も技術書を能動的に読んで学んだり、先輩社員からノウハウを盗むことをやめずにコツコツと努力を継続していくことが大切です。


上流工程で活躍するための能力とは?



IT業界について、まだ詳しく知らないあなたは、エンジニアにとって大事なのは技術力ではないかと勘違いしていませんか?


実は、エンジニアとして活躍している人にはある共通する能力があります。それは以下の通りです。


コミュニケーション能力

エンジニアにとって一番大事な能力です。億越えのプロジェクトを遂行していくにあたって顧客、プロジェクトメンバー等、様々な人とコミュニケーションをとりながら仕事をしていきます。信頼、安心といった、ビジネスで最も大切な要素を得るためにはとても大な能力なのです。また、お客さんにどんなニーズがあるのかなどしっかりとコミュニケーションを通じて汲み取る力も、良いものを作っていくためには欠かせません。


マネジメント能力

エンジニアは一人で仕事をすると思っている人がとても多いです。しかし、実は全くそんな事はありません。プロジェクトは全てチーム単位でおこなっていくのです。上流工程のエンジニアは下流工程のエンジニアたちに指示をしたり、マネジメントをしていく必要があるのです。


つまり、上流工程のエンジニアとして活躍していきたいのであれば、チームをしっかりとまとめる力がとても大事ということです。


技術力

もちろん忘れてはいけないのが、この技術力です。上流工程で実際にプログラミングすることはほとんどなくなってしまいます。しかし、プログラミングの知識があってこその一流のエンジニアなのです。だから基本として技術力を持っていることも必要です。


まとめ



今回は上流工程と下流工程についてご紹介しました。


エンジニアと一口に言っても様々な業種があり、それぞれのステージで役割があることを感じていただけましたでしょうか。上流過程では専門性と経験を兼ね備えたマネージャーが比較的少ない人数でシステム全体を体系的に設計していきます。そして下流工程では多くの人員が細かい仕様を実現するべく、個々の専門性を生かして開発に取り組んでいます。その様子はまさに川の流れのように、とめどなくチーム全体が一つの方向に向かっていくようです。そのような一体感や団結力もエンジニアとして働く上での魅力といえるかもしれません!


今回の記事のポイントを以下にまとめましたので、確認してみてください!


・システム開発はプロジェクト全体の方向性を決める上流過程とプロジェクトを実現するために細かいところまで技術的に実現する下流工程に分かれる

・エンジニアはまず下流工程から下積みをして、知識やノウハウを蓄積しながら成長していく

・下流工程でも上流工程でも向上心を持ち続け、それぞれの段階で技術力に限らず必要な能力(コミュニケーション能力や論理的思考力など)を意欲的に身に付けていくことが大切


あなたも一流のエンジニアになれるように頑張っていきましょう!


就活のプロに相談してみる 就活のプロに相談してみる

編集者

JobSpring Online編集部

後悔のない就活を応援するメディア「JobSpring Online」のメディア編集チーム。

構成メンバー: コンサルタント、人材業界マーケター、学生ライター、etc.

TOPIC

新着記事
就活のプロに相談してみる