システム開発における上流工程と下流工程の違い、求められるスキルを解説

 
困っている人
「システム開発でよく聞く上流工程と下流工程ってなに?求められるスキルの違いとかも教えてほしい。」


こういった疑問に答えます。

・システム開発の流れ
・上流工程と下流工程の違い
・上流と下流で求められるスキルの違い


この記事を書いている私は、Webエンジニア歴3年ほどです。

IT業界への就職・転職を考えている方などは聞いたことがあると思いますが、システム開発の流れには大きく「上流工程」と「下流工程」に分けられます。

今回は、両者の違いや求められるスキルの違いなどを解説していこうと思います。

それではさっそく見ていきましょう。


Advertising

システム開発の流れ


上流工程と下流工程の違いを解説する前に、システム開発の流れを見てみましょう。

各ステップの呼び方は企業によって多少違いはありますが、一般的なシステム開発の大まかな流れは次の通りです。

①要件定義
②基本設計
③詳細設計
④開発(プログラミング)
⑤テスト
⑥リリース
⑦運用・保守


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


そもそも「上流」と「下流」は、川の流れを意味していてシステム開発において前半の部分を「上流」、後半の部分を「下流」としています。

上でシステム開発の大まかな流れを記載しましたが、このうち一般的に上流工程と呼ばれるのは要件定義、基本設計、詳細設計までのステップです。
そして開発(プログラミング)、テストまでのステップを下流工程と呼びます。

基本的な仕事内容としては、上流工程はクライアントとのやり取りや設計、下流工程は実際にシステムを作る作業です。

では、システム開発の流れの中で上流工程と下流工程それぞれ担当するステップで具体的にどういうことをするのかを説明したいと思います。


システム開発における上流工程


まずは、上流工程です。
上流工程は、システム開発において要件定義、基本設計、詳細設計までのステップを担当し、主にクライアントとのやり取りや設計が仕事内容となります。


①要件定義


クライアントと打ち合わせを行い、どのような機能を持つシステムやサービスを作りたいのかを明確にします。

開発する目的などの認識がズレたまま開発が進んでしまうと、プロジェクトが進むにつれて大きな認識違いが出てしまうので、この時点でしっかりとクライアントの要望などをヒアリングする必要があります。

予算とも照らし合わせながら実際に実装する機能を検討し、内容を要件定義書にまとめます。


②基本設計


要件定義をもとに、システムの全体構造やUI(ユーザーインターフェース)など、外部から見たシステムの設計を行います。つまり、ユーザー側視点の設計をするということです。
企業によっては「外部設計」と呼ばれることもあります。

画面イメージや画面遷移のルーティングや画面操作方法などもこの基本設計時に決定されます。

ここでも内容を基本設計書(外部設計書)にまとめます。


③詳細設計


基本設計によって決定された仕様をもとに、システムの機能ごとにより詳細な設計を行います。つまり、開発側視点の設計をするということです。
企業によっては「内部設計」と呼ばれることもあります。

システム内部ではどのような実装を行えば良いかを考え、ユーザーにとって使いやすいUIやデータベース設計、バッチ処理などその他細かく設計をします。

こちらも内容を詳細設計書(内部設計書)にまとめます。
ちなみに、詳細設計は上流工程で行われることもありますが、企業によっては専門性のある下流工程を担当するPG(プログラマー )が設計することもあります。


システム開発における下流工程


次は下流工程です。
下流工程は、システム開発において開発(プログラミング)、テストまでのステップを担当し、主に実際にシステムを構築することが仕事内容となります。


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


詳細設計書をもとに実際にシステムを構成するプログラムを作成します。

設計書通りに作成し完了させなければならないので、いかに設計フローが大事か分かるでしょう。

比較的小さい機能は若手社員でも参加することはあります。


②テスト


コーディング(開発)が完了すると、テストを行います。
テストにはいくつか種類があり、単体テスト、結合テスト、総合テスト、受入テストとあります。

【単体テスト(ユニットテスト)】
単体テストは、モジュール単位(プログラムのかたまり)で動作するかをテストします。
基本的に各モジュールを開発した開発者が行い、問題やバグを発見した場合は、この時点で修正します。

【結合テスト】
結合テストは、各モジュールを結合して全体の動作確認を行います。
システム全体で画面遷移やデータの受け渡しが問題なく行われているかを確認します。
モジュールごとでは問題なくても、結合すると不具合が発生することはよくあることなので非常に重要なテストになります。

【総合テスト(システムテスト)】
総合テストは、実際にユーザーと同じ環境かもしくは同等の環境において行うテストです。
システム全体が機能要件を満たしているかどうか、処理速度など問題がないかなどをテスト仕様書に基づいて細かく確認をします。

【受入テスト(運用テスト)】
受入テストは、システムを発注したクライアントが行う最終テストです。
システムが想定通りに動くか、契約通りであるかなどといった様々な観点から検証が行われます。
場合によっては修正が入ることもあります。


スポンサードサーチ

上流と下流で求められるスキルの違い


それでは、上流工程と下流工程それぞれで求められるスキルを紹介していきます。
両者とも紹介する知識やスキルが全てではないですが、特に重要なものを紹介するので、ぜひ参考にしてみてくださいね。


上流工程に求められるスキル


上流工程で特に求められるスキルは次の3つです。

・コミュニケーション能力(ヒアリング力)
・ドキュメント作成スキル
・マネジメント能力
 
1つずつ説明していきます。


コミュニケーション能力(ヒアリング力)


上流工程では、顧客とコミュニケーションをとる機会がたくさんあります。
顧客の要望やニーズをヒアリングしたり、顧客がシステムの具体的なイメージを確立できていない場合は、要望を一つ一つ聞き出しながらイメージしやすい形にまとめて説明いくことが必要になります。
顧客は開発側の業務を理解していなかったりシステム開発とは無縁の業界でビジネスをしている人も多いので、専門用語をなるべく使わず、わかりやすく説明をする必要もあります。
また、顧客だけでなくプロジェクトを遂行するにあたってプロジェクトメンバーともコミュニケーションをとっていく必要があります。


ドキュメント作成スキル


上流工程では様々なドキュメントを作成する必要があります。
具体的には要件定義書や基本設計書などですが、それぞれのドキュメントはプロジェクトにおいて非常に重要な役割を担っています。
例えば、要件定義書の内容一つでその後の開発工程が大きく変わってしまうこともあります。
誰がいつどんな時に見ても理解できるような構成と文章で作成する必要があります。


マネジメント能力


プロジェクトは全てチーム単位で行われていて、チームごとに上流工程を担当する人と下流工程を担当するWebエンジニアやテスターなどがいます。
上流工程を担当する人は、チームをまとめたりプロジェクトメンバーに指示を出したりする場合もあります。
常日頃からメンバーとしっかり意思疎通がとれるような環境づくりや定期的に面談などをしてメンバーの状態を把握しておく必要があるのです。


下流工程に求められるスキル


下流工程で特に求められるスキルは次の2つです。

・プログラミングスキル
・論理的思考力
 
1つずつ説明していきます。


プログラミングスキル


下流工程のメインの仕事はシステムの開発です。
なので、プログラミングスキルは外せない必須のスキルでしょう。
もちろん実務を通してスキルアップしていけばいいですが、基本的には設計書をしっかり読み解きそれを形にする技術が必要となります。
プログラミング言語にはたくさんの種類があり、企業やプロジェクトによっても使用されている言語は変わってきますが、少なくともHTML&CSS、JavaScriptといったフロントエンド開発言語のスキルはどの現場でも基本必要になってくると思うのでスキルとして身につけておきましょう。
ちなみに他にもデータベーススキルやミドルウェアの知識なども必要になってきます。


論理的思考力


そもそも論理的とは、物事を体系的に整理したり、事実に基づいて筋道を立てて考えることです。
つまり論理的思考とは、論理に従って物事を考える思考法です。
システムを開発する上でいかに効率よく筋道を立てて論理的に考える必要があります。
実際にプログラミングを書くとわかりますが、例えばバグ改修(不具合修正)をする際など、どこが間違っているかを考えなければなりません。
「ここが合っているならここが間違っているかもしれない。」とか「こういう結果が出るということは、ここが間違っているかもしれない。」などといった前提を考える必要があります。
常に、「こうすればこうなる」という考え方をしなければならないので、論理的な思考力が大切です。


まとめ


いかがだったでしょうか。

上流工程と下流工程の違いが分かっていただけたかと思います。
どちらを目指すのかは人それぞれ好きなようにで良いと思いますが、まずは下流工程でスキルや経験を身につけてから上流工程にステップアップするのが良いかなと個人的には思います。
技術があるのとないのとでは将来の選択の幅も変わってきますからね。

というわけで今回は以上です。

Advertising