システム開発とは?


システム開発の工程や流れ

システム開発とは


工程や流れを知ろう

システム開発 言葉の定義

システム開発とは、簡単に言えば「仕組みを作ること」を指します。 企業、自治体、政府、団体など様々な業種業界においては、IT技術を駆使してさまざまな仕組みを構築し、業務効率化、利便性、安心安全、ビジネス拡大、社会インフラを図ることがシステム開発の目的です。 具体的な例としては、販売や在庫を管理したり、生産を管理したりする企業向けの様々な管理システムや、従業員の勤怠管理システム、顧客情報管理システム、最近ではAIなどで予測をしたりするシステムを作ることが該当します。

ITエンジニアの業務領域

システム開発に従事するITエンジニアの業務領域は下記の図のように多岐に渡っています。そしてシステム開発を検討するときは図の上から順番に流れていきます。システム開発は最初の出だしが重要です。何のためにどんな仕組みを作るのか?そしてどのような技術で、だれが、どのように遂行して、完成した後の運用保守まで考えなければなりません。実際プログラムだけ作ってくれれば良いとか、適当に考えてくれれば良いとか、そのような要望にはお答えできないこともありますよ。理由はお金をかけて作った成果物に対してどこまで責任をとれるのか不明確のままで遂行すると、将来きっと問題になったり、使えなくなったりします。システム開発というものは短期で一過性の仕事ではありませんので、ご注意された方が良いかと考えます。そのような意味でシステム開発委託見積もり依頼される場合には、1式とかの見積もりは信用されない方が良いです。どのような職種の技術者がどの程度の工数(1名の技術者が何日かけて作業するのか等)で単価はいくらぐらいなのかを指定してもらうことによって具体的な検査が可能になります。余談ですが重要なプロセスになります。

システム開発

システム開発 職種

システム開発に従事する職種としては、システムエンジニア、プログラマーなどありますが、細かく分けて区分すると様々な役割があります。職種間の境界が曖昧な部分もたくさんあるためきっちり分けるのは難しいですが、大分類としては「開発系」「インフラ系」「IT関連職」の3つに分けることができます。 なお、実務では複数領域にまたがって仕事をすることも多くあります。

    システム開発に従事する職種「開発系」

  • システムエンジニア(SE)

  • プログラマー

  • アプリケーション エンジニア

  • 組み込み系エンジニア

  • フロントエンドエンジニア

  • サーバーサイドエンジニア

    システム開発に従事する職種「インフラ系」

  • インフラエンジニア

  • SRE(SiteRellabirityEnjineea)

  • サーバーエンジニア

  • セキュリティエンジニア

  • ネットワークエンジニア

  • データベースエンジニア

  • カスタマエンジニア

    システム開発に従事する職種「IT関連職」

  • システム営業(SS)

  • プロジェクトマネージャー(PM)

  • ブリッジSE(BSE)

  • ITコンサルタント

  • 保守サポートヘルプデスク

  • 導入サポートエンジニア


システム開発 開発系

それでは開発系エンジニアについてご説明していきたいと思います。下図の色がついている部分に該当します。

システム開発

システムエンジニアとは、一般的に知られている職種ではないでしょうか。IT会社によって違いがありますが、簡単にお伝えするとシステムを設計する技術者の事ですが、会社によっては営業と一緒にお客様向け提案活動を行ったり、設計だけではなくて、客先訪問をしながら要件定義・設計・実装・テスト・運用・保守とすべての工程を対応する場合もあります。大変ですが、お客様と接する事が多く、その分感謝されることが一番多く、やりがいのある職種かもしれません。コミュニケーション能力も必須ですし、手広く対応できることが求められ、設計技術スキル以上に顧客業務知識が必要になる場面が多々あります。また、経験を積み重ねていくと管理する側に回ることが多いのもSEの特徴と言えます。結果SEとして経験を積むとプロジェクト管理(PM)を任されることも多いです。

そしてプログラマー職も、広範囲で知られている職種だと言えます。Webプログラマやゲームプログラマなど幅広いのですが、実装(コーディング)に特化した職種というのが共通しています。システムエンジニア(SE)が作成した設計書に従ってコードを書くことが主な業務となりますが、会社によってはSE兼務プログラマーも多く、設計も実装も可能な人材が求められているようです。また場合によっては、単体テストだけでなく、結合テスト、運用テストまでも作業範囲になることもあります。アジャイル開発、スクラム開発という手法ではチームで作業をしますので、仕様書や設計書を作成する前に、プログラマーがお試しプログラムを先行作成して、それをベースに開発を進めていく方法も流行していますので、システムエンジニアとプログラマーの技術価値は両方兼ね備えた人材の方が仕事がし易いでしょう。また最近の技術の傾向はフロントエンドとバックエンドの開発生産性効率が非常に高くなりましたので、お客様のニーズを簡単に実現できることが多いことから、実装ベースで商談が進むことも多くなりました。

アプリケーションエンジニアとは、まずはアプリケーションという言葉の定義の説明が必要ですね。その指すものとしては、業務系システム、Webアプリケーション、スマホアプリなどがあります。それらの開発業務をメインにおこなうのがアプリケーションエンジニアと言えます。この辺りから疑問になる方も多いかもしれませんね。システムとアプリケーションは何が違うのか不明になりますね。アプリケーションはソフトウエアだと思っていただければよいと思います。システムはハードウエアやインフラも含めたものになります。そしてアプリケーションはビジネスモデルと密着していることが多く、そのような背景でアプリケーションエンジニアはプログラミング能力はもちろんのこと、ユーザーのニーズを汲み取り提案力や企画力を求められる場合もあります。

組み込み系エンジニアとは、家電製品や機械などの電子機器の制御に欠かせないソフトウェアを開発するのが組み込み系エンジニアです。CやC++といった汎用性が高く、高速処理を実現できるプログラミング言語が採用されることが多いようです。組み込み系エンジニアはなるのが難しいイメージがありますが、IoTの普及や車の自動運転、ロボットといった分野で需要が急増している職種でもありますので、このような技術者は今後貴重な存在であり、高収入、高単価といった感じでしょう。

フロントエンドエンジニアも会社によって定義は異なりますが、多くの場合「Webサイト開発によく使用される言語(JavaScript、HTML5/CSS3、PHPなど)を使いこなすことができる高度なWeb制作スキルを持った人」を指すことが多いようです。デザイナーやディレクターとコミュニケーションしながら、Web制作の技術的なフォロー役になることも求められます。

サーバーサイドエンジニアとは、フロントエンドエンジニアが主に表に見える部分の開発を担う一方、サーバサイドエンジニアは主に表に見えない部分を開発するのが仕事になります。サーバ側のプログラムを書いたり、データベースやファイルアクセスのためのプログラムを書いたりします。サーバやデータベースの知識が必要になるため「インフラ構築」の業務も一部対象範囲としています。昨今ではセキュリティの知識も求められることも多いでしょう。サーバサイドエンジニアは、コンパイラ型言語(Java、C、C++など)とインタプリタ型言語(PHP、Perl、Ruby、Pythonなどスクリプト言語)の両方を扱うことになりますが、最近流行しているVue、NodeJSなどの仕組みを利用すればフロントエンドと同じ書き方でバックエンドも構築できてしまいますので、フロントエンドの技術者の方に仕事が偏っていることが多くなる傾向です。

いかがでしたでしょうか?様々な技術を保有した技術者がそれぞれの役割の中でシステム開発に携わっていくことになります。ちょうどマイホームを立てるときのイメージと同じかもしれませんね。設計者がいて、大工さんがいて、でも大工さんにお土産渡したら、間取りで気に入らないところを仕上げ時点で奇麗にしてくれたような経験がありますね。でも設計者がマイホームに居住する住人の年齢や家族構成をヒアリングしてくれたおかげで、基本的な構造などは仕上がりますね。さて、その他インフラ系、IT関連エンジニアについては今後のコラムでお伝えすることとして、次にシステム開発の工程についてお話をしたいと思います。

システム開発の工程

それではシステム開発の流れについてご詰めいしたいと思います。下記の図は家を建てる時と比較したイメージですが設計した後でプログラムを作る一般的な従来からの流れになります。これをウォーターフォール型と言いますが、最近の主流は設計書はできるだけ簡単にして実装から始めてPDCAを繰り返しながらスピード的に成果を上げていくモデルとしてアジャイル型開発手法もあります。

システム開発

    システム開発の流れ ウォーターフォール型

  • 要件定義

  • 要件定義とは、システム開発の目的や必要な機能、希望の納期などを明確化する工程です。システムエンジニアが発注元にヒアリングを行い、求められる要件を確認します。この工程は最初の入り口となりますので最も重要です。下流工程に行った時に、例えばこの機能は何のために作るのかなど疑問が生じた時に上流の要件定義として記述されている事項として立ち戻ることができるからです。システムを利用する人が何人、何十人、何百人なのか、この画面はだれが閲覧できれば良いのか、入力する担当者の所属はどこなのか、など作りてからするとたくさん疑問がでてくるものです。そして一番重要なことは、システムの開発目的です。社内コスト削減の為の業務効率化が目的であれば、現状の課題とシステム完成時の利用イメージの差異などがわかる資料も準備しておくべきです。そのようなKPIを用意しておけば、システム稼働後にPDCAサイクルを回すことができます。システム導入の費用対効果というものです。

  • 基本設計

  • 基本設計(概要設計とも言います)とは、要件定義書を元に要求される機能を実現するための骨組みを設計します。例えばデータベースに求められる項目要件やテーブル構造、どの機能はどの項目と関連しているのかなど、構造化された資料として技術者に伝えるためのものに仕上げていきます。

  • 詳細設計 外部設計

  • 外部設計(基本設計に含まれる場合もあります)とは、操作画面などシステムの見た目を設計する工程です。デザインだけでなく、ボタンをクリックした時の挙動なども含めてユーザーインターフェースを設計します。この工程ではデザインも要求されますのでUIデザイナーも参加するケースがあります。また、操作性は常に向上されなければなりませんので、前工程でframeworkというシステム全体としての共通の動作を決める工程もあります。選択系の入力項目であればラジオボタンなのかドリルダウンなのか、メニュー画面は丈夫なのか左右のどちらかで縦に並んだ方が良いとか悪いとか、決定すべき事項、打合せすべき事項はたくさんあります。

  • 詳細設計 内部設計

  • 内部設計(詳細設計)とは、実現するシステムの各プログラムを設計する工程です。各プログラムが利用するデータベースや入力項目などの一つ一つの制御やAPIなどを細かく決定します。この工程では直接お客様との打合せというものはほぼありません。内部の技術者が打合せしながら進めていく事になります。お客様への納品物としてプログラム以外に設計書も要求しておくべきでしょう。理由は将来このシステム開発を担当した会社が倒産したり何らかの理由で撤退した場合にはこのドキュメントは次の新しいシステム担当をするIT会社に見えることによって費用をおさえることができる可能性が高まります。そのような意味でシステム開発委託契約を締結される時は、納品成果物として、設計書、ソースプログラム、テスト仕様書、テスト結果報告書などを求めることをお忘れなく。

  • プログラミング

  • プログラミングとは、設計書に従って実際にコーディングを行う工程です。プログラマーが一斉に作業を進めます。実際にこの段階になると仕様変更など後戻り(やり直し修正)が発生すると工数が増加するだけでなく、いろいろなところに影響しますので品質が低下する可能性もありますので、設計書でのお客様確認が重要な工程になります。しかしながらシステムエンジニアが作成する設計書は技術者よりのドキュメントが多く、一般の方には理解しにくいものになりますので、ウォーターフォール型の欠点だと言えます。よって最近は試作品を作り実際に動くものを見て頂きながら工程を進めていくプロトタイプ型のアジャイル開発手法が流行しています。またお客様のよってはプログラミングに詳しい場合もあります。そのようなお客様の場合は、コーディング規約(ルール)を決めてレビューしながら進めていく場合もあります。

  • テスト

  • テストとは、開発したプログラムに不具合がないかチェックする工程です。作成したプログラム1本1本の単体テストとして基本的な不具合が無いかどうかをチェックします。その後の工程としてプログラム同士が連携していますので、結合して相互にテストしていきます。一般的には作ったプログラマーとは別のプログラマー又はシステムエンジニアがテストを行うこともあります。不具合が見つかった場合はプログラマーが修正を担当しますが、モーラ性を担保するために、同じような箇所も横展開して不具合が無いかどうか点検をします。一般の方はテストは簡単だと思われがちですが、テスト工程に重みを置いているIT会社ほど責任があるちゃんとした会社だと言えるでしょう。お客様に納品する前の最後の工程となりますので、ここで不具合をたくさん発見することができれば品質が向上しますので、仮に不具合はゼロ件でしたという報告を聞いた時は、逆におかしいと判断すべきです。

  • 納品検収 引き渡し

  • テストが完了し、開発したシステムがお客様に納品され引き渡されます。これを検収と言いますが、机やパソコンなど既製品の納品と違って、システム開発の検収作業には時間を要します。お客様が何日もかけて完成されたシステムにデータ入力をしたり、検索したりしながら正しく動作するかどうかを検証する必要があるからです。しっかり検収をしていただけない場合で、将来不具合が出た場合などはトラブルの原因になりますので、予めスケジューリングして双方で協力して検収をする場合もあります。

  • 運用サポート

  • システムの運用が開始された後は、必要に応じてサポートを行います。本番稼働時の立会いや、教育、データ移行など、運用や保守を担当する技術者がしばらくの間はお客様がシステムに慣れるまでサポートします。多くの場合1か月程度で落ち着いてきますが業務やシステム規模により半年以上かかるケースもあります。安定稼働後ははシステムの緊急時のトラブル発生時に対応することになります。また上流工程でKPI等作成している場合であれば、是非費用対効果の検証を継続して行いましょう。費用をかけて開発したシステムの効果を測定することによって、次の機能追加や改善点が見えてくるものです。システムは運用とセットですから会社の業務内容の変更や拡大に伴いシステムも変化し続けなければなりません。しっかり評価を継続して実際に利用している社員にもアンケートを取るなど工夫することをお勧めいたします。


システム開発の費用

いかがでしたでしょうか?上記を読んでいただいても一般の方にはわかりずらいですよね。次回のコラムではアジャイル型の手法をテーマに最近流行りのシステム開発の方法をご紹介します。また、次の次になるかもしれませんが、お客様にとってはシステム開発費用が一番気になるところですね。サービスとして仕様変更作業を値引きしたりすることもありますが、何もベースが無いところからお客様の要望するシステムを開発するときには、イメージと違ったとか、機能が足りないとか、機能は作ったけど使えないとか、使うことが無いとか、本番稼働後1年経過したら急にシステムのスピードが遅くなったとか、様々な事象を経験してまいりました。ソフトウェア開発及びシステム開発会社は世の中にたくさんありますが、ITの事がよくわからないお客様の事情をよく理解して、トラブルにならないようにマネジメントしてくれる会社は多くは無いです。契約をする前にお客様のニーズをくみ取れるかどうか、身の丈に合ったシステムを提案してくれるかどうかを見極めてください。契約締結をしてシステム開発工程作業中に、この技術者を変えてくれ?なんて言わないように、事前に担当するシステムエンジニアやプログラマーとも面談する方が良いと思います。会社の基幹システムや業務システムを維新されるなど経営を左右するようなシステム開発発注時には、特に注意してください。それでは次回コラムはいつになるかわかりませんが、ご期待に沿えるように来月配信します。

中国オフショア開発を利用してdx ソフトウェア開発、ウォーターフォール モデル,アジャイル開発,杭州,ai エンジニア