支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡


はじめに

IT業界へエンジニアとして転職を考えられている方やその仕事内容に興味を持たれている方の中には、「上流工程」や「下流工程」という言葉を耳にされたことがある方も多いのではないでしょうか。どちらも、システムを開発する際の作業内容を大別するために用いられている言葉です。ざっくりと説明してしまうと、「前半の作業内容=上流工程」「後半の作業内容=下流工程」と分けられます。本記事では、それらの内容をもう少し掘り下げ、それぞれの工程で扱われる内容の違いと求められるスキルについて紹介していきます。

システム開発の流れ

上流工程と下流工程の違いを説明する前に、まずはシステム開発時における流れを説明しておきましょう。一般的なシステム開発の大まかな流れは、⑴要件定義→⑵設計→⑶開発(プログラミング)→⑷テスト→⑸リリース・運用保守となっています。このように一連の作業内容がひとつずつ順番に進められていく様を、水が高いところから低いところへ向かって落ちていき後戻りせず進んでいくことに倣い、「ウォーターフォール・モデル(waterfall model)」と呼んでいます。どの段階まで作業が進んでいて、あるいは遅れているのかという状況を確認しやすいため管理もしやすく、古くから用いられている手法です。

⑴要件定義

クライアントの要望を確認し、どんなシステムを開発していくのか決めていきます。また、その開発にかかる費用や期間も提示します。

⑵設計

どのような見た目や形にしていくのか具体的に定めます。その仕様へ導くための設計書も作成します。

⑶開発(プログラミング)

設計書を基に、プログラミング言語を活用して実際に製造していきます。「エンジニア」「プログラマ」と聞いて皆さんの多くがイメージされる作業は恐らくこの工程ではないでしょうか。

⑷テスト

作ったものが正常に動作するかを確認します。また、ただ動くかどうかだけではなく、要件定義や設計の段階で定めたものが仕上がっているか(クライアントの要望に沿ったものとなっているか)も重要なポイントです。

⑸リリース・運用保守

完成品をクライアントのもとへ納品します。その後も不具合が生じれば修正を行います。

上流工程と下流工程の違い

ウォーターフォール・モデルの考え方を踏まえると、「上流」「下流」という言葉が用いられていることも腑に落ちるのではないでしょうか。作業工程の前半部分を川や滝の上流、後半部分を下流と捉え、⑴要件定義と⑵設計を「上流工程」、⑶開発(プログラミング)と⑷テストを「下流工程」と呼んでいます。 さらに言い換えると、上流工程はこれからどんなものをどのように作っていくのかを考える工程、下流工程は実際にもの作りを行う作業工程ということになります。

求められるスキル

どちらも専門的な知識・技術が必要なことには変わりありませんが、それぞれの作業内容の特徴から、より重要となるスキルについて見ていきましょう。

上流工程

この工程では、いかに正しく具体的にこれから作ろうとしているものを示すことができるか、が重要となってきます。せっかく時間や労力を費やしてシステムを作成したとしても、その完成品がクライアントの要望とは全く異なっていたということになれば、また一から作り直さなくてはなりません。そうならないためには、要件定義の段階でクライアントの要望を正確に引き出し、両者に認識の相違がないようにしておく必要があります(①)。また、クライアントが必ずしもIT分野に詳しいとは限りません。クライアントの要望に応えることができるシステムや技術についてわかりやすく説明し、さらにより良いサービスを行うための提案をする場面も多く出てくることでしょう(②)。設計書の作成においては、書いた本人だけが分かれば良いというものではなく、誰が見ても分かるものに仕上げておく必要があります。具体的であればあるほど、下流工程での作業はスムーズに進むでしょう。その際に、どのように作業を分担するのか、いつまでにどこまで進めておく必要があるのか、指示を出す役目も担っています(③)。そして、それらのことを実践するためには、より多くの経験を積んで自身の引き出しを増やし、常に豊富な知識を備えておく必要があります(④)。

以上をまとめると、上流工程では特に

  • ①ヒアリング能力(コミュニケーション能力)
  • ②提案力
  • ③マネジメント能力
  • ④豊富な専門知識
等が求められていると言えます。上流工程での作業内容は、そのプロジェクトが円滑に進むかどうかを左右する鍵を握っており、責任の重い業務となります。そのため経験豊富なエンジニアが担うことの多い工程です。

下流工程

この工程では、設計書の内容を論理的に理解し、正しく製作する技術が必要となります。設計書をきちんと読み解き形にしていく力がなければ、設計書がどんなに的確で分かりやすいものであったとしても意味を成しません(①)。また、プロジェクトチーム内で他者と共同してひとつのシステムを完成させていくにあたり、コミュニケーション能力も必須です(②)。

これらをまとめると、下流工程では特に

  • ①プログラミング能力
  • ②コミュニケーション能力
が求められていると言えるでしょう。経験の浅いエンジニアは基本的にはこの工程から担当することとなります。上流工程と比較した場合の責任は重くはないかもしれませんが、クライアントの手に渡る品物を実際に作る工程であり、期待通りのものを完成させる責務があります。

おわりに

上流工程と下流工程の違いやそれぞれで求められるスキルについてお分かりいただけたでしょうか。どちらの方が良いということではなく、どちらもが上手くできて初めて優れたシステムが完成すると筆者は考えています。自身の手で実際に作業をするのが好きという方はプログラミング能力をさらに極め下流工程で活躍することを目指しても良いでしょうし、自身のアイデアを形にしたいあるいはチームリーダーとして活躍したいと考えている方は上流工程を目指しても良いでしょう。本記事がエンジニアを目指す皆様の今後の指針として参考となれば幸いです。ご拝読ありがとうございました。