今回はシステム開発のプロセスを細かく分割して、それぞれの内容を解説してきます。
初めてシステム開発に携わる方にとっては未経験のことばかりなので戸惑うことも多いでしょう。IT人材不足が叫ばれている現代において、急な人事異動でIT部門に所属するケースも少なくありません。
まだシステム開発に携わったことがないという方も、この機会にシステム開発のプロセスを理解していただきたいと思います。
システム開発プロセスの流れ
システム開発プロセスの基本は上流工程から下流工程へと、各工程が連結して繋がっていることです。ただし1~100まで一つの流れで開発を進めることもあれば、各工程を細かく分断した中でシステム開発プロセスを繰り返すという場合もあります。詳しい開発手法に関しては後述しますので、まずはシステム開発プロセスの流れを理解していきましょう。
①システム企画
システム開発プロセスの始まりは「企画」です。一般的にはシステム会社に「こうこう、こういうシステムを構築して欲しい」という依頼が来るので、システム会社はそれに応じてシステム企画を作成しクライアントにプレゼンします。最初から指定され依頼が来ることもあればコンペになることもあるでしょう。システム開発会社としては引き合い案件を増やして安定した依頼を受けたいと考えるでしょう。システム企画ではこれから構築するシステム大枠と開発期間および費用をクライアントに提示します。クライアントのビジネス課題に対してより適切なシステムの企画を提案し、競合より一歩先んずるためにはビジネス課題に対する入念なヒアリングがとても大切です。
②システム要件定義
正式な依頼が成立すると次にシステム要件定義というプロセスに移ります。このプロセスはエンドユーザーにとってどういった機能が必要で、それを実現するためのシステムリソースなど細部まで定義することが大切です。よく言われるポイントが「関係部門の担当者を巻き込むこと」です。たとえば会社の多くの部門が関係するERP(統合型基幹業務システム)を構築する際に、導入担当者の独断で構築を進めてしまうと部門ごとでシステムが機能しないといった問題が発生します。正確なシステム要件を定義するためには、部門関係者を確実に巻き込んで業務要件やエンドユーザーの声を反映させたシステム要件を作り上げることが大切です。
③システム概要設計
システム要件が定義できたらシステムの概要を設計していきます。概要とはつまり「UI(ユーザーインターフェース)はどういったデザインにするか?」「データベースの構造はどうするか?」「入出力できる帳票の種類は何にするか?」など、システムの基本ともなる部分を設計していくことです。システムの大枠を決めると言ってもよいでしょう。たとえばシステム要件を定義しただけでは、各機能がどう連携するかまで定かではないためそのままで開発を進めることはできません。前工程で完成した要件をもとに、システムを組み立てていくことが主な作業です。
④システム詳細設計
システム概要設計で大枠が決まったら各設計をプログラムレベルまで落とし込んでいきます。各プログラムで実現する機能を定義し、大まかなタスク振り分けをすることも仕事の一つです。大規模なシステム開発になると複数のシステム会社が関わることも多いため、個々で決まったタスクが各社に振り分けられるということも少なくありません。
⑤プログラム設計
システム詳細設計で決定した事項はさらに細かい処理手順や一つ一つの構造などを細かく設計していきます。これがプログラミング設計です。ここまで段階的な設計を行うことで、初めてシステム要件にマッチしたプログラムが作成できます。
⑥プログラムコーディング
設計に基づいてプログラムコードを記述していくことでコーディングといいます。プログラムコーディングで大切なことは100%を目指さず、一定の品質を確保できた段階で次の工程に進むことです。そこで生じる問題への改善案を打ち出し、徐々に完成形へと近づけていくことが大切です。
⑦各種テスト
システム開発のテストは4種類あります。1つ目がプログラムテスト、コーディングしたプログラムを単体で動作させて問題を検出するテストです。この時点でより多くの問題を検出することで生産性を高め、システムの信頼性を向上させます。2つ目が結合テスト、各プログラムを連携させて機能レベルで行うテストです。プログラムを連携したときに機能が正しく動作するかが重要になります。3つ目がシステムテスト、各機能を連携したシステム全体をテストします。4つ目が運用テスト、エンドユーザーの実証データに基づきシステムの可用性などを評価するものです。
⑧システム運用保守
各種テストをすべてクリアして問題が無ければ晴れたシステムのリリースとなり、システム運用保守というプロセス移行します。厳密に言えばこの段階で運用プロセスに移行します。ただし、システム改修などが入れば都度開発する必要があるため、再度開発プロセスを繰り返します。
システム開発の手法
前項でシステム開発の基本プロセスを理解しました。これはあくまで基本であって、必ずしもその通りにシステム開発プロセスを進めなければならないという決まりではありません。そこで、多くの企業は大まかに次の2つのシステム開発手法を使い分けています。
①ウォーターフォール開発
「滝の水が上から下へと流れていく様」が語源のウォーターフォール開発は、上流工程から下流工程へと一連の流れでプロセスが進んでいくのが特徴です。予め開発プロジェクト全体の計画や要件を定義し、それに応じたシステム開発を進めていきます。
ウォーターフォール開発の特徴はプロセスごとに明確な成果物が存在することです。その成果物がある程度保証できた段階で次のプロセスに移行するため、進捗管理の容易さやシステムの信頼性向上といったメリットがあります。
しかし、すべてのプロセスが一連の流れでつながっているため、後工程で問題が発生すると手戻りが大きくプロジェクト遅延やコスト増加に繋がるというリスクもあります。なので、ウォーターフォール開発では各プロセスの品質を保証することが前提なため「後戻りできない開発手法」ともいわれています。
②アジャイル開発
アジャイル開発はウォーターフォール開発と対比した手法です。具体的には「イテレーション」と呼ばれる短い開発期間を設定し、各要件に優先順位を付けて開発を進めていきます。つまり前述した③~⑦の開発プロセスを機能ごとに行っていくのがアジャイル開発です。ちなみにアジャイルという言葉には「俊敏な」という意味があります。
アジャイル開発最大の特徴は手戻りが少なく生産性を向上できるという点です。機能ごとに開発プロセスを繰り返すため手戻りが簡単かつ修正も容易です。そのため、結果として生産性が向上し素早くシステム開発が行えます。
ただし、ウォーターフォール開発のように計画性を持つことが難しいため、アジャイル開発を正しく進めていくためには熟練のPM(プロジェクトマネージャー)が欠かせません。
③ DevOps
DevOpsは「Development(ディベロップメント:開発)」と「Operations(オペレーションズ:運用)」の2単語を掛け合わせた造語であり、開発チームと運用チームが共に手を取り協力し合う体制を表します。
システム開発(サービス運用)の現場では、「ユーザーの利便性を高めるために新しい機能を続々とリリースしたい」という開発チームの想いと、「ユーザーからの信頼性を維持するために安定稼働を続けたい」という運用チームの想いが交差し、対立しやすい関係性を生んでいます。
リリースしたい開発チーム、リリースして欲しくない運用チーム。しかし、両者がシステム開発や運用に携わる使命は、「システムやサービスを通じてユーザーの課題を解決し、ビジネス価値を高める」ことで一致しているはずです。そこに目を向けたFlickrエンジニアは、対立するのではなく協力することで従来以上に強力な開発・運用体制が取れるのではないか?と考え、DevOpsを考案します。そして、DevOpsを採用することで「短期間での迅速は開発」、「テスト期間の短縮化による早期リリース」、「テスト・ビルド・リリースの自動化による安定性の維持」が実現できます。
以上がシステム開発プロセスの基本です。ここで紹介した基本を押さえていれば、ひとまずはシステム開発プロセスについて理解したと言ってもよいでしょう。しかし実際はさらに奥が深く様々な開発手法が存在するので、学ぶことをやめずシステム開発について深い理解を得ていきましょう。
- カテゴリ:
- トレンド