システム開発とは?「目的」と「仕様」の決定実行が一番大切!

システム開発
システム開発とは、従来人が作業していた業務を自動的に処理できるようにしたり、従来のシステムの利便性を向上させたりする目的で、プログラム言語を使ってシステムを作ることを指します。企業の情報担当部門が窓口となり、多くは外部のシステム会社に委託します。「何のために作るのか」「どんな仕様で作るのか」を初めに決めてブレないことが、とても大切です。

 

1. システム開発とは

システム開発とは、新規の場合は従来人手に頼っていた作業を自動化したり、リニューアルの場合は今までよりも利便性や正確性を高めるために、システムを構築することを指します。多くの場合、外部のシステム会社に依頼します。「何のために」「どんな仕様で」「どんな機能で」「いつまでに」「いくらで」といった内容を「要件定義書」に決めてから、開発が開始されます。

一つのシステムが出来上がるまでには、まず発注企業側がプロジェクトチームを決定し、RFI(情報依頼書)やRFP(提案依頼書)を作成します。それらに沿った文書を、発注を受ける候補である複数のSIerやベンダーが提出し、発注先が決定されます。

その後要件定義で、基本設計と詳細設計がSIerもしくはベンダーのシステムエンジニア(SE)が作成し、プログラマー(PG)がソースコードを書いていきます。その後テストを行い、バグがないかチェックして納品します。

システム開発

システムが完成するまでの全体の流れ。要件定義段階でブレない設計をすることが、修正やバグ防止につながる

 

企画書デザイン

 

2. システム開発全体の流れ

まずここでは、システム開発の全体の流れをおさえましょう。どんな職種の人がどの部分を担当するのかを把握しておくことは、とても大切です。なぜならば、何らかの障害が発生した時に原因分析のベースになるからです。
 

プロセス項目項目内容項目詳細
①要件分析&定義
  • 顧客と打ち合わせ→要求分析
  • 要件定義書作成
  • 開発見積書算出
課題と解決方法について、クライアントにヒアリングします(要件分析)。そのためにどんな機能にするかを検討します(要件定義)。
②外部設計(基本設計)
  • ユーザーインターフェース設計
  • 機能ごとに担当と仕様を決定
  • 内部レビュー→顧客レビュー
要件定義に沿って、 システムで実現する機能・仕様を決定します。ユーザーが使いやすいインターフェース設計も行います。
③内部設計(詳細設計)
  • プログラミング設計
  • SEがレビュー
  • 内部レビュー→顧客レビュー
外部設計で決めた機能の作成方法を詳細に設計し、SEがシステム仕様書を作成します。この仕様書はかなり詳細に作成します。 
④プログラミング
  • プログラミング作業
 SEが作成した仕様書に追って、プログラマーがプログラミングを行います。どんな動作をどの言語で表現するかはプログラマーが判断します。
⑤単体テスト
  • テストパターン設計
  • PGM単位での動作確認
  • SEはテスト結果をレビュー
 プログラミングが完了すると、単体で仕様書通りに動作するかどうかをテストします。バグ(不具合)が見つかった場合、修正します。
⑥総合テスト
  • PGM単位から機能単位で検証
  • 機能設計書通りに動くか検証
  • バグを出し切ることが重要
 構築したシステムが、全体として仕様書通りの機能を満たしているかどうか、システム開発会社側が検証する最終テストです。
⑦運用テスト
  • リアル環境下で顧客がテスト
 本番稼働の直前に行う、テスト工程の一番最後に行う確認テストです。システム利用者が行い、業務運用上の支障の有無を確認します。
⑧リリース
  • 一斉移行or順次移行
  • 稼働を監視
 完成したシステムをクライアントに納品します。リリース後は、通常クライアントが動作確認を実施します。
⑨運用・保守
  • 随時アップデート
  • システム監視
  • メモリ利用状況を把握
納品後も、クライアントの追加要望や不具合に対応します。 メンテナンスやサポートは、主にシステムエンジニア(SE)の仕事です。

 

2-1. 要件定義

「顧客がどんなシステムを望んでいるのか」をヒアリングや資料収集を通じて、正確に把握します(要件分析)。顧客の現状とニーズを分析し、課題を設定した上で、課題を解決するためのシステムの全体像(ソフトウェア機能やハードウェア)を設計するのが要件定義です。
 

2-2. 外部設計(基本設計)

要件定義を文書化した要件定義書を顧客と共有し、開発するシステムの機能を決定します。ここで一番重要なのは、顧客企業のターゲットユーザーの満足度を追求するスタンスです。いくら高機能のシステムを構築しても、ユーザーに使ってもらえなければ、それは無用の長物です。ユーザー目線で、インターフェースデザインや機能の優先順位を設計することが、とても重要なのです。
 

2-3. 内部設計(詳細設計)

外部設計(基本設計)をベースに、SE(システムエンジニア)がシステム仕様書を作成します。この仕様書はいわば、「外部設計(基本設計)で要求されている動作を実現するために、どのパートはどのようなソースコードで書くべきか」というプログラマーへの指示書的な側面があります。ここでは、開発するシステムの機能実現に必要な構成力とプログラマーが気持ち良くプログラミングできる適切な指示の表現力が求められます。
 

2-4. プログラミング

SE(システムエンジニア)作成したシステム仕様書に沿って、プログラマーがプログラミングを行います。システム設計書で求められる動作を実現するために、どのようなソースコードを書けば良いのか、そこにプログラマーの腕が問われます。ちなみにクオリティの高いコードの特徴としては、「正確に動作する」「素早く、効率的に動作する」「保守性が高い」「無駄がなく、シンプルである」という点があります。
 

2-5. テスト(単体テスト、総合テスト、運用テスト)

プログラミングが完成すると、書かれたソースコードが正確に作動するかどうか、SE(システムエンジニア)がテストを実施します。不具合が完全になくなるまで、何回もテストを行い、システムを完成させます。
 

2-6. リリース

新たに開発したシステムに切り替える作業のことを、リリースといいます。リリースには2種類のスタイルがあり、一気に切り替える一斉移行と順次切り替える順次移行があります。
 

2-7. 運用・サポート

システム開発は、システム納品後も不具合の修正対応や機能追加対応をする必要があり、それが運用・サポートサービスになります。

 

3. システムを開発する2つの職種

システムを開発するのは、以下のように大きく2種類の人がいます。

◆システムを作る2種類の人(職種)
SE(システムエンジニア)…どんな人が、現在どんな事に困っていて、それを解決するためにどんな機能を持った仕組みを、いつまでにいくらで作るのか考える人
プログラマー…どんなシステムをつくるのかが決まった後、それを形にする人

補足しますとシステムエンジニアはどんなシステムを作るかを決めるために、依頼してきたクライアントに要望を聞いて全体像を決定します。それを「仕様」といいいます。そして、予算、人員、スケジュールの管理も行います。またプロジェクトによっては、システムエンジニアの上にプロジェクトマネージャー(PM)がいて、予算管理などを行う場合もあります。

 

4. システム開発に関わる全職種と必要スキルと年収

システム開発には、様々な職種の人が関わります。それぞれが重要な役割を担当し、スムーズな連携とチームワークが質の高いシステムを構築する背景になります。システム開発にはどんな職種の人が関わるのか、その職種にはどんなスキルが求められるのか、年収はどれぐらいのレベルなのか、詳しく見ていきましょう。
 

4-1. セールスエンジニア

営業が受注し、顧客企業と最初にコミュニケーションを取るエンジニアが、セールスエンジニアです。営業職と技術職の交わる領域であり、一人二役的な職種ですので非常にヤリガイがあります。高い専門性が要求されるため、エンジニア出身の方が多いです。

◆必要スキル
・顧客のニーズをヒアリングし、システムに落とし込む力
・システムや技術、ソフトウェアについて、顧客にわかりやすく説明する力
・役立つ資格/ITパスポート、基本情報技術者
◆年収
・平均年収650万円前後

 

4-2. プロジェクトマネージャー(PM)

システム開発案件が実際に動き出すと、その統括はプロジェクトマネージャー(PM)が担当します。プロジェクトマネージャーは、プロジェクトの目標達成を意識しながら、“ヒト、モノ、カネ”といわれる人員、設備、予算、スケジュールを管理します。大規模なプロジェクトになると、システムエンジニア(SE)、プログラマー、インフラエンジニア、データベースエンジニア、ネットワークエンジニア、アプリケーションエンジニア、ミドルウェアエンジニアなど、関わるメンバー全員をマネジメントします。

◆必要スキル
・プロジェクトを管理し、スムーズに推進する力
・一緒に働くメンバーと円滑にコミュニケーションできる力
・システム設計書を作成する力
・各種プログラミング言語に関する知識
◆年収
・平均年収670万円前後

 

4-3. システムエンジニア(SE)

システムエンジニア(SE)は、システム開発の上流工程を担当します。具体的には、「要求分析・要件定義」「外部設計(基本設計)」「内部設計(詳細設計)」「テスト」を担当します。システムエンジニアは、システム開発のディレクターを担う重要な仕事です。

◆必要スキル
・顧客の課題をわかりやすく説明でき、またメンバーを上手くまとめるコミュニケーションする力
・システム開発に必要なプログラミング知識
・スケジュール管理等のマネジメント力
◆年収
・平均年収440万円前後

 

4-4. プログラマー(PG)

プログラマーは、システムエンジニア(SE)が作成した仕様書に沿ってコードを書きます。バグがなく、正確に動作するわかりやすいソースコードを書くことが求められます。プログラマーという仕事はITエンジニアの入り口的な存在で、システム開発の実践力を身に付けるには重要なポジションです。

◆必要スキル
・プログラミング言語に関する知識
→フロントエンド開発で使用するプログラミング言語/JavaScript
→iPhoneアプリ開発で使用するプログラミング言語/Swift、Objective-C
→Unityで使用するプログラミング言語/C#
→人工知能・機械学習で使用するプログラミング言語/Python
→ブロックチェーン・仮想通貨で使用するプログラミング言語/Solidity
・わかりやすいプログラミングのコードを書く力
◆年収
・平均年収385万円前後

ちなみに、ITエンジニアの各職種の35歳平均年収は以下になります。

システム開発

高速処理が可能で、大規模開発に向いている「Java」や「COBOL」といったプログラミング言語は、求人ニーズは安定している。最近では効率的なアプリ開発にコードを書かない「ノーコード」もしくは少ないプログラムコードでシステム構築を行う「ローコード」も導入されつつある

 

5. システム開発の4つのスタイル

システム開発には、大きく4つのスタイルがあります。それぞれメリットとデメリットがあるので、ここではそれらを整理します。

5-1. ウォ―ターフォール型開発

ウォ―ターフォール型開発は、一番メジャーな開発手法です。「要件定義」から始まり、「リリース」まで時系列で作業を進めていきます。各工程が完了し承認されないと、次の工程には進みません。各工程ごとに成果物を残していく手法が、ウォーターフォール型開発です。
 

【メリット】
・メジャーな手法のため、プロジェクトに関わる人間に一から説明する必要がない
・この手法を経験している人材が多く、プロジェクトマーネジャーを確保しやすい
・各工程ごとに区切り、承認後に次の工程に進むため、工程ごとの成果物が確実に残り、進捗管理しやすい
【デメリット】
・想定外のニーズにより手戻りが発生した場合、予算超過や納期ずれにつながりやすい

 

5-2. アジャイル型開発

優先順位の高い部分からシステム開発できるのが、アジャイル型開発です。「アジャイル(Agile)」という言葉には、もともと「素早い」「頭の回転が速い」といった意味があり、そういったところから従来と比較して短期間で開発できるこの手法をアジャイル型開発と呼んでいるのです。
 

【メリット】
・顧客の優先順位の高い部分、もしくは要件が決まった順に開発に着手できる
・構築するシステムの全体像が決定していない状態でも、開発できる
・短期での納品が可能
【デメリット】
・計画性に欠けているため、大規模の開発には向いていない

 

5-3. プロトタイプ型開発

“プロトタイプ”とは、そもそもデモンストレーション用に問題点洗い出しのために設計された原型という意味です。そこからプロトタイプ型開発とは、将来修正することを想定した上でスピーディにシステムを完成させる開発手法です。システムの完成形が明確に決まっていない場合、まずは動作するシステムを構築し、随時修正していくプロトタイプ型開発は便利な手法です。

【メリット】
・システムの完成形が決まっていなくても、早くシステムを構築できる
・システムを作りながら、随時修正を加えることができる
【デメリット】
・そもそも最終形が決まっていないので、計画性に欠ける
・大規模なシステム構築には向いていない

 

5-4. スパイラルモデル

スパイラルモデルは、大規模なシステムの開発においてよく活用される手法です。

【メリット】
・修正ごとに、随時アップデートできる
・顧客の要望を随時取り入れていきながら開発できるので、顧客の満足度が高くなる
【デメリット】
・修正ごとに開発対応を実施するため、コストが膨れるリスクがある

 

システム開発

納期前の機能追加による大幅修正、バグの発生等、システム開発はブラックな労働環境があるのは事実。元受けか下受けか、自社開発か受託開発かなど、事前にそれぞれの環境を把握しておくことは重要

 

6. システム開発の働き方

システム開発の働き方には、自社開発、受託開発、SESの3つのスタイルがあります。それぞれメリット、デメリットがありますので、今の自分にとってどれが最適な働き方かを判断する必要があります。

6‐1. 自社開発

GoogleやAmazon、Facebookなど、みなさん御存知の有名サービスを展開する企業には、多くのITエンジニアが働いています。彼らのシステム開発の働き方は、自社開発です。「こんな機能をつけれないかな」「もっと表示速度を上げたい」といった自社のサービスを進化・発展させるため、各種マーケティングデータを参考に、経営サイドから降りてくるオーダーをこなしています。

【自社開発のメリットとデメリット】
◆メリット
・ユーザーへの価値提供を追求できる
・ユーザーの反応データを把握でき、本質的なサービス向上をしやすい
・スケジュールが比較的調整しやすい
・システム開発途中のトラブル対応にも融通がききやすい
◆デメリット
・人気サービスを展開している企業が多く、入社難易度は高い
・アジャイル開発を採用しているところが多く、慣れていない人には当初戸惑いがある
・サービスリリース=利益とは限らない

 

6‐2. 受託開発

受託開発とは、企業から「このようなシステムを構築してくれませんか?」と依頼を受けて、システム開発する働き方です。受託開発は請負契約になり、以下の項目を順守する必要があります。

・必ず成果物を完成させる
・瑕疵担保責任がある
・発注側には、指揮命令権はない
・システム検収後に、一括で報酬を支払う

受託開発のメリットとデメリットを、以下に記します。

【受託開発のメリットとデメリット】
◆メリット
・案件のボリュームが多い
・職場が変わらない
◆デメリット
・納期に縛られ、土日返上で働くことも
・元受け企業が利益が上がるが、下請け企業はハードワークの割には利益が少ない
・給料はアップしにくい

 

6‐3. SES

SESとは、ITの派遣会社を通し、客先常駐で働くスタイルです。プログラマーとしてのスキルがなくてもやる気があれば採用されやすく、ITの現場で経験を積みながらスキルアップを図るチャンスがあります。

【SESのメリットとデメリット】
◆メリット
・入社しやすく、未経験者にも門戸は開かれている
・入社後に研修を受けられる
◆デメリット
・職場は自分で決められず、会社が決定する
・未経験者は、最初はアシスタント的な仕事が多い
・職場が変わるので、スキルを深掘りできないことも多い

 

7. システム開発に関するQ&A

ここでは、システム開発に関する代表的なQ&Aを取り上げたいと思います。

7-1. システム開発の見積もりについて

現在、ECシステムの開発に関わっています。こういったシステムの開発によって、もらえる報酬の相場はいくらぐらいでしょうか。システムの規模によって金額が変わることは理解できますが、どうやってその金額が決まるのかわかりません。

→システム開発の金額計算は、「完成まで何人月かかるか?」という方式になります。例えばSEが4人で5ヶ月かかるのであれば、「4人×5ヶ月」で20人月になります。SE一人あたりの単価を80万円とすると、80万×20人月=1,600万円になります。この場合の報酬は受託料であり、機器の購入、設置費用は別になります。
 

7-2. システム開発の品質管理に関して

以前勤務していたゲーム会社では、リリース前のバグチェックを完璧にしていました。またターゲットである子供にもテストに参加してもらい、そのゲームのクオリティチェックをしていました。その後親の関係に地元に戻り、小さなシステム会社に転職しました。その会社では、最低限のバグチェックのみでリリースしています。自社サイトの商品紹介文では、完璧に機能するように表記しています。こういったことは、よくあるのでしょうか。

→残念ながら、このような現象はあり得ます。企業の規模に関わらず、「最低限のバグチェックのみ」「審査中に、同時並行でバグ修正版を作成する」という現象はあるのです。その結果消滅するサービスもあれば、アップデートを重ねて生き残るサービスもあります。
 

7-3. システム開発職(SE)と製品のソフト開発職では、どちらは忙しいのでしょうか

大手メーカーのSEという仕事には、無理のある納期に追われるイメージがあります。一方で、大手メーカーの製品のソフト開発職も同様の状況なのでしょうか。

→システム開発職のSEを業務系SE、製品のソフト開発職を制御系SEとすると、業務系SEの方が忙しいパターンが多いです。その理由は、「業務系SEは人間を相手にするから」です。制御系SEはシステム仕様の変更が少なく、動作確認も容易です。ところが業務SEは相手が人間なので、「よく理解していなかった」「勘違いしていた」「忘れていた」といった現象があり、その度に仕様変が発生するのです。

 

8. 最後に

システム開発に関する知識は、今後ますます重要性が増すと思われます。人生を豊かに生きるためには、IT知識は欠かせません。そのためには、まず全体像を正確に把握し、自分と関わりのある分野はどこか、またそれは他のどの分野と連携しどのような機能を果たしているのかを理解する必要があります。

ITは一旦興味を持って勉強し始めると、非常に奥深い分野です。インターネットが発達した現在では様々なジャンルのナレッジサイトが充実しているので、独学でも知識とスキルをマスターできる環境が整っています。本サイトでも、わかりやすく理解できるコンテンツを拡充していく予定ですので、活用頂ければ幸いです。

 

※参考コンテンツ
【システム開発とは】
システム開発とは?業務内容・年収・スキル・仕事に就く方法まで解説
システム開発とは|業務管理を最適化するトータルサービス7選
【初心者向け】システム開発とは?業務内容~効果的な進め方まで徹底解説

【組み込みシステムとは】
組み込みシステム―Wikipedia
入門向け!組み込み開発のことをわかりやすく解説―FSI Embedded
組み込みシステムとは?|転職Q&A|20代・第二新卒・既卒向け転職エージェントのマイナビジョブ20’s

【ファンクションポイント法とは】
ファンクションポイント法(ふぁんくしょんぽいんとほう)
ファンクションポイント法|IT用語辞典|大塚商会
ファンクションポイント法―Wikipedia