システム開発企業は、複数の案件を扱うことが多いです。案件によって最適な開発手法を選ぶことは、プロジェクトの円滑な進行において必要不可欠です。
中には、どんな案件もウォーターフォール開発で対応しているという会社もあるでしょう。しかし、案件によっては別の開発手法を用いたほうがよいケースもあります。最適な開発手法を導入しないと、納期に間に合わないこともあるかもしれません。
本記事では、ウォーターフォール開発のメリット・デメリット・開発工程を解説します。ウォーターフォール開発が最適なケースも紹介するので、参考にしてください。
ウォーターフォール開発とは
ウォーターフォール開発は、開発作業を複数の工程に分け、ひとつの工程が終わったことを確認して次の工程へ移る手法です。上流から下流へ滝が流れ落ちるように開発をしていくことから、この名前が付けられました。
ウォーターフォール開発の歴史
ウォーターフォール開発は、1968年にドイツで開かれた国際会議において、ソフトウェアの効率的な開発手法として初めて提示されました。1970年には、ウィンストン・ロイス情報工学博士の論文で、ハードウェア開発のプロセスと似たモデルとして提唱されました。
現在のウォーターフォール開発は、大規模または品質を重視するシステム開発において、よく使用されるモデルとなっています。
ウォーターフォール開発の特徴
ウォーターフォール開発は、各工程に漏れがないかを確認しつつ作業をしていくので、工程ごとの進捗状況を把握しやすいという特徴があります。
ひとつの工程が終了すると必ずドキュメントを残すので、仕様が把握しやすく、プロジェクトの管理に適しています。
ウォーターフォール開発のメリット
ウォーターフォール開発を採用するメリットは、主に以下の3つです。
- 進捗・スケジュールの管理がしやすい
- 品質の保ちやすい
- 人材の育成・関係者の入れ替えがしやすい
進捗・スケジュール管理がしやすい
ウォーターフォール開発は、事前にシステムの要件・具体的な開発手順を定めてから作業に入るので、スケジュールの管理がしやすくなっています。各工程の成果をまとめた後で次の工程に進むので、工程ごとの担当者割り振り・進捗の把握がしやすいという特徴もあります。
ウォーターフォール開発は全ての工程で間違いがない限り、計画に沿って作業を進めやすい手法です。
品質の担保がしやすい
ウォーターフォール開発は、成果物の完成度を保ちやすいというメリットがあります。
当初の手順に沿って開発を進めるので、途中で開発の方向性がブレることはないからです。計画・仕様通りの成果物ができるので、発注側に安心感を与えられます。
人材育成・関係者の入れ替えがしやすい
ウォーターフォール開発は、最初に各工程の担当者を割り振ります。エンジニアは基本的に担当工程の技術のみを活かせばよいので、専門技術に特化した人材育成がしやすいのが特徴です。
途中で担当者を入れ替える場合でも、それまでの工程の成果がまとめられているので、業務の引き継ぎがしやすくなっています。
ウォーターフォール開発のデメリット
ウォーターフォール開発は、当初の計画に沿って開発を進められる手法ですが、以下の3つのデメリットが存在します。
- 仕様変更や問題があると時間がかかる
- 開発期間が長くなりがち
- 開発の後半までテストができない
仕様変更や問題が生じた際に手間がかかる
ウォーターフォール開発は途中で仕様変更・問題が生じた場合、対応に工数がかかります。
最初に発注側の要望を聞いて要件定義・設計をしますが、これらの工程以降に発注側が仕様変更を求めてきたりミスがあったりした場合は、作業をやり直さなければなりません。
各工程の手戻りが発生すると、開発にかかるコスト・労力・時間が増え、トラブルの原因となる可能性もあります。
開発期間が長くなりやすい
ウォーターフォール開発は、各工程のタスクが完了しなければ次の作業ができません。
最初の段階でも要件定義後に設計をし、設計後に開発に入るので、スピード感という面ではあまり大きな利点はありません。
各工程終了後にドキュメントをつくるので、書類の量が膨大になりがちです。手戻りがあれば、書類も作り直さなければならず、開発期間が長くなりやすいです。
開発が後半になるまでテストができない
ウォーターフォール開発では、開発の後半になってから動作テストをします。テストでは実証データ収集やエラーチェックなど、多くの作業をします。
テスト段階でシステムに問題が見つかった場合は、修正が必要です。しかし開発に膨大な時間を費やした後なので、大幅な遅れにつながる可能性があります。
ウォーターフォール開発の工程
ウォーターフォール開発は、以下の6つのプロセスを上から順番に行います。
- 要件定義
- システム設計
- システム開発
- テスト
- システム導入
- 運用・保守
1.要件定義
開発するシステムの要件を決めていくプロセスです。発注側の希望を反映し、必要な機能は何かを明確にする作業になります。最初に要件定義を詳細に決めることで、後の作業で手戻りが生じる可能性を低くできます。
2.システム設計
要件定義をまとめた後は、システムの設計です。
システムに必要な機能を明確にし、機能間の関連性・情報を管理するデータベースの仕様・機能ごとの設計などを決定していきます。
システム設計では、画面操作のイメージなどを決定する基本設計後に、内部処理を決定する詳細設計をします。発注側が関与できるのは基本設計までなので、自社の希望が反映されているかを確認しましょう。
3.システム開発
システム開発では、詳細設計書をもとに、エンジニアの手でプログラミングが行われます。
4.テスト
テストの段階では、以下の流れで完成したシステムが正常に動作するかを確認します。
- 単体テスト:各種機能が問題なく動作しているかを確認
- 結合テスト:他の機能と連携させて動作を確認
- 総合テスト:システム全体の動作を確認
- 受入テスト:本番環境でも正常に動作するかを確認
テスト範囲を徐々に広げていき、各種段階で正常な動作が確認できたら証拠を残し、成果物とします。
5.システム導入
全てのテストをクリアしたら、システムを導入します。旧システムを改善した場合は、データ移行などの作業を行います。データ移行が必要な場合は、要件定義時に移行方法を決めておきましょう。
6.運用・保守
システムを運用・維持していくためには、保守が必要です。
外注先は開発したシステムの仕様を知りつくしているので、最初の要件定義の時点から、運用・保守に関しても相談しておきましょう。
ウォーターフォール開発が向いているケース
成果物の完成度を重視し、複数の工程を順に進めていくウォーターフォール開発は、以下のようなケースに向いています。
成果物の完成度を重視するケース
通信システム・自動車に組み込むソフトウェアなど、極力障害の発生を避けたいシステムには、ウォーターフォール開発が適しています。
工程ごとにドキュメントを作成し、何度もテストを繰り返すので、障害の発生率を低くしやすいためです。
仕様の変更を想定していないケース
最初から仕様が明確で、途中での変更が存在しないケースでは、ウォーターフォール開発が適しています。手戻りの負担が問題となる開発方法なので、仕様変更が一切ないのであれば、そのデメリットを打ち消せるからです。
開発の規模が大きいケース
ウォーターフォール開発は、開発の規模が大きい場合にも適しています。
規模の大きいシステムの場合は必要な人員が多くなりますが、事前に各工程においての人数を想定できるので、リソースの調整がしやすいからです。
たとえば人手が必要な場面では、あらかじめ大量に人員を投入すると決めておけば、実際の作業をスムーズにできます。
ウォーターフォール開発は最適なケースで導入しよう
ウォーターフォール開発は、上から順に流れるように開発を進めていく手法です。
ひとつの工程が終わるごとに成果をまとめ、次の作業へと進むことから品質を確保しやすい反面、途中での仕様変更に対応しにくい・時間がかかりやすいというデメリットがあります。
システム開発には多くの手法があるので、自社に最適な方法を選びましょう。
また、システム開発の外注先選びでお困りの方は、弊社までお気軽にご相談ください。 当社がこれまで支援してきた開発事例の共有、企画・コンサルティング、要件定義や実際の開発支援まで包括的にサポートさせていただくことが可能です。
システム開発を失敗しないために、弊社が相見積もりの取得までをサポートさせていただくことも可能です。むやみな営業電話などは決して行いませんので、まずは無料のご相談をお待ちしております。