【図解で分かる】システム開発の工程・流れを徹底解説~ウォーターフォールとアジャイル~
2021年07月21日
システム開発・ソフトウェア開発の工程には主に2種類の流れが存在します。実際に行う作業(後述する要件定義~リリース・運用保守)自体は共通するものの、開発内容やクライアントの意向などに応じて適切な流れで開発を行っていきます。
今回は代表的な開発工程であるウォーターフォールモデルとアジャイルモデルの2つについて、その違いとメリットデメリット、向いているプロジェクトについてご紹介いたします。
目次
- 1.システム開発の工程・流れ
1-1.Phase.1 要件定義とは?
1-2.Phase.2 設計(外部設計・内部設計)とは?
1-3.Phase.3 プログラミングとは?
1-4.Phase.4 テスト(単体テスト・結合テスト・システムテスト・運用テスト)とは?
1-5.Phase.5 リリースと運用保守とは? - 2.システム開発工程で多用される専門略語まとめ
- 3.ウォーターフォール型のシステム開発工程の特徴~メリットとデメリット~
3-1.ウォーターフォール型のメリット
3-2.ウォーターフォール型のデメリット
3-3.ウォーターフォール型が向いているプロジェクト - 4.アジャイル型のシステム開発工程の特徴~メリットとデメリット~
4-1.アジャイル型のメリット
4-2.アジャイル型のデメリット
4-3.アジャイル型が向いているプロジェクト - 5.ウォーターフォール型とアジャイル型のシステム開発徹底比較
5-1.2つの開発工程の費用は異なる? - 6.パッケージソフトの開発工程
システム開発の工程・流れ
システム開発の工程は大きく5段階に分かれており、「要件定義」「設計」「プログラミング」「テスト」という工程を経て「リリース・運用保守」というのが大まかな流れです。またこの5つの段階をどのように進めていくか、といった進め方にも種類(モデル)があり、「ウォーターフォール型」と「アジャイル型」の2種類のモデルが一般的です。
まずはシステム開発の各工程でどんなことが行われるのかを解説します。これを把握することで打ち合わせのタイミングや実際にシステムが使える時期、修正を依頼するタイミングなどがわかります。
Phase.1 システム開発工程における要件定義とは?
まず一番初めに行うのが要件定義です。システム開発者が依頼者と打ち合わせをして「どんなシステムが必要か?」をヒアリングし、搭載する機能や仕様、運用方法などの方向性を決めます。「こんなシステムが欲しい」といったイメージや業務上の課題点を開発者に伝えましょう。ここで食い違いが起こると希望しているシステムと異なったものが出来上がってしまいかねませんので、しっかりと要望を伝えてすり合わせを行う必要があります。
Phase.2 システム開発工程における設計とは?
システム開発者は要件定義に基づきシステムを設計します。「ユーザーの要望を実現するためにはどんな機能が必要なのか?」「どうすればユーザーが使いやすいシステムになるか?」といったユーザー視点から考えて仕様を決める「外部設計」と、コンピュータに実装したときに正常に作動するかどうかを検討する「内部設計」を行い、システムの構想を練っていきます。この2つの違いを詳しく見ていきましょう。
Phase.2-1 システム開発工程における外部設計とは?
外部設計とは、簡単に説明すると見た目の仕様のことです。実際にユーザーが使う画面などが含まれます。ユーザーの使い勝手や効率に直結する部分なので、しっかりと打ち合わせをして内容についても行き違いのないようにする必要があります。
Phase.2-2 システム開発工程における内部設計とは?
内部のシステムに関する設計です。一般的にはプログラミングの領域を指します。こちらはユーザー視点ではなく、開発者の視点で設計する必要があります。システムがスムーズに動くためにどういったプログラムを使用すべきかなど、エンジニアの腕が問われるフェーズになります。
Phase.3 システム開発工程におけるプログラミングとは?
設計が完了したらいよいよシステムを作る段階となります。設計工程で作成された設計書にもとづいて専門のプログラマーがプログラミング(コードを書いてソフトやアプリを作ること)を行い、システムを形作っていきます。システム開発の一番の肝です。
Phase.4 システム開発工程におけるテストとは?
プログラミングが終わってシステムが出来上がったらテストを行い、動作に問題ないか?ユーザーの要望どおりになっているか?を確認します。モジュール(プログラムの対象単位)ごとに行う「単体テスト」を行ない、各モジュールで問題がなければシステム全体の動作を確認する「結合テスト」を実施します。その後、ユーザーが要求している機能や仕様を満たしているかを確認する「システムテスト」や、実際にユーザーが使用する環境下で動作を確認する「運用テスト」を行い、徹底的にバグや不備がないかをチェックします。
Phase.4-1 システム開発工程における単体テストとは?
プログラムを構成する単位(ユニット)が正しく機能しているかをチェックするテストです。コード作成時などの際に実施し、モジュール結合前の段階でエラーチェックができるため、工程後半でのバグ修正の負担を減らすことができるのが大きなメリットです。
Phase.4-2 システム開発工程における結合テストとは?
単体テストで問題がなければ、ユニットを組み合わせて実際に動作する状態に近い状態で結合テストを行います。データの受け渡しやタイミングに問題がないかどうかを検証し、インターフェイスに問題がないかどうか確認します。結合テストでミスが発覚したり、ユーザーから仕様変更の依頼が入ったりすることもあるため、スケジュールが遅延しないよう余裕を持った日程でテストを行う必要があります。
Phase.4-3 システム開発工程におけるシステムテスト(総合テスト)とは?
システムの最終段階で行われるのがシステムテストです。ユーザーに引き渡す前に行うテストで、仕様書に沿ったシステムになっているかどうか、ユーザーの求めるシステムになっているかどうかのチェックを行います。ここで問題なく作動すれば、ユーザーに引き渡されます。
Phase.4-4 システム開発工程における運用テストとは?
実際にユーザーにリリースし、稼働してもらうテストです。これ以前のテストは開発者が行いますが、運用テストはユーザーが行い、ユーザー視点で動作チェックをするのが大きな違いです。開発者側で想定していなかった操作がされることもあり、ユーザーが使用するにあたり不都合がないかどうかのチェックをするテストとなります。またユーザーにとってはシステムの操作や運用を理解し習熟するためのテストでもあるため、開発者側から支援することも求められます。
Phase.5 システム開発工程におけるリリースと運用保守とは?
テストの結果問題がなければ、いよいよユーザーに納品・リリースとなり、開発・ベンダー側は運用・保守という立場に回る段階となります。運用とは、システムが正常に作動するかを定期的に確認し、トラブルが起きないようにすることを指します。一方保守とは、システムにトラブルや不具合が発生した際に対応することに加え、アップデートなどシステム変更の必要が発生した場合の変更作業も含まれます。保守の仕事は想定外のトラブル対応なども含まれるため、専門性が高く開発に近いといえます。ただ、会社によっては運用と保守を兼任しているといったところも多くあります。
前項のようにさまざまなテストを行なった上でリリースしますが、実際にユーザーが使っていく中でバグあるいは改善点が見つかることもありますので、逐一修正することになります。ユーザー側は実際にシステムを使ってみて「問題点が見つかった」「使いにくい」「入力や表記が分かりづらい」といった要望が出てきたらしっかりと開発者に伝えましょう。
システム開発工程で多用される専門略語まとめ
システム開発の業界ではさまざまな専門用語が飛び交います。もちろん開発会社の担当者は打ち合わせの際に一般の方でもわかるように説明してくれるかと思いますが、専門用語を知っておけば、よりコミュニケーションがスムーズになります。よく使われるものを表にまとめてみましたので、参考にしてください。
開発フェーズ | 省略名 | 正式名称 | 意味 |
---|---|---|---|
要件定義 | RD | Requirement Definition | 要件定義 |
RA | Requirement Analysis | 要求分析 | |
設計 | SA | System Architectural design | システム方式設計 |
SP | System Planning | システム企画 | |
BD | Basic Design | 基本設計 | |
DD | Detail Design | 詳細設計 | |
ED | External Design | 外部設計 | |
FD | Function Design | 機能設計 | |
ID | Internal Design | 内部設計 | |
SS | System Structure Design | 構造設計 | |
UI | User Interface | UI基本設計 | |
PD | Program Design | プログラム設計 | |
PS | Program Structure Design | プログラム(構造)設計 | |
プログラミング | PG | Program / Programing | プログラミング |
CD | Coding | コーディング | |
テスト | ST | System Test | システムテスト |
UT | Unit Test | 単体テスト | |
IT | Integration Test | 結合テスト | |
OT | Operations Test | 運用テスト | |
PT | Product Test | 総合テスト |
ウォーターフォール型のシステム開発工程の特徴~メリットとデメリット~
システム開発工程には「ウォーターフォール型」と「アジャイル型」の2種類があります。ウォーターフォールは直訳すると「水が流れ落ちる」という意味。川の水が上流から下流に流れるように、上流工程から計画にもとづいてそれぞれの段階を経て1つのシステムを完成させます。流れた水が元に戻らないのと同じように、基本的に前工程に戻ることはありません。多くのシステム会社あるいは開発者はウォーターフォール型でシステム開発を行なっています。
ウォーターフォール型のメリット
ウォーターフォール型には以下のメリットがあります。
1.スケジュール管理がしやすく納期の見通しを立てやすい
事前に決めた計画に従って工程を進めていき、後戻りも少ないため、納期やスケジュール管理がしやすいです。希望するシステムの内容が決まっている、明確に導入時期が決まっているというケースに向いています。
2.予算が立てやすい
見通しが立てやすいため、依頼する側も実際にシステム開発をする側も必要な予算を立ててから作業に取りかかることができます。
3.大きな問題が発生しにくい
各工程をそれぞれの専門家が専任で担うため、システム会社や開発者に経験やノウハウがあれば、ある程度ルーチンで作業を進めることができます。そのため、大きな問題が発生しにくく後になって大きな変更が出ることも少ないのがメリットです。
ウォーターフォール型のデメリット
システム開発ではウォーターフォール型が主流ですが、デメリットもあります。
1.リリースまで時間がかかる
段階を経て1つのシステムを構築していくので、リリースまでに時間がかかるケースがあります。
2.仕様変更やトラブルの対応が難しい
仕様変更や大きな問題などが発生すると一からやり直しになってしまうため、大幅な納期遅延が発生する危険性があります。納期まで時間がない、スピード感を重視したいのであれば、後述するアジャイル型のほうが向いているかもしれません。
ウォーターフォール型が向いているプロジェクト
製品をリリースするまでにある程度時間がかかるため、ウォーターフォール型開発は、作りたいと考えている完成物が明確に決まっている、また開発までに時間を要する大規模なプロジェクトに向いています。ただし、ウォーターフォール型の開発に取り組むことは、開発者側の人材育成やスキルアップにつながるため採用している企業が多いのが現状です。
アジャイル型のシステム開発工程の特徴~メリットとデメリット~
「アジャイル」は「俊敏な」「素早い」という意味です。システムを構成する機能(モジュール)ごとに開発を進めていき、最終的に一つのシステムとしてリリースするという流れとなります。料理に例えるとウォーターフォール型はコース料理をお客と話して決めて、お客さんの目の前にはそれが一度に出てくるイメージですが、アジャイル型は一皿ごとに出てきて、お客さん次第で前菜の内容を変えてもらったり、中華コースから和食コースへ変更してもらったりして最終的にコース料理が完成するイメージです。アジャイル型の工程の場合、モジュールごとに要件定義~リリースの小サイクル(イテレーション)が発生します。
アジャイル型のメリット
アジャイル型のメリットとしては以下のことが挙げられます。
1.納期が早い
システムを分割してそれぞれのモジュールを同時並行で作っていくので、ウォーターフォール型と比較すると大幅に納期を短縮することができます。特にリリースまでの期間が短い、あるいは比較的規模が小さいプロジェクトに向いている開発方式です。仮に問題が発生しても大幅な納期遅延のリスクが少ないのも利点と言えます。
2.要求の変更などに柔軟に対応できる
開発フェーズが細かく区切られているため、急な仕様変更やユーザーからの要求に対応可能なことも大きなメリットです。ウォーターフォール型のように1からやり直しといったことも発生しづらいことも大きいといえます。
3.顧客のニーズに応えやすい
依頼者と開発側が密にコミュニケーションを取りながら開発を進めていくため、より依頼者のニーズや要求に沿ったシステム開発ができます。
アジャイル型のデメリット
短期間で開発が可能なアジャイル型ですが、以下のようなデメリットがあることに注意が必要です。
1.対応できるシステム会社が少ない
システム開発はウォーターフォール型が主流なため、アジャイル型の開発に対応できるシステム会社が少ないのがデメリットです。
2.当初のコンセプトと完成物に大きな違いが発生することがある
アジャイル型は大枠の方向性を決めて各工程においてすり合わせていくという流れになります。そのため、綿密に計画を立てた上で開発を進めるウォーターフォール型と違い、当初の計画との乖離が生じるリスクもあります。
3.開発者側で人材を確保できないことがある
アジャイル型を実際の業務で経験したことがある人が少ないため、対応可能な会社であっても依頼時に別の開発に関わっていて対応してもらえないといったこともあります。
アジャイル型が向いているプロジェクト
顧客の要望や仕様変更に柔軟に対応可能なアジャイル型は、完成物のイメージが明確でないプロジェクトや小規模なプロジェクト向きです。短期間で開発可能なシステムが必要な場合や単純な機能の実装をしたいと考えているなら、ウォーターフォール型よりもアジャイル型のプロジェクトを考えるといいでしょう。
ウォーターフォール型とアジャイル型のシステム開発徹底比較
ウォーターフォール型とアジャイル型の違いについて、改めて一覧表でまとめてみました。
ウォーターフォール型 | アジャイル型 | |
---|---|---|
特徴 | すべての工程を段階的に行う | 複数のモジュール作成を同時並行で進める |
メリット | ・スケジュール管理がしやすい ・要望通りのものが出来る可能性が高い ・対応しているシステム会社が多い |
・納期が短い ・仕様やスケジュール変更に柔軟に対応できる |
デメリット | ・問題が発生すると納期遅延につながるリスクがある ・納期が若干長くなる |
・計画どおりの仕様・納期にならない場合がある ・対応しているシステム会社が少ない |
向いているケース | ・作ってほしいシステムが決まっている ・導入時期が決まっている |
・作ってほしいシステムが具体的でない ・なるべく早くに導入したい |
それぞれメリット・デメリットがありますので、しっかりと把握した上でどちらの方式が自社に合っているか検討してみましょう。
2つの開発工程の費用は異なる?
ウォーターフォール型はあらかじめ立てた計画にもとづいて仕様を決め、機能を実装します。それに対してアジャイル型は大まかな方向性を決めた上で必要なもののみを実装していくスタイルなので、アジャイル型のほうが費用は安い傾向があります。ただし、仕様変更や機能の追加、修正などが重なってしまうと、その分費用が高くなってしまう可能性もありますので注意が必要です。
パッケージソフトの開発工程
パッケージソフトの導入であれば開発は不要だと思われるかもしれません。もちろん、既製品をそのまま使われるのであれば、インストールするだけで終わります。しかし、お客さまのご要望に応じたカスタマイズを行うのであれば、やはり上記のような開発工程を踏む必要があります。
弊社ではお客さまのご要望に応じたオーダーメイドシステムを開発する体制が整っています。使い勝手が良いシステムを安くお作りしますので、ぜひご相談ください。