システム開発の流れや工程の手順!適切なフローやフェーズ、ウォーターフォールとアジャイルの違いも比較!
- フリーランス名鑑編集部
- 記事制作日2022年02月02日
- 更新日2022年02月02日
「システム開発はどういった流れで行われるの?」
「システム開発の具体的なフローや各フェーズでやることがわからない」
システム開発を開発会社に委託する際には、発注する側もシステム開発の工程を知っておくことが大切です。
システム開発の基本的な流れを知っておくと、こちらの要望がプロジェクトマネージャーなどの開発会社の責任者に伝わりやすくなります。意思疎通がしっかり行えるようになると、システム開発が円滑に進められるでしょう。
この記事では、システム開発の流れや工程などを以下のポイントを踏まえて解説します。
・ウォーターフォール型とアジャイル型の違い
・システム開発の工程に関する略語
この記事を読めば、システム開発の流れや手法、システム開発の工程に関する略語の意味などがわかります。これらがわかると、システム開発を開発会社に委託する際に大いに役立つでしょう。
また、フリーランスとしてシステム開発の案件を受けたい方は、「フリーランス名鑑」への登録をおすすめします。フリーランス名鑑は国内最大級のフリーランス検索サイトであり、登録しておけば自分のスキルや能力に合った案件が受けられることがあります。
フリーランスとして受注数を増やしたい方は、ぜひ登録してみてください。
システム開発の工程とは?
システム開発の工程とは、システムやアプリを開発する際の一連の流れを指します。システム開発はあらかじめ決められた工程(フェーズ)に沿って計画的に進められ、規模によって異なりますがおよそ3か月程度の期間をかけて、顧客が必要とするシステムを完成させます。
システム開発の工程は、「要件定義」「設計」「プログラミング」「テスト」「リリース・運用保守」の5段階からなります。「要件定義」「設計」はシステム開発の上流工程であり、「プログラミング」「テスト」「リリース・運用保守」は下流工程です。
システム開発の上流工程では、計画や設計などの「考える作業」が行われます。一方、下流工程では上流工程で考案した計画や設計に基づいて、プログラミングなどの「実際にシステムを作る作業」が行われます。
システム開発の流れや工程の手順!適切なフローやフェーズを解説
それでは、システム開発の流れや工程の手順について見ていきましょう。システム開発の工程は、ウォーターフォール型とアジャイル型の2種類に大別されますが、ここではウォーターフォール型でのシステム開発の流れを詳しく説明します。
ウォーターフォール型のシステム開発の工程は、細かく分けると以下の9つの工程(フェーズ)に分けられます。要件定義から詳細設計までが上流工程、プログラミングから運用・保守までが下流工程に該当します。
なおアジャイル開発の場合は、短いスパンで「1機能を開発してはレビューする」を繰り返します。仕様がころころ変わるため、必ずしも基本設計と詳細設計をやるとは限りません。
それでは、ウォーターフォール型のシステム開発の9つの工程について詳しく見ていきましょう。
要件定義(要求定義)
要件定義(要求定義)の工程では、クライアントとシステム開発者(会社)が打ち合わせを行い、成果物として「要件定義書」を作成します。
要件定義書はクライアントの課題を解決するために、新しく開発するシステムにどのような要素を盛り込むのかなどを記載した書類で、プロジェクト全体の設計図のようなものです。
要件定義はシステム開発の最上流の工程であり、システム開発者はクライアントの要望を実現させるためのプランを立案します。要件定義を間違うと、クライアントが要望するシステムを開発できず、システム開発は失敗に終わってしまうでしょう。
システム開発は最初が最も肝心であり、クライアントはどのようなシステムを希望するのかをシステム開発者に明確に伝えることが必要です。
基本設計(外部設計)
基本設計(外部設計)では、要件定義書に基づいて、主にユーザーインターフェースの設計を行います。ユーザーインターフェース(UI)とは、ユーザーとシステムの接点を指し、システム開発者はユーザーにとって使いやすいシステムを設計することが必要です。
基本設計を間違うと、ユーザーにとって使いにくいシステムになってしまい、業務に支障をきたすこともあるでしょう。このような事態を避けるためには、クライアントとシステム開発者はしっかりと打ち合わせを行うことが重要になってきます。
この工程における成果物は「基本設計書」であり、ユーザーがストレスなく使いやすいシステムにするために設計を行うことが大切です。
詳細設計(内部設計)
詳細設計(内部設計)では、システム内部のプログラミングの設計を行います。先ほど紹介した外部設計では主にユーザー視点に立って設計をするのに対し、内部設計は開発者側の視点で設計を行うことが特徴です。
この工程における成果物は開発会社のエンジニア向けの「詳細設計書」であり、詳細設計書には、機能仕様書やデータフロー図などの資料を添付します。この詳細設計書に基づいて、プログラマーがプログラミングを行ってシステムを完成させます。
この工程を間違うと、システムが正常に動作しないなどの深刻な事態が発生することもあるでしょう。詳細設計はエンジニアの腕が問われる重要な工程であり、失敗は許されません。
プログラミング
プログラミングの工程では、詳細設計書に基づいてプログラミングが行われます。プログラミングからは下流工程になり、上流工程で作成した「要件定義書」「基本設計書」「詳細設計書」に基づいて、システムを実際に作っていきます。
プログラミングの工程では、以下のようなプログラミング言語でプログラム(モジュール)の作成が行われ、サーバーやデータベースなどのインフラ部門の構築も行われます。
・PHP
・Java
・Ruby
・Python
など
プログラミングの工程は、システム開発の中では最も手間と時間がかかる工程であり、プログラマーやシステムエンジニアなどが担当します。なお、プログラミングの工程での成果物は、システムやアプリの試作品や完成品、ソースコードなどです。
単体テスト
単体テストの工程では、プログラミングの工程で作成したプログラムを一つずつ「単体テスト」を実施し、要件定義で決めた通りに動作するのかを検証します。
モジュール(プログラムの対象単位)ごとにテストを行い、不具合(バグ)が見つかったら修正し、この作業を繰り返すことでプログラムを完成へと近づけます。なお、単体テストの工程はテスターと呼ばれる職種が担当します。
テスターが不具合を発見したらプログラマーに通知し、プログラマーがバグを修正し、再びテスターが単体テストを行います。
単体テストを行うことで、モジュール結合前の段階でエラーチェックができるため、単体テストよりも下流工程の結合テストやシステム(総合)テスト、運用テストでのバグ修正の負担が軽減します。
結合テスト
結合テストの工程では、複数のモジュール(プログラム)を組み合わせた状態で、各サブシステムに不具合(バグ)がないのかを検証します。
単体テストで問題がなくても、複数のプログラムの連携がうまくいかないとプログラムが正常に動作しないことがあるので、結合テストの工程は欠かせません。
なお、プロジェクトの規模によっては、結合テストの工程を「内部結合テスト」と「外部結合テスト」の2段階に分けて実施する場合があります。
結合テストの工程で不具合が見つかれば、単体テストの時と同じようにプログラマーがバグを修正し、再び結合テストを行います。結合テストで問題がなければ、次の工程のシステム(総合)テストに移行します。
システム(総合)テスト
単体テストと結合テストの工程が終わると、それらを含めたシステム全体の総合テストが行われます。システム(総合)テストでは、システム全体に不具合(バグ)がないのかをチェックします。
全てのプログラムが要件定義で決めた通りに動作するのかはもちろん、アクセス過多があった時の耐久性や処理速度など、あらゆる角度からテストが行われ、実用に耐えられるかが入念にチェックされます。
システムテストは、クライアントに引き渡す前の最終段階でのテストであり、システムテストの結果、特に異常がなければシステムはクライアントに引き渡されます。
もし、システムテストで重大な問題が見つかれば、問題が解決するまで不具合を修正することが必要です。
運用テスト
システムがクライアントに引き渡されると、運用テストが行われます。ここまでの工程のテストは開発者側が行いますが、運用テストはクライアントがユーザー視点で行う点が特徴です。
実際にシステムをユーザーのテスト担当者に使用してもらい、使い勝手が悪いなどの問題がないのかをチェックします。運用テストは、これまでの工程のテストと比べると実用性に重点を置いたテストになり、問題がなければ正式に納品・リリースされます。
運用テストは本番稼働前の最後に実施されるテストであり、もし何か問題があった場合は、ユーザー側のテスト担当者は「障害管理票」を起票し、システム開発者に不具合(バグ)の修正を依頼します。
システム開発者は不具合を修正後、再度運用テストを行い、問題がなければ納品・リリースされます。
システム移行(リリース)
システム移行(リリース)の工程では、納品したシステムを実際に使用できるよう、旧システムからの切り替え作業が行われます。切り替え作業中は一時的にシステムが使えなくなることがあるため、限られた時間内で迅速に切り替え作業を行うことが必要です。
また、システム移行の工程では、旧システムからの切り替え中にさまざまなトラブルが発生することを想定し、あらかじめ「移行手順書」を作成しておき、スムーズに新システムに移行できるようにしておきます。
なお、システム移行の方法は、システムを一気に切り替える「一斉移行」や、旧システムから新システムに徐々に切り替える「順次移行」などがあり、どの方法で切り替えるかを事前に決めておきます。
運用・保守
運用・保守の工程では、リリースしたシステムを常に正常に稼働できるよう、定期的に確認を行います。万一、リリースしたシステムにトラブルや不具合が発生した場合は、迅速に対応して、正常に稼働できるように修繕します。
さらに、システムをより良いものにするには随時アップデートを行うことが必要であり、システムに変更を加える作業を行います。このように、システム開発は「作って終わり」ではなく、リリースしてからも継続してメンテナンスや改良を行うことが必要です。
いずれにしても、運用・保守の工程を担当する人員を確保することが必要であり、運用・保守の工程は、社内の情報システム部門が担当することもあれば、外部のシステム会社に委託することもあります。
また、システム開発にかかる費用相場が知りたい方は「WEBシステムの開発費相場まとめ!見積もり費用の内訳は?高いと思ったら人件費を減らそう」をぜひ参考にしてください。
システム開発の工程2種類|ウォーターフォールとアジャイルの違いを比較
先ほどもお伝えしたように、システム開発の工程は「ウォーターフォール型」と「アジャイル型」の2種類に大別されます。ウォーターフォール型とアジャイル型とでは、開発プロセスなどが異なります。
ここでは、ウォーターフォール型とアジャイル型の違いを比較してみます。
システム開発の工程 | ウォーターフォール | アジャイル |
---|---|---|
特徴 | 上流工程から下流工程に順番通りに行う | 工程の順番よりも開発スピードを優先する |
メリット | ・開発工程をスケジューリングしやすい ・あらかじめかかる予算がわかりやすい |
・追加要求に柔軟に対応しやすい ・短納期で進めやすい |
デメリット | ・仕様変更に柔軟に対応できない ・リリースまで長期化しやすい |
・対応可能な人材や会社は限られる ・当初の想定と違ったアウトプットになりやすい |
適したプロジェクト | 品質を重視する大規模なシステム開発 | スピーディーなリリースを優先する新規事業 |
ウォーターフォール型は、滝が上から下に流れ落ちるように、システム開発の工程を上流工程から下流工程に順番通りに行うことが特徴です。開発工程を順番通りに行うことでスケジューリングがしやすく、大規模なシステム開発に向いています。
一方、アジャイル型はシステム開発の工程を同時並行で行うことが特徴で、短期間でのリリースを目指します。リリースまでの期間が短い新規事業や、比較的規模が小さいシステム開発に向いています。
ウォーターフォールの開発工程の特徴
ウォーターフォール型の開発工程の特徴は、システム開発の工程を上流工程から下流工程に順番通りに行うことです。ウォーターフォール型の開発工程は、以下のようなメリットとデメリットがあります。
メリット①開発工程をスケジューリングしやすい
ウォーターフォール型の開発工程は、要件定義→設計→プログラミング→テスト→リリース・運用保守という流れで、上流工程から下流工程に順番通りに行います。
順番を無視して、外部設計が終わる前に内部設計を行うようなことはなく、一つ前の工程が終わってから次の工程に進みます。これにより、開発工程をスケジューリングしやすく、リリースまでには時間がかかりますが、品質の安定につながる点がメリットでしょう。
メリット②あらかじめかかる予算がわかりやすい
ウォーターフォール型の開発工程は、要件定義からリリースまでの工程があらかじめ決まっており、予算が立てやすいこともメリットです。
もちろん、各工程で予期せぬ問題が発生した場合などは予算が変更になることがありますが、大幅に変更になるようなことは少ないでしょう。
あらかじめシステム開発にかかる予算がわかると、クライアントは仕事を発注しやすくなり、開発者側も人員の確保がやりやすくなるなど、双方にとってメリットがあります。
デメリット①仕様変更に柔軟に対応できない
大幅な仕様変更などがあった場合、ウォーターフォール型は最初の工程からやり直すことが必要になってきます。そのため、開発の途中で仕様変更があると、リリースが大幅に遅れてしまう危険性があります。
仕様変更に柔軟に対応できないことがウォーターフォール型のデメリットであり、開発の途中で仕様変更の可能性がある場合や、開発スピードを優先させたい場合は、ウォーターフォール型よりもアジャイル型の方が向いています。
デメリット②リリースまで長期化しやすい
ウォーターフォール型は、リリースまでに長期化しやすいことがデメリットです。ウォーターフォール型は、システム開発の工程を上流工程から下流工程に順番通りに着実に行うため、どうしても時間がかかってしまいます。
急いでいる場合でも順番は無視することができず、ある工程で問題が発生した場合は、その問題が解決するまで次の工程に進むことができません。もし、不具合(バグ)が多数発生したような場合だと、予定よりもリリースが大幅に遅れることもあるでしょう。
アジャイルの開発工程の特徴
アジャイル型の開発工程は、システム開発の工程を同時並行で行うことにより、短期間でのリリースに対応できることが特徴です。アジャイル型の開発工程は、以下のようなメリットとデメリットがあります。
メリット①追加要求に柔軟に対応しやすい
アジャイル型の開発工程は、クライアントの追加要求に柔軟に対応できることがメリットです。追加要求があった場合でも、ウォーターフォール型のように一からやり直すようなことはなく、臨機応変に対処して顧客のニーズに応えられます。
クライアントから追加要求があった場合は、プログラムを修正しながらシステムの実装とテストを進めていき、機能を拡張・追加することが可能です。ウォーターフォール型の開発工程だとこのようなことは許されず、融通が利きません。
メリット②短納期で進めやすい
アジャイル型の開発工程は、短納期で進めやすいことがメリットです。ウォーターフォール型のように要件定義から始める必要はなく、要件定義が明確に定まっていない段階でもシステム開発をスタートできます。
設計段階では詳細が決まっていなくても、修正をしながら開発を進めていくうちに自然とクライアントが要望するものに近づいてきます。アジャイル型の開発工程は作りながら考えていく開発手法であり、リリースを急ぐ新規事業に最適でしょう。
デメリット①対応可能な人材や会社は限られる
アジャイル型の開発工程は、対応可能な人材や会社が限られる点がデメリットです。システム開発の工程の基本はウォーターフォール型であり、ほとんどのシステム開発の工程はウォーターフォール型で行われます。
アジャイル型は比較的新しい開発工程であり、アジャイル型に対応できる人材や会社は不足しています。また、アジャイル型に対応できても実績が少なく、クライアントに実績をアピールできない点もデメリットのひとつです。
デメリット②当初の想定と違ったアウトプットになりやすい
アジャイル型の開発工程は、当初の想定と違ったアウトプットになりやすい点がデメリットです。各工程で修正を繰り返しているうちに、当初に想定していたものとは全く異なるインターフェイスになることもあるでしょう。
また、要件定義ができていない時点で開発がスタートすることもあるので、ウォーターフォール型のような安定した品質は期待できません。安定した品質を望むのであれば、アジャイル型よりもウォーターフォール型の方が適します。
システム開発の工程に関する略語まとめ
システム開発の工程には略語が多く、開発会社の担当者とのコミュニケーションを良好にするためには、システム開発の工程でよく使われる略語を知っておくと良いでしょう。
略語の意味がわかると、開発会社の担当者が何を言っているのかがわかり、こちらの要望も伝えやすくなるでしょう。
ここでは、システム開発の工程に関する略語をいくつか紹介します。以下の略語の意味を知っておくと、こちらの要望を相手に伝える際などに役立ちます。
略語 | 英語 | 日本語の意味 |
---|---|---|
SP | System Planning | 企画 |
SA | System Architectural design、Service Analysis、System Analyze | 要求分析 |
RD | Requirements Definition | 要件定義 |
UI | User Interface | UI基本設計 |
BD | Basic Design | 基本設計 |
SS | System Structure Design | 構造設計 |
FD | Function Design | 機能設計 |
ID | Internal Design | 内部設計 |
ED | External Design | 外部設計 |
DD | Detail Design | 詳細設計 |
PD・PS | Program Design、Program Structure Design | プログラム設計 |
M | Manufacture | 製造 |
C*D | Cording | コーディング |
PG | Programing | プログラミング |
UT | Unit Test | 単体テスト |
IT | Integration Test | 結合テスト |
PT | Product Test | 総合テスト |
ST | System Test | システムテスト |
OT | Operation Test | 運用テスト |
システム開発の工程でよくあるミスや注意すべきポイント
システム開発の工程では、要件定義や基礎設計をしっかり行うなどの注意すべきポイントがいくつか存在します。ここでは、システム開発の工程でよくあるミスや注意すべきポイントの中で特に重要なものを紹介します。
要件定義や基礎設計をしっかり行う
システム開発の工程では、要件定義や基礎設計などの上流工程をしっかり行うことが大切です。特に要件定義はシステム開発の最上流の工程であり、要件定義に問題があれば、クライアントが要望するシステム開発は難しくなるでしょう。
要件定義はシステム開発全体の設計図のようなものであり、設計図が間違っていると、全体の工程もおかしくなってしまうのは当然です。また、基本設計や詳細設計に問題があると、プログラミングの工程で問題が発生し、システムが正常に動作しなくなる恐れがあります。
要件定義や基礎設計をしっかり行うには、クライアントが開発者に要望をしっかり伝えることが大切です。また、開発者はヒアリングをしっかり行ってクライアントの要望を汲み取り、要望を実現できる要件定義書を作成するようにします。
各担当者とのコミュニケーションは密にとる
システム開発の工程では、各担当者とのコミュニケーションは密にとることが極めて重要です。システム開発はクライアントと開発者の共同作業で完成します。クライアントは開発者に、どのようなシステムを開発してもらいたいのかを明確に伝えることが必要です。
開発者はクライアントの企業の業務に精通しているとは限らず、どのようなシステムを導入すればクライアントが抱える問題を解決できるのかがわかりません。
クライアントと開発者がしっかり話し合うことで、どのようなシステムを導入すれば良いのかがわかってきます。それがわかれば、しっかりとした要件定義書を作成でき、下流工程の作業をしっかり行うことで、クライアントが要望するシステムが完成するでしょう。
余裕を持った納期や予算で行う
システム開発は、余裕を持った納期や予算で行うことが大切です。システム開発のほとんどは、ウォーターフォール型の工程で行われます。ウォーターフォール型の工程では、各工程で何か問題が発生した場合は、その問題が解決できるまで次の工程へは進めません。
システム開発はスムーズに行われるとは限らず、各工程で予期せぬ問題が発生することはよくあります。問題解決に時間がかかれば、納期が遅れることがあるので、納期はある程度の余裕を持たせることが必要です。
また、ウォーターフォール型の工程は予算を立てやすい点がメリットですが、各工程で重要な問題が発生すると追加費用がかかる場合があります。予算もある程度の余裕を持たせることで、開発の工程で重要な問題が発生した場合でも安心できるでしょう。
システム開発の工程を外注したい方はフリーランス名鑑へ
システム開発の外注先を探したい方は、システム開発に精通しているフリーランスに依頼することも検討しましょう。企業に外注するよりも、外注費を抑えられる場合がほとんとです。
中でも国内最大級のフリーランス検索サイトである「フリーランス名鑑」を利用すると、システム開発に精通しているフリーランスを無料で探せます。スキルや実績のあるフリーランスに絞って直接コンタクトをとることが可能なので、システム開発の案件を外注・依頼したい方はぜひご登録ください。