ウォーターフォール開発入門【プロジェクト管理方法含めて解説】
はじめに
システム開発やソフトウェア開発においては、実際のシステムの運用に至るまでに、要件定義・設計・開発・テスト・リリースといった一連の工程があります。
ウォーターフール開発は、その一連の工程を進めるための代表的な開発モデルで、昔からシステム開発の現場でよく採用されている開発手法の1つです。
ウォーターフォール開発についてよくある質問
ウォーターフォール開発の起源
ウォーターフォール開発の歴史は古く、1968年のNATO後援の国際会議にてその原形が誕生し、日本国内でも1970年代から利用されています。
「滝(Waterfall)」のように、上流から下流へと開発工程を進めることから、ウォーターフォールと名付けられました。
基本原則
ウォーターフォール開発とは、開発プロセス全体を複数工程に分割し、時系列に沿って各工程を順番に進めていく開発手法のことです。各工程は、一般的に「要件定義>外部設計>内部設計>開発>単体テスト>結合テスト>総合テスト>運用テスト>リリース」という流れで進めます。
ウォーターフォール開発では、開発を始める前に、まず要件定義で機能や細かな仕様などをすべて定め、開発を具体的にどのように進めるかを決定します。その後、設計>開発>テストという流れで、1つひとつの工程をしっかりと完了させながら進めていきます。
また、ウォーターフォール開発には、次の3つのメリットがあります。
- 完成品の品質を担保しやすい
- スケジュールや進捗を管理しやすい
- 予算や人材を管理しやすい
1.完成品の品質を担保しやすい
ウォーターフォール開発では、最初に「何を作るか」を明確にしたうえで、事前に決められた手順どおりに各工程を1つひとつ進め、開発後には確実にテストを行います。そのため、完成品の品質を担保しやすいというメリットがあります。
2.スケジュールや進捗を管理しやすい
ウォーターフォール開発では、要件定義で必要なタスクをすべて洗い出し、設計・開発・テストを行います。するべき作業が明確になっているため、計画が立てやすいのが特徴です。また、プロジェクトの全体像を常に把握できるので、プロジェクトを開始した後の進捗を管理しやすい点も大きなメリットです。
3.予算や人材を確保しやすい
あらかじめ必要なタスクやスケジュールが決めてから開発を進めるため、プロジェクト全体を通して必要な予算や人材が把握しやすい点も魅力です。また、要件定義が明確で詳細な仕様書があれば、開発者のスキルに差が生じにくく、人材を確保しやすい点もメリットといえるでしょう。
相性の良いプロジェクト
では、ウォーターフォール開発はどのようなプロジェクトと相性がいいのでしょうか。
ウォーターフォール開発は、上述したようなメリットもありますが、開発途中でシステム修正やアクシデントが発生すると上流工程に遡る必要があるため、工数が大幅に増加するといったデメリットがあります。そのため、「機能要件や仕様が明確で仕様変更を前提としないシステムの開発」に適しています。
また、完成品の品質を担保しやすいという特徴があるため、「クオリティを重視したい大規模なプロジェクト」にも適しています。
具体的には、
- 販売管理や会計など、企業の根幹となる業務を管理する「基幹システム」の開発
- コンピューターのOSなどの規模の大きい開発
などが挙げられます。
ウォーターフォール開発を支えるツールやテクノロジー
ウォーターフォール開発によるプロジェクトを円滑に進めるためには、「プロジェクト管理ツール」をうまく活用することがポイントです。プロジェクト管理ツールとは、プロジェクトに関わる様々な作業やスケジュールを管理できるツールのことで、主に次のような機能が備わっています。
タスク管理
タスク管理は、プロジェクトに関わる作業を管理する機能です。各作業メンバーに必要なタスクを割り当て、進捗状況を随時管理することができます。
ガントチャート
ガントチャートは、横長の棒グラフによって作業の進捗状況を管理できる機能です。全てのタスク、工数、スケジュールが視覚的に把握できるため、プロジェクトを効率的に漏れなく進めることができます。
チャット
チャットは、各作業メンバーやクライアントとテキストでコミュニケーションできる機能です。テキストでのやりとりだけでなく、画像や動画、テキストファイルなどを添付できるため、必要に応じて共有することができます。作業メンバーだけでなくクライアントとの連絡にも使えるので、円滑にプロジェクトを進められます。
公開されている成功事例
ウォーターフォール開発の成功事例として、NASAのスペースシャトルプロジェクトが挙げられます。そのプロジェクトでは、設計段階でしっかりとプロジェクトの計画が練られ、全体のフローを決定してから開発が進められました。コーディング段階では各機能がしっかりと開発され、リリース時には全く問題がない状態で製品が完成しました。
適用条件
ウォーターフォール開発は、各工程が滝のように流れてプロジェクトが進むため、いったん工程が進むと基本的に前の工程に戻るのは困難です。そのため、プロジェクトを成功させるために押さえておくべきポイントがあります。ここでは、ウォーターフォール開発を成功させるためのポイントを3つ紹介します。
1.要件定義を明確にする
開発の前段階である要件定義は、プロジェクトが成功するかどうかに大きく影響する重要な工程です。要件定義を明確にすることで、搭載する機能や開発方法が具体的に決まり、開発をスムーズに進めることができます。要件定義が抽象的なままだと、最適な開発方法を見いだせず、開発が思うように進まなかったり、開発途中で仕様変更したりする事態に陥る恐れがあります。
2.綿密なスケジュールを立てる
ウォーターフォール開発では、綿密なスケジュール管理が必要です。各工程が決められた順番で進んでいくため、1つの工程で遅れが生じると、その後の工程に割ける時間が短くなってしまいます。開発前にプロジェクトの全体スケジュールをしっかりと立て、各工程のスケジュールを守りながら進めましょう。
3.仕様変更を控える
システム開発中に仕様変更をすると、工数の増加、開発スケジュールの遅延、追加コストの発生など、開発会社にとって大きな負担となってしまいます。何度も仕様変更すると、最悪の場合プロジェクト自体が失敗になってしまうことも考えられます。途中で仕様変更しないで済むようにするためにも、やはり開発前の要件定義をどれだけしっかりと行うかが重要といえるでしょう。
開発体制
ウォーターフォール型開発は、一般的に以下の流れで進みます。
- 要件定義
- 外部設計(基本設計)
- 内部設計(詳細設計)
- 開発(プログラミング)
- 単体テスト
- 結合テスト(統合テスト)
- 総合テスト(システムテスト)
- 運用テスト
- リリース
それぞれ詳しく説明します。
1.要件定義
要件定義は、システムの機能や性能、制約条件、開発手法、運用方法、予算、開発期間など、プロジェクトに必要なすべての要件を決めていく工程です。要件定義は、プロジェクトが成功するために必要不可欠な工程であり、要件定義をしっかり行うか否かによってその後の工程の作業やスケジュールに大きな影響を与えます。
2.外部設計(基本設計)
外部設計は、要件定義で決定した機能や性能などを基に、システムの基本となる設計を行う工程です。例えば、操作画面や操作方法などのインターフェース、データ入出力方法、セキュリティや運用規定、システム開発のスケジュールや費用などを設計します。ウォーターフォール型開発において、一般的に外部設計までが上流工程とされます。
3.内部設計(詳細設計)
内部設計は、外部設計で決定した事項をさらに細分化して、プログラマやエンジニアが何をするのかを明確に設計書に落とし込んでいく工程です。具体的には、プログラムで取り扱うデータ、データ処理の流れ、アルゴリズムなどを決めていきます。
4.開発(プログラミング)
開発は、内部設計で決定した設計に基づいて、プログラミングする工程です。プログラミング言語やフレームワークを使用して、プログラムを実装していきます。
5.単体テスト
単体テストは、作成した各プログラムが、要件定義で決められた機能や性能を満たしているかを確認する工程です。テスト結果で不具合があった場合は修正して再テストを実施し、全てのテスト項目が終了したら次の工程に移ります。
6.結合テスト(統合テスト)
統合テストは、複数のプログラムを組み合わせた場合の動作を確認する工程です。画面遷移やデータの受け渡しなど、画面・プログラム・システム間の連携が正しく行われるかどうかを確認します。
7.総合テスト(システムテスト)
総合テストでは、ユーザーの環境と同じかそれと同等の環境において、システムが正常に稼働することを確認する工程です。そのほか、処理速度や障害発生時の処理、他システムと連携して正しく動作するかなども確認します。
8.運用テスト
運用テストでは、総合テストをクリアしたシステムを実際にユーザーに使用してもらい、要求機能を満たしているか、操作感はどうかなどを確認してもらう工程です。
9.リリース
すべての工程を終えた後、システムをリリースします。リリースした後は、システムが適切に運用されるよう保守を行うとともに、ユーザーからシステムの品質についてのフィードバックを集め、改善を検討していくことも必要です。
ウォーターフォール開発のプロジェクト管理方法
ウォーターフォール開発は各工程が直線的に進むため、予算や人材、スケジュールの管理が非常に重要です。プロジェクトを適切に管理するために、以下の2つの方法を有効に活用してみるのもいいでしょう。
プロジェクト管理ツールを使う
1つ目は、先に述べたようなプロジェクト管理ツールを使う方法です。プロジェクト管理ツールを使うことで、タスク管理、スケジュールや進捗の管理などを適切に行えるので、プロジェクトをスムーズに進められます。従来ではExcelを使った管理が主流でしたが、情報の更新が難しいというデメリットがありました。プロジェクト管理ツールであれば、難しい操作が不要で誰でも簡単に情報を更新できます。また、ツールによってはチャット機能が備わっているため、メンバー間での共有も容易に行うことができます。
外部の開発会社に委託する
2つ目は、外部の開発会社に委託する方法です。ウォーターフォール開発のプロセスに精通した外部の開発会社に委託することで、予算や人材、スケジュールの管理を最適化することが可能です。また、内部のチームは本業に集中して取り組めるため、生産性の向上も期待できるというメリットもあります。
アジャイル開発との比較
ウォーターフォール開発とよく比較される開発手法として、「アジャイル開発」があります。
アジャイル開発は、「計画→設計→実装→テスト」という開発工程を一部の機能ごとに小さいサイクルで繰り返す開発手法です。「不具合が発覚した際に戻る工数が多くなる」「仕様変更への対応が難しい」といったウォーターフォール型のデメリットを克服するためにアジャイル開発が誕生しました。
ウォーターフォール開発とアジャイル開発にはそれぞれメリット・デメリットがあり、どういったプロジェクトに向いているかも異なります。ここでは、両者の違いを比較します。取り組むプロジェクトに合わせて適切な開発手法を選択しましょう。
ウォーターフォール開発 | アジャイル開発 | |
開発期間 | 長期間 | 短期間 |
品質 | 一定水準に保てる | 状況によっては落ちやすい |
スケジュール管理 | しやすい | 難しい |
仕様変更 | 対応が難しい | 柔軟に対応できる |
テスト頻度 | 少ない | 多い |
開発者の作業範囲 | 工程ごとに対応 | 全工程の対応が必要 |
プロジェクトの規模 | 大規模開発向け | 比較的小規模向け |
まとめ
本記事では、プログラム開発手法の一つであるウォーターフォール開発の基本について、プロジェクト管理方法含めて解説しました。ウォーターフォール開発は、以前から広く活用されており、システム開発に欠かせない手法です。ただし、どのようなプロジェクトにも最適な手法というわけではありません。プロジェクトに合わせて、最適な開発モデルを選択することが重要です。