本記事では、システム開発についてご紹介します。そもそもシステム開発とは何かという基本的な内容から始め、システム開発工程やシステム開発の2つのモデルについてご紹介します。さらに、システム開発を行う上で有効な手段としてラボ型開発も合わせてご紹介します。本記事が、システム開発に関する理解の一助となれば幸いです。

システム開発とその工程とは?

そもそもシステム開発とは、業務を効率化・最適化するためのコンピュータシステムを構築することを意味します。そして、システムを開発する際は、IPA(情報処理推進機構)が定めた「共通フレーム」というガイドラインにのっとって行われます。「共通フレーム」のガイドラインによって、システム開発の工程が指定されているというわけです。

システム開発に関する専門用語や作業工程が統一されているのは、会社間の認識の違いやトラブルを予防するためです。共通フレームでは、システム開発の作業を10の工程に分けています。ソフトウェアやアプリケーション、WEBサイトなど、ITのものづくりは必ずこの工程を経ているのです。

システム開発を成功に導く10の工程

IT人材を保有しない企業のほとんどは、システム開発を外部の会社に別注しています。そのため、システム開発の工程について詳しく理解している担当者は以外に少ないのではないでしょうか?システム開発と聞くと、プログラミングのイメージが先行しがちですが、システム開発でプログラミングをしているのはほんの一部の期間でしかないのです。以下では、システム開発の際に経る10の工程をご紹介します。

  1. 要件定義

システム開発は要件定義から始まります。要件定義では、要件定義書と見積もり書という2つの書類を作成します。要件定義書とは、システムの目的や開発期間、システムの性能、導入や運用方法など、システム開発に必要な「要件」をまとめた書類のとこを指します。システム開発会社との打ち合わせを重ね、要件定義書の内容を整理・確定します。システム開発は要件定義書に基づいて進行していくため、トラブルを防ぐためにも双方が納得できるように内容をすり合わせることが重要となるのです。

  1. 外部設計

要件が確定したら、基本設計の工程に進みます。基本設計では、要件定義書を元にシステム内容をまとめた基本設計書を作成します。基本設計書は、図やデータなどを入れて作成されたシステムの設計図のことで、ユーザーインターフェースと呼ばれる外的な見た目に関する設計図になります。

企業は基本設計書を見て、システムの仕様やシステム導入後の業務改善方法を理解します。システム開発会社のエンジニアがクライアントに向けて作成する書類なので、原則として専門用語や複雑なデータは記入されていません。

基本設計書は、システムの機能ごとに作成され、各機能を担当するシステム開発会社のエンジニアが設計書を完成させ、システム開発会社のなかで相互にフィードバックし改善します。その後、完成した基本設計書がシステム開発会社から共有され、システムの完成図を把握するのです。

  1. 内部設計

外部設計が決まりましたら、システム開発会社内で詳細設計書を作成します。詳細設計書は、主にプログラミングの設計について書かれたエンジニア向けの作業用文書です。つまり、外部設計はシステム導入企業側からの視点でしたが、内部設計においてはプログラムの設計などシステム開発者側からの視点で設計を行うということです。

  1. プログラミング

内部設計で作成した詳細設計書に基づきプログラムの作成を行います。

  1. 単体テスト

プログラムが完成し製造工程が終われば、テスト工程に移ります。詳細設計書通りにプログラムが動くかを検証します。単体テストでは、プログラミングの対象単位、いわゆるモジュールごとにテストを行い、不具合が見つかったら修正しシステムのルールやテスト結果のフィードバックを行います。

  1. 結合テスト

単体テストの次は、複数のプログラムを組み合わせた状態で、それらがうまく機能するかを検証します。つまり、各モジュールを結合してテストをおこなうということです。例えば、データの受け渡しなどの際にプログラム同士が正常に連携するかをテストします。

  1. システム(総合)テスト

単体テスト、結合テストが完了したら、それらすべてを含めたシステム(総合)テストをおこないます。その名の通り、すべてのプログラムが、本当に要件定義の通りに動くのかを確認する工程です。例えば、多くのアクセスへの耐久性や処理速度などをテストします。

  1. 運用テスト

無事システムテストをクリアしたら、実際に業務に取り入れることができるかを確認します。運用テストでは、実際にシステムを運用する環境下においてシステムに不具合がないかをテストします。つまり、今までのテストと比較すると、非常に実用性に重点を置いたものとなるのです。

  1. システム移行(リリース)

実際に使えるよう、旧システムから切り替える工程です。一気に切り替える一斉移行や、徐々に切り替える順次移行などの移行方法があります。

  1. 運用・保守

最後に、実際にシステムを動かし、不具合が起こらないように監視する運用・保守の最後工程に進みます。システムが稼働していることを確認する作業を運用、不具合が起きた時に対応する作業を保守と呼びます。

運用では、システムのログをチェックしたり、サーバの起動・停止をしたりなど、日々の管理を行います。運用の最大の目的は、システムが担う業務が滞りなく行われるようにすることです。

一方、保守ではシステムの不具合修正や予測、調整など、システムに異変があった際に手を加えます。システムが問題なく動くように、根本的な問題解決に努めるのが保守であるとも言えます。

システム開発の2つモデルとは?

上記では、システム開発の工程を10のフェーズに分けてご紹介しました。しかし、システム開発では、常に上記の工程を順番に進めていかないといけないわけではありません。ここでは、システム開発の2つのモデルについてご紹介します。

ウォーターフォールモデル

ウォーターフォールモデルでは、開発工程を順番に進めていきます。原則として前の工程に戻ることはしません。多くのシステム開発で採用されている方法で、最もスタンダードな開発モデルです。

ウォーターフォールモデルは、段階的に開発を進めていくため、各工程の見積もりや作業がスムーズに行えるというメリットがあります。そのため、工程数が多い大規模なシステム開発に最適です。

デメリットとしては、クライアントがシステム確認をするタイミングが遅くなることが挙げられます。システム構築の終盤でミスが発覚した場合、前の工程へ戻ることになり、生産性が低くなる可能性があるのです。

アジャイルモデル

アジャイルモデルは、システムの不具合や修正は当然あることを前提として、短期的に実装とテストを繰り返していく方法です。

ウォーターフォールモデルとは異なり、修正が必要となった場合に後戻りする工数が少なくなるというメリットがあります。また、短期間でテストを繰り返すため、仕様変更などがあった場合にも柔軟に対応することも可能です。

アジャイルモデルの最大のデメリットは、全体のスケジュールが把握しづらいこと。短期的な実装とテストを繰り返すため、完成時期が読みづらくなるのです。そのため、アジャイルモデルでは高度なマネジメント能力が要求されるとも言えます。

アジャイルモデルでのシステム開発は近年多くの注目を集めています。NashTechでは、アジャイル開発に関するマネジメント方法について書いた記事もご紹介しているので、是非一読ください。

合わせて読みたい:変更管理はアジャイル開発成功の架け橋となるのか?

ラボ型開発とは?

これまでは、システム開発に関する詳細についてご紹介してきました。実際のビジネスでは、システム開発会社を見つけること自体が1つの障壁となるでしょう。以下では、システム開発会社との契約形態の1つであるラボ型開発について見ていきます。

ラボ型開発(ラボ契約)とは、ある一定期間(半年〜数年)の間、特定のエンジニアを確保し自身のプロジェクトを担当させる契約形態のことを指します。また、ラボ型開発はオフショア開発における契約形態のひとつでもあります。

オフショア開発とは?

オフショア開発とは、ソフトウェア開発やWebシステム開発、スマホアプリ開発などを海外の開発会社や海外子会社にアウトソースする手法のことを言います。近年では、人工知能開発やブロックチェーン開発などの最先端技術までもオフショア開発の対象となっています。オフショア開発に関する詳細は以下の記事にてご紹介しています。

合わせて読みたい:【2019年版】ベトナムオフショア開発がオススメな6つの理由とは?

ラボ型開発の4つのメリットとは?

ラボ型開発をご紹介した理由は多くのメリットが存在するからです。ここでは、ラボ型開発の4つのメリットをご紹介します。

  1. コストが安い

ラボ型開発で得られるコストメリットは、オフショア開発におけるコストメリットとほぼイコールです。プログラマの単価をみてみると、日本を1とした場合ベトナムでは1/4、ミャンマーは1/8といった費用で開発を委託することも可能です。技術面で日本人と比べて劣るといったこともありません。

  1. 仕様変更や機能追加の際に見積り調整が不要

通常、請負契約の場合、初期開発が完了し、その後追加開発が発生した場合、その都度見積もりを調整して・・・ということが発生してきます。ラボ型開発(ラボ契約)の場合には、期間契約ですので、その期間中は契約のエンジニアチームを、言わば自由に管理することができます。

例えば、3名のエンジニアをラボ契約したとして、最初の3ヶ月は3名ともがっつり新規開発にアサインし、その後追加で発生する新規機能の開発は2名をアサイン、残る1名は細かな改善要求やバグ修正にあたらせるといったかたちで臨機応変に体制を組むことができます。

  1. ノウハウを蓄積しやすく、優秀なエンジニアを常に確保できる

ラボ型開発(ラボ契約)では、中長期的に固定でチームを確保できるため、ノウハウが蓄積しやすく、優秀なエンジニアを常に確保できるといったメリットがあります。

ラボで契約したチームはその期間中、発注者の専属チームとなります。そのためノウハウを蓄積しやすく、またそのノウハウが溜まっていくほどに、開発スピードの向上も実感することができます。自社のメンバーと同じように、チームとしての結束力が徐々に上がっていくことや、開発スキームが次第に完成されていくことなども開発スピード向上に寄与するでしょう。また、通常の請負契約の場合には、発注の度に毎回同じ人をアサインできるとは限りませんが、ラボの場合には同じ人材を一定期間確保しつづけることができます。

  1. プロジェクト単位で人員調整でき、実際の雇用よりもリスクを抑えることができる

ラボ型開発(ラボ契約)の最後のメリットは、固定費である人件費を変動費にすることができることです。

通常、中長期でアプリやWebを利用したサービスや新規事業を開発する際は自社で人員を採用するのが良いでしょう。ただ、日本ではエンジニアが枯渇しているため採用がままならない上に、優秀な人材をいざ採用しようものなら相応の固定費がかかります。多くの人数をかけて一気に開発をするフェーズもあれば、それほど人数を必要としないフェーズもあるでしょう。

そこで、自社の人材と同じように管理ができ、でも半年や1年といった一定期間の契約なのでプロジェクト単位で人員、人件費を変動費として調整できるという点で、ラボ型開発がメリットを発揮します。

まとめ

いかがでしたでしょうか?本記事がシステム開発とその工程およびラボ型開発の理解を深める一助になれば幸いです。

また、NashTechでは、モバイルアプリ開発やシステム開発から、ブロックチェーン開発やAR/VR開発のご相談やアウトソーシング事業などを行っています。グローバルで得た知見を元に多くのお客様の技術導入をサポートしてきました。本記事を読んで少しでも弊社にご興味をお持ちいただけましたら、こちらまでお気軽にお問い合わせください。