システム開発を依頼する際、開発工程やプロジェクトの流れ、手順を理解することは、システム開発プロジェクトにおいてとても大切です。
この記事では、システム開発の基本的な開発工程を紹介しながら、開発手法別の工程の比較や、開発工程が始まる前に準備しておくべきことなどを紹介します。開発工程の概要とそのポイントをつかみ、システム開発プロジェクトの成功につなげましょう。
システム開発の工程は、開発するシステムの規模や開発手法などで異なりますが、一般的な流れは以下です。
要件定義・外部設計・内部設計を「上流工程」、プログラミング・テスト・リリース・運用保守「下流工程」と呼ぶこともあります。
以降は、システム開発の各工程の概要を説明します。
システム開発の要件定義はRD(Requirements Definition)とも言われ、システム開発によって解決したい課題、実現したいことを定義する工程です。具体的には、システム開発会社と依頼者が、システム開発の目的、そのために開発するシステムに実装する機能や仕様、費用、スケジュールなどを策定します。
要件定義に関する詳細はこちら
要件定義工程の成果物は、プロジェクトによって異なりますが、独立行政法人情報処理推進機構(IPA)の「失敗しない要件定義とリスク対策」や「ユーザのための要件定義ガイド 第2版」などが参考になるでしょう。
「失敗しない要件定義とリスク対策」によると、主な要件定義工程の成果物は以下です。
システム開発の工程は、要件定義で決めた内容をもとにそのあとの工程へ進みます。このため要件定義は、システム開発の工程のなかでも特に重要な工程です。
要件定義の内容に抜け漏れや曖昧さがあると、開発スケジュールが遅延したり、そのあとの工程で出戻り作業が発生して費用が割高になったりすることがあります。また、要件定義以降で機能や仕様を変更する場合は「仕様変更」とみなされ、追加費用が発生する場合もあるので注意しましょう。
外部設計(基本設計)工程はBD(Basic Design)、インタフェース設計などと呼ばれることもあります。
この工程では、要件定義の内容をもとに、システムの外観(操作画面などの見た目)や挙動を中心に設計します。画面の見やすさや操作のしやすさといった、システムの使いやすさを検討する工程です。
外部設計工程の一般的な成果物は以下です。
開発プロジェクトによっては、要件定義の工程のなかで外部設計を行なったり、外部設計と内部設計をまとめて「設計」工程としたりする場合もあります。
内部設計工程はDD(Detail Design)やプログラム設計とも呼ばれ、外部設計工程で決まった内容の実装方法(プログラミング方法)を設計します。具体的には、開発言語やサーバー、データベース、API連携などの技術的な部分の検討です。
家の設計に例えると、外部設計は外壁や内装などの「目に見える部分」を設計する工程である一方、内部設計は「目に見えないが、家を建てるために必要な部分」を設計する工程と言えるでしょう。
内部設計工程の成果物は主に以下です。内部設計工程の成果物は、システムをプログラミングするエンジニア向けの資料が中心です。
プログラミング工程は、内部設計の工程で作成した資料をもとに、コンピュータへの指示を記述(=プログラミング)して、実際にシステムをつくる工程です。
記述はプログラミング言語を使います。プログラミング言語にはさまざまな種類があり(C++、PHP、Java、Ruby、Pythonなど)、開発するシステムの内容によって使用する言語を選択します。また、この工程でインフラ構築(サーバーやデータベース)も行ないます。
プログラミング工程の成果物は、基本的に以下です。
テスト工程では、開発したシステムの動作を確認します。不具合(バグ)などがあった場合は、システムを修正して再度テストする工程を繰り返します。
テスト工程は、大きく以下の4種類に分けられます。
それぞれ概要をご説明します。
システムを開発する際は、システム内の機能を分割してプログラミングすることが一般的です。単体テストは、この分割された機能(モジュール、単位、ユニット)ごとにテストを行ない、それぞれ正しく動作するかを検証する工程です。
たとえば、採用管理システムを開発する場合「応募者に連絡する機能」「応募者の情報を閲覧する機能」などに分けて開発し、機能ごとにテストを行ないます。
結合テストは、分割して開発した複数の機能を結合し、データの受け渡しなどが正しく連携するか、画面の見た目にズレがないかなどをテストする工程です。
先述の採用管理システムであれば、システム全体において応募者の情報が一貫しているかなどを確認します。
総合テスト工程では、開発したシステム全体をテストし、要件定義の工程で策定した内容を満たしているか確認します。
また、総合テスト工程で、処理速度やアクセスの耐久性なども検証することがあります。
運用テスト工程では、開発したシステムを実際に利用するユーザーがシステムを操作し、システムを利用するうえで支障がないかテストします。
運用テストは、システム開発の依頼者が主体となり、利用者の目線でシステムを検証する工程です。
開発したシステムを公開する工程です。リリース後、システム開発の依頼者がシステムの動作確認などを実施し、問題がなければ納品となります。
既存のシステムが存在する場合は、旧システムから新システムに移行します。移行方法には、一気に切り替える「一斉移行」と、機能ごとなど段階的に切り替える「順次移行」があります。
移行の際、旧システムのサービス停止時間を工程に設けることもあります。サービス停止時間中はシステムを利用できないので、サービス停止時間をできるだけ短く設定し、限られた時間の中でシステムを移行する必要があります。
また、リリースの工程で不具合が発生した場合、応急処置として旧システムに戻す場合もあります。その際の判断や手順も予め工程を確認しましょう。
上記のような手順を策定し、リリース工程をスムーズに行なうため、移行手順書を作成する場合があります。
運用保守の工程は、リリース以降、システムを利用し続ける限り発生します。
運用は、利用者のフィードバックなどをもとに改修やアップデートなどの変更を加えることです。一方、保守はシステムの安定稼働を目的としており、稼働状況を継続的に確認し、サーバーダウンなどの異常が発生した際に処理することを指します。特に保守では、急なトラブルに対応するための担当者が必要だと言えるでしょう。
システム開発の工程は、開発手法によって異なる場合があります。そこで、ここからは主な開発手法とその概要を説明します。
ウォーターフォール(Waterfall)は「滝」を意味します。滝が上流から下流へ向かうように、システム開発の工程を順番に完了する開発手法です。
前の工程に戻ることがないため、要件定義の工程でシステムの仕様を確定させ、仕様通りに開発を進めます。
メリット |
・計画を管理しやすく、スケジュールや納期の見通しが立ちやすい ・予算が立てやすい |
---|---|
デメリット |
・仕様を変更しにくい ・全工程の完了後にリリースするため、リリースまでに時間がかかる |
おすすめのケース |
・開発するシステムの仕様が明確で、変更の可能性がない ・多くのエンジニアが必要な大規模開発 |
アジャイルは「俊敏な」「素早い」を意味し、スピードを重視する開発手法です。必要な機能に優先順位をつけ、機能単位で「設計」「開発」「テスト」「リリース」の工程を繰り返します。
優先度の高い機能から順番に開発し、最後にシステムが完成しますが、途中で優先順位を変更することも可能です。
メリット |
・納期が速い ・仕様が決まっていなくてもスタートできる ・仕様変更に対応しやすい |
---|---|
デメリット | ・スケジュールやコストを管理しにくい |
おすすめのケース |
・短期間でリリースし、市場や利用者の反応に応じて仕様を柔軟に変更したい ・システムの仕様が明確ではなく、作りながら検討したい ・スタートアップ、新規事業 ・小規模の開発 |
「プロトタイプ」は「試作品」を意味し、試作品を作成して、レビュー後に開発を進める手法です。イメージを明確に共有してから、開発を進めます。
メリット | ・イメージを明確にできるため、認識のずれが起きにくい |
---|---|
デメリット | ・仕様が決まるまでレビュー工程を繰り返すため、負荷がかかる |
おすすめのケース |
・開発したいシステムのイメージが明確ではない ・小規模の開発 |
スパイラルは、ウォーターフォールとアジャイルを混合した開発手法です。アジャイルのように、機能毎に開発工程を繰り返しますが、機能ごとにリリースするのではなくシステム全体の完成後にリリースする点は、ウォーターフォールと同じです。
「spiral=らせん」のように、小さな開発工程を繰り返してシステムの完成度を高めることから、スパイラルと呼ばれます。
メリット |
・機能単位でレビューを行なうため、イメージを共有しやすく、手戻りを防ぎやすい ・計画の変更に対応しやすい |
---|---|
デメリット |
・リリースまでに時間がかかる ・進捗を管理しにくい |
おすすめのケース | ・小規模の開発 |
開発手法ごとに、メリット・デメリット・向いているケースを一覧でまとめました。開発したいシステムの内容や、自社の状況に合わせて、最適な開発手法を選ぶことが大切です。
ウォーターフォール | アジャイル | プロトタイプ | スパイラル | |
---|---|---|---|---|
概要 | システム開発の工程を順番に完了する | 機能単位で「設計」「開発」「テスト」「リリース」の工程を繰り返す | 試作品を作成して、レビュー後に開発を進める | 機能単位でに開発工程を繰り返し、最後にリリースする |
メリット | ・スケジュールや納期の見通しが立ちやすい ・予算が立てやすい |
・納期が速い ・仕様が決まっていなくてもスタートできる ・仕様変更に対応しやすい |
・イメージを明確にできるため、認識のずれが起きにくい | ・手戻りを防ぎやすい ・計画の変更に対応しやすい |
デメリット | ・仕様を変更しにくい ・リリースまでに時間がかかる |
・スケジュールやコストを管理しにくい | ・仕様が決まるまでレビュー工程を繰り返すため、負荷がかかる | ・リリースまでに時間がかかる ・進捗を管理しにくい |
おすすめのケース | ・開発するシステムの仕様が明確 ・大規模開発 |
・短期間でリリースし柔軟に仕様変更したい ・開発しながら仕様を検討したい ・スタートアップ、新規事業 ・小規模の開発 |
・開発したいシステムのイメージが明確ではない ・小規模の開発 |
・小規模の開発 |
システム開発を依頼する際、開発工程を知ることには以下のようなメリットがあります。
システム開発の依頼者と開発会社が共通の認識をもち開発工程を進めることは、開発プロジェクトを円滑に進めることにつながります。
システム開発では、依頼者への確認事項も多いため、開発会社と依頼者が齟齬なく作業を分担することが不可欠です。双方が開発工程を理解することで、開発の進捗や、いつ・どのような確認が発生するのかを把握しやすく、コミュニケーションもスムーズになるでしょう。
システム開発では、開発工程に応じて納期やスケジュールを設定・管理します。開発工程を理解することで、スケジュールへの認識を合わせやすく、納期遅れを防ぎ予定通りのリリースを目指せるでしょう。
システム開発の費用は、仕様や開発期間によって変動します。このため、費用の算出には、開発工程や各工程の内容を明確にすることが大切です。逆に、計画通りに開発工程が進まなかったり、あとから大きな修正が発生したりした場合、想定よりもコストが増えてしまうこともあります。
開発工程を把握し、工程に沿ってプロジェクトを進めることで、開発費用の削減につながるでしょう。
開発工程に沿って確認やレビューを行なうことで、認識を合わせながらスムーズに開発を進められます。
このため、開発工程を理解し、それぞれの工程で必要な確認やレビューを行なうことは、開発するシステムの品質確保にもつながります。
システム開発の工程では、システム開発プロジェクト成功のうえで気を付けるべきポイントがあります。
それぞれ説明しましょう。
システム開発プロジェクト成功のためには、システム開発の依頼者と開発会社、双方の協力が大切です。
開発したいシステムのイメージが曖昧だったり、確認が滞ったりすると、思っていたシステムを開発できなかったり、スケジュール
遅延やコスト増加の原因になったりすることがあります。
システム開発会社に対して分かりやすく説明する、素早く回答するなどを心掛けると良いでしょう。
システム開発では、開発工程があとになるほど、仕様変更や修正が難しくなります。特に、プログラミングやテストの工程に入ってからの変更は、スケジュールや費用に影響することがあります。
このため、開発工程の初期段階でシステムのイメージを明確にすることが大切です。
ここまでシステムの開発工程について説明しましたが、開発工程が始まる前には、システムを依頼する開発会社の選定や発注なども必要です。この際におさえるべきポイントを、開発工程と合わせて理解しておくと良いでしょう。
提案依頼書(RFP)は、開発するシステムの要件を記載した文書です。一般的にはシステム開発の依頼者が作成し、見積もり依頼時にシステム開発会社へ提出します。
システム開発会社は、RFPをもとに見積もりや提案を行なうことが多いです。このためRFPの作成は、精度の高い見積もり作成や開発プロジェクトの費用の明確化につながります。
システム開発会社に見積もりを依頼する際は、複数社から相見積もりをとり、費用感をつかむことがおすすめです。
また、システム開発会社を比較する際は、見積もり金額だけではなく、提案内容やコミュニケーションの取りやすさなども含めて比較することをおすすめします。
システム開発の契約には、大きく「請負契約」「準委任契約」の2種類があります。
契約に関する詳細はこちら
請負契約は成果物の完成を約束する契約、準委任契約は成果物ではなく稼働に対して支払いが発生する契約で、おすすめの契約形態は開発プロジェクトの進め方によって違います。
一般的には、開発したいシステムの仕様が明確な場合は請負契約、開発を進めながら検討する場合は準委任契約を結ぶことが多いです。
契約形態の種類によって開発手法や開発工程が変わることもあるため、システム開発会社への発注時に契約形態を確認しましょう。
システム開発の工程で使われる略語を紹介します。
略語 | 意味 |
---|---|
SP(System Planning) | システム企画 |
SA(Service Analysis) | 要求分析 |
SA(System Analyze) | システム分析 |
SA(System Architectural design) | システム構造設計 |
RA(Requirement Analysis) | 要件分析 |
RD(Requirements Definition) | 要件定義 |
UI(User Interface) | ユーザーインターフェイス設計 |
BD(Basic Design) | 基本設計 |
ED(External Design) | 外部設計 |
DD(Detail Design) | 詳細設計 |
ID(Internal Design) | 内部設計 |
FD(Function Design) | 機能設計 |
SS(System Structure Design) | システム構造設計 |
PD(Program Design) | プログラム設計 |
PS(Program Structure Design) | プログラム構造設計 |
M(Manufacture) | 製造 |
PG(Programing) | プログラミング |
C、CD(Coding) | コーディング |
UT(Unit Test) | 単体テスト |
IT(Integration Test) | 結合テスト |
ST(System Test) | システムテスト |
PT(Product Test) | 総合テスト |
OT(Operations Test) | 運用テスト |
おすすめ資料