システム開発とは、既存の業務を改善したり最適化したりすることを目的に、新たなシステムを作る・既存のシステムをカスタマイズすることです。この記事では、システム開発のプロセスとスケジュール、重要なポイントなどを詳しく紹介します。
目次
システム開発は2種類のプロセスモデルが主流
一般的には、システム開発というとウォーターフォールモデルとアジャイルモデルの2種類に分かれます。
ウォーターフォールモデル
ウォーターフォールモデルとは、上流工程から下流工程へと順番にシステム開発を進めていく手法を指します。外部設計に始まり、内部設計、プログラミングと1つの工程を完了させてから次の工程に進むため、進捗状況の把握が容易であることが特徴です。スケジュール管理をしながら計画的に開発を進めたいというような大規模なシステム開発に適しています。
アジャイルモデル
「アジャイル」には「素早い」という意味があるとおり、スピードを重視した開発手法がアジャイルモデルです。システム開発の計画を策定する段階では詳細を煮詰めず大まかな仕様と要求だけを設定したうえで、計画を機能ごとに分解して着手する順番を決定します。そして機能ごとに期間を定め、要件定義→設計→テスト→実装という一連のプロセスを行うことが特徴です。適宜修正・追加しながら機能ごとに開発を行えるため、ウォーターフォールモデルと比較すると柔軟性が高い開発手法でもあります。
システム開発のプロセスフローは?
システム開発のプロセスのうち、ここではウォーターフォールモデルのフローを例として紹介します。
企画・要件定義
開発者がシステムの概要や開発期間、開発費用などを大まかにまとめて発注者に提案します。契約を結んだ後、構築するシステムの業務要件とシステム化要件を定義して双方ですりあわせを行います。
基本設計・詳細設計
システムの入出力などに関する基本的な機能設計を行ったのち、プログラムで実現できるレベルまで落とし込んでいきます。
プログラミング
詳細設計で定義したプログラムをコーディングしていきます。
単体テスト・結合テスト・システムテスト
プログラムのひとつひとつが機能しているのかをテストする「単体テスト」、複数のプログラムを組み合わせての「結合テスト」、そしてすべてを含めた「システムテスト」を行い、要件定義通りに機能するかを確かめます。
運用テスト・リリース
実際に発注者がシステムを使用し、問題がないかを検証します。運用テストに合格すればシステムのリリースとなります。
システム開発のプロセス別スケジュールは?
システム開発のプロセス別に、一般的なスケジュールを紹介します。
ウォーターフォールモデルは約1年~
ウォーターフォールモデルは、開発者と発注者との間において、およそ2カ月にわたる期間で機能などについてのすり合わせを行う要件定義のために時間を費やします。開発期間も要件定義で定めますが、基本設計と詳細設計に約4カ月、プログラミングから総合テストに約4カ月、そしてシステムテストと運用テストを経てリリースするまでにさらに2カ月と、合計で約1年かかることもあります。
また、大規模な開発や、段階的な開発をする場合には数年にわたることもあるため、ウォーターフォールモデルはリリースまでに時間がかかることが一般的です。
アジャイルモデルはケースバイケース
アジャイルモデルは、一連のプロセスを1~4週間程度の期間に分割して繰り返していく特徴があり、この1つのサイクルを「イテレーション」といいます(アジャイル開発のひとつ・スクラム開発の場合は「スプリント」と呼びます)。システムの機能ごとにイテレーションの期間を設け、重要度の高い機能から順番に開発していきます。
1つの機能ごとに要件定義からリリースまでの工程を実施し、1つリリースが済んだら次のイテレーションに取りかかります。開発中に仕様の変更・新しい機能の追加を行うなど柔軟に対応するため、アジャイルモデルのスケジュールは開発の内容によりケースバイケースです。
運用保守期間の考慮も必要
システムをリリースしたあとも、安定した稼働を行うためには運用保守を行う必要があります。保守は開発側が対応することが一般的で、システムが停止しないか監視したり、発注者からの質問に対応したり、もし不具合や問題が発生した場合にはシステムの改善を行ったりします。中には運用コストを減らしたいために運用保守を削減しようとする企業もありますが、トラブルが起こったときのリスクが大きいため、運用保守期間は十分確保することが望ましいです。
システム開発において重要なこととは?
システム開発において重要なポイントを3つご紹介します。
属人化の防止
システム開発で重要なことのひとつは、プロジェクトが属人化しないようにすることです。たとえば、プログラムが1人のプログラマに属人化している場合、仮にそのプログラマが病気になったり退職してしまったりすると、プロジェクトの進行が止まるだけでなくプログラムを作り直す必要が出ることもあります。こういった状況を避けるためには、常に引き継げる人材を確保しておくことが大切です。
プロセスや規約の標準化
システム開発の属人化を防ぐためには、プロセスや規約を標準化しておくことも重要です。たとえば、プログラミングするときにファイル名・ファイル構成などのルールを明確化しておく、関数やクラスのネーミング規則を統一しておくと、ほかの人に引き継いでもすぐに理解できるため、開発の生産性が下がるようなことがなくなります。
またプロセス全体においても、作業のガイドラインや手順書を作成しておく、各種設計書のテンプレートを共用するなどといった標準化をすすめておくと、属人化を防いで品質を均一化することが可能です。
メンバーやスケジュールの見える化
システム開発の発注側にはシステムに精通した人材が必ずしも揃っているとはかぎらないため、開発側に任せきりになってしまうことが少なくありません。その場合、開発側にどのようなエンジニア・プログラマ・デザイナーがいて、どのように仕事を進めているのかを把握できないまま開発が進んでいくことがあります。
しかし、システム開発は発注者側と開発側がひとつのチームとして相互理解を深めながら進めることが大切です。発注側は開発側の進捗をできるだけ細かく把握し、円滑に進行するようコミュニケーションを図っていきましょう。
システム開発のプロセス全体をサポートする「クラウドワークス」
システムに詳しい人が社内におらず、開発を進めていくことに不安がある場合には、システム開発や運用保守に適した人材をクラウドソーシングで外注する方法があります。
登録者数No1の大手クラウドソーシング「クラウドワークス」には、開発の実績・スキルをもつエンジニアやプログラマが数多く登録しています。正式に依頼する前には経歴・スキルを確認できるため、お互いに納得した上で契約を進められます。「プロジェクト形式」で発注することで、開発側と標準化を行う段階から、企画・要件定義、運用保守などまで、あらゆる部分においてのプロを探してサポートを依頼できます。詳しい発注形式や発注相場などはこちらの資料をご覧ください。
▶クラウドワークスの使い方や事例、発注相場がわかる資料をダウンロードする
まとめ
システム開発は、時間をかけて計画的にプロセスを進めるウォーターフォールモデル、迅速かつ柔軟に機能ごとに開発を進めるアジャイルモデルのどちらを採用するかによってスケジュールが異なります。どちらの手法においても発注側・依頼側が双方向でコミュニケーションをとり、チームとなって進めることが大切です。