「ウォーターフォール」という言葉を聞いたことがあるでしょうか?今後、SEやプログラマーとして活躍したいと思う方には、避けて通ることは出来ない程、重要なアプローチモデルとなります。
今回は、ウォーターフォールについて詳細に解説します。
この記事でわかること
- ウォーターフォール型開発とはなにか?
- ウォーターフォール型開発の詳細
- ウォーターフォール型開発の利点はなにか?
- ウォーターフォール型開発の欠点はなにか?
ウォーターフォール型開発とは?
「ウォーターフォール型開発(Waterfall Model)」は、ソフトウェ開発における、最も有名な開発手法です。ウォーターフォールとは、「滝」の意味であり、ソフトウェア開発の工程が、さながら上から下へ段々に水が進んでいくような姿から名付けられています。
ウォーターフォールは、ソフトウェアの設計から開発・顧客への納品までに至る工程を、以下のように分割し、管理します。
ウォーターフォール型開発の工程
- 上流工程
- 要件定義:業務の分割と分担、業務内容、実施方法のイメージ確認
- 基本設計:事務手順の設計、人と機械の分担検討、外部使用の検討
- 下流工程
- 詳細設計:内部仕様の検討、危機感の分担の検討
- 実装:プログラム開発と単体テストの実施
- テスト:プログラム間(機器間)連携を検証するテストの実施
- メンテナンス:納品したプログラムを顧客が効率よく使えるようサポートする
この中でも要件定義や基本設計までを「上流工程」といい、残りの詳細設計、プログラミングやテストを「下流工程」といいます。
要件定義とは?
ウォーターフォールでは、まず上流工程の作業から行います。その中でも、最初に行うのが「要件定義」です。要件定義では、以下の3つの目的を遂行します。
要件定義の目的
- 顧客の求めるシステムを定義する
- 開発の目的を定める
- 顧客に同意を得る
これらの目的遂行のために作成する「要件定義書」は、「顧客に同意していただく仕様書」となります。要件定義書について詳細に知りたい方は、以下の記事をご覧ください。
基本設計とは?
「基本設計」とは、ウォーターフォール型開発において要件定義の後に行う設計作業であり、主にSEが行います。この基本設計・外部設計までのフェーズを「上流工程」と呼びます。
「下流工程」との違いは、成果物の内容が「発注者側(指示者)」の目線であるか否かの違いです。つまり「上流工程」における成果物は「発注者側」の意見を元に、仕様を書面化したものとなります。
この設計作業では、主に「システムの概要的な設計」を行うため、「概要設計」と呼ばれることもあります。同様に他のシステムとデータの受け渡しが必要な場合の設計や、利用者の操作などに応じた挙動などを設計するため「外部設計」と呼ばれることもあります。
詳細設計とは?
ウォーターフォール型開発において、詳細設計・内部設計からは「下流工程」と呼ばれます。「詳細設計」とはウォーターフォール型開発において、基本設計の次に行う設計作業です。
「下流工程」からは「発注者側(指示者)」の意見は入りません。逆に、この段階で「発注者側(指示者)」の意見が入る様では、いつまでたっても仕様が固まらずプロジェクトは崩壊します。
主にSEが主導しますが、場合によっては一部にプログラマーを迎えて、共同で設計作業を行うこともあります。詳細設計では、外部設計で定義した「利用者の操作に応じた設計」をより詳細に定義したり、外部とやり取りを行うデータの詳細を設計したりもします。
詳細設計ではシステム内部の処理を中心に設計を行うため「内部設計」とも呼ばれます。
実装とは?
実際に仕様書に基づいて、プログラマーがプログラミングをおこないます。
基本的にPG(プログラマー)主導でのプログラミングフェーズになりますが、会社によっては、システムエンジニアも加わりプログラミングすることもあります。
テストとは?
テストとは文字通り、作ったシステムのテストをおこなうことです。そのシステムに不具合や「バグ」と呼ばれる問題がないかや、システムに欠けているものが無いかなど入念にチェックします。
システム開発をする以上は不具合・バグはつきものなので、テストフェーズ次第でクライアントに納品するものの質が変わってきます。テストは概ね以下の3つに別れ、PGやテスター、SEに加えて、顧客の担当者がそれぞれ行います。
新米システムエンジニアの方はこのフェーズに関わることが多いです。
実装フェーズの内訳
- 単体テスト:PG又はテスターが、個々のプログラムの仕様や内部設計に基づき実施
- 結合テスト:PG又はテスターや、一部をSEが内部設計や外部設計に基づき実施
- 総合テスト:SEや顧客の担当者が、外部設計や要件定義に基づき実施
メンテナンス
ウォーターフォール型開発における「メンテナンス」とは「保守運用業務」のことです。
すべての設計・開発(プログラミング)・テストを終えるとシステムは顧客へ納品されます。しかしシステムが納品されたからといって、開発が即座に停止するわけでは有りません。
実際には、メンテナンスは数年単位・数十年単位で行われることが通例です。サポートは通常は、別チーム(別部署)が担当しますが、SEやPGが担当することもあります。
このとき必要となるのがこれまで解説してきた仕様書(設計書)です。正しい仕様書であれば、メンテナンスに役立ちます。
利点と欠点
ウォーターフォールには多くの利点はありますが、最も大きな利点は「構造がシンプルで簡単」という点です。そのため殆どのSEやPGが改めて教育する必要がないくらいに浸透しており、スムーズに開発を行えます。そして初めて覚えようとする方にも、比較的簡単に覚えられます。
対して欠点としては「不具合が発見されると、修正のための後戻りが難しいこと」です。
なぜなら、「ウォーターフォール型開発は、各工程が正しいことを前提に進める開発手法」だからです。そのため不具合が前工程で見つかった場合、修正にスケジュールを要したり、余計なコストが掛かります。この溝が広ければ広いほど、重大になってしまいます。
したがって、ウォーターフォール型開発では、「十分な設計を心がけ、顧客と密に連携すること」が最も大切といえます。
まとめ
ウォーターフォールは開発の基本ですが、失敗もつきものです。ウォーターフォール型開発で失敗しないためには、「十分な設計を心がけ、顧客と密に連携すること」です。
ウォーターフォール型開発まとめ
- システム開発の工程を1つ1つ区切って管理する開発手法
- 上流工程
- 要件定義:業務の分割と分担、業務内容、実施方法のイメージ確認
- 基本設計:事務手順の設計、人と機械の分担検討、外部使用の検討
- 下流工程
- 詳細設計:内部仕様の検討、危機感の分担の検討
- 実装:プログラム開発と単体テストの実施
- テスト:プログラム間(機器間)連携を検証するテストの実施
- メンテナンス:納品したプログラムを顧客が効率よく使えるようサポートする
- ウォーターフォールの利点:構造がシンプルで分かりやすい
- ウォーターフォールの欠点:前工程が正しいことが前提であるため、不具合発見時の後戻りが難しい
- 上流工程