あなたは、ウォーターフォール開発という単語は聞いたことがあるが、具体的にどういう意味なのか、詳しく知りたいと考えているところではないでしょうか?
そんなウォーターフォール開発について、良く比較されるアジャイル開発との違いを含めて本記事では紹介したいと思います。昨今ではアジャイル開発が主流となってきていますが、ウォーターフォール開発も根絶することはないでしょう。ウォーターフォール開発なりのメリットがあるためです。
本記事はIT会社として設立して、25年経つ会社に所属している筆者がこれまでの経験を生かして執筆しております。本記事を読んでいただき、ウォーターフォール開発の理解に少しでもお役に立てたら幸甚です。
目次
1. ウォーターフォール開発とは?
水が落下するかのように開発を進めていくので、ウォーターフォール開発と呼ばれています。そのまんまです。そんなウォーターフォール開発の概要を1章では紹介します。
1-1. ウォーターフォール開発は、一気通貫で開発すること
ウォーターフォール開発とは、システム開発のサイクルである、「企画」→「設計」→「実装」→「テスト」を一気通貫で開発することを指しています。
システム開発は様々な機能の集合体からなっています。その様々な機能をフェーズ単位で組み立てて開発を進めていきます。事前に仕様要件がガッチリと決まっている開発案件であればウォーターフォール開発は最適でしょう。というのも、ある程度品質を担保することができるためです。
そしてよく出てくるのがV字モデルです。V字モデルとは、システムの開発工程とテスト工程の相関図を表したときにV字で表現できるためです。ウォーターフォール開発はすべての設計が終了してからテストを行うため、どのテストをすれば良いのか明確に分かりやすく、管理がしやすいです。
1-2. アジャイル開発との違い
一方で、良く比較されるのがアジャイル開発です。アジャイル開発とは、「企画」→「設計」→「実装」→「テスト」を機能単位で行うことです。
例えば、あるシステムが機能A、機能B、機能C、機能Dの集合体から成る場合、以下のような手順で開発を進めることになります。
機能単位で実装していくので、後から変更や追加がウォーターフォール開発に比べてやりやすいです。機能ごとに開発するので、チームビルディングが大変だったり、案件全体のスケジュール管理がしづらいのが難点になります。
しかし、近年ではアジャイル開発を採用されるケースが多いです。
その他の要素についても比較してみましょう。
開発手法 | 費用 | 納期 | 最低限の品質 | 仕様変更 |
アジャイル開発 | ▲ | ▲ | ▲ | 〇 |
ウォーターフォール開発 | ▲ | 〇 | 〇 | × |
<費用>
アジャイル開発は、明確な使用を決めずにスタートするので、繰り返し繰り返しでコストが嵩む可能性があります。
ウォーターフォール開発は、エラー無く終われば予定通りの予算で完結できますが、エラーが発生したときにその原因の特定に時間が掛かります。そこで発生する人件費に注意しましょう。
<納期>
アジャイル開発は、全体のスケジュール管理が難しいです。機能別のスケジュール管理はそう難しくありませんが、全体で見たときに気づいたら遅れていた…ということもあり得ます。
<品質>
ウォーターフォール開発は予め仕様がある程度固まっているので、一定水準の品質(仕様で定められた水準)は保てるはずです。一方で、アジャイル開発は仕様がガチガチに固定されているわけではないので、品質にある程度バラツキが生じがちです。
<仕様変更>
仕様変更できるのが、アジャイル開発の何よりもメリットです。ウォーターフォール開発だと、途中で仕様変更となると最悪な場合、振り出しに戻ります。アジャイル開発だと、少し手前に戻れば対応が可能になります。
2. ウォーターフォール開発のメリットとデメリット
2章ではウォーターフォール開発のメリットとデメリットを紹介します。
2-1. ウォーターフォール開発のメリット
いつどこで何人必要か管理しやすい特徴があります。ある程度、事前に仕様を固めるので全体スケジュール感が見やすく、予算・納期の管理がしやすいのがメリットになるでしょう。また、品質をある程度担保できるので、発注者側もコケるリスクは少なくすることができます。
2-2. ウォーターフォール開発のデメリット
一度決めた仕様を開発スタートしてから変更するのが困難です。できないことはないですが、不必要なコストと時間が想定以上に掛かることが想像できます。柔軟な対応が難しく、場合によっては開発が振り出しに戻ることもあります。
3. ウォーターフォール開発の適正があるシステム開発
3章ではどのような類のシステム開発がウォーターフォール開発にマッチするか紹介いたします。
3-1. 大規模システム開発
大規模なシステムほどいろんな人が関わり、スケジュール管理・人材管理が難しくなります。そんなシステム開発であればアジャイル開発よりはウォーターフォール開発の方が魅力的もしれません。あとは、仕様が変更にならないことを祈りましょう。
3-2. 品質を担保すべき開発
システム開発の中には障害の発生が許されないシステムがあります。主にインフラ関係で、銀行のATMや交通機関システム…このようなシステムは最低限の品質の担保が求められます。このようなシステムであればウォーターフォール開発を取り入れましょう。
3-3. 予め仕様等がガッチリ決まっている
これまで何度か提言してきましたが、仕様が決まっている案件であればアジャイル開発ではなくウォーターフォール開発を採用するべきでしょう。
4. ウォーターフォール開発を進めるためにやるべきこと
ウォーターフォール開発についてある程度理解が深まりましたでしょうか。4章では実際にウォーターフォール開発をどのように進めたら良いか3つの段階に分けて解説していきます。
4-1. 開発前にやるべきこと
<要件定義>
最上流工程です。クライアントに開発して欲しい機能や性能を明確にしてもらい、受注者はヒアリングしたことをドキュメント化して、クライアントに認識齟齬がないか確認をしてドキュメントの精度を上げていくことになります。
ウォーターフォール開発で最も重要なフェーズになります。ここが曖昧なママ進めると、後々苦労するかもしれません。
<基本設計>
要件定義書ができたら、どのような機能を実装しないといけないか、クライアントにヒアリングして基本設計書を作成します。どのようなハードウェアやミドルウェアを組み合わせて機能が実装できるか明確にしていきます。
<詳細設計>
詳細設計は、外部というよりは内部用になります。開発者に向けて詳細設計書を作成して、プログラマー目線でドキュメント化していきます。開発者はこれを見ながら開発を進めていくことになります。
4-2. 開発して、テストでやるべきこと
<単体テスト>
プログラミングして完成した機能がエラー無く動作するかテストするフェーズになります。万が一、エラーが発生した場合は、詳細設計書に記載されているフローの通り解決していくことになります。簡単なテストであれば、自動化すると効率的です。
<結合テスト>
単体テストをクリアしたら、続いて結合テストを実施します。機能同士を連結させ、エラー無く動作するかテストするフェーズになります。
<システムテスト(総合テスト)>
結合テストをクリアしたら、続いてシステムテスト(総合テスト)を実施します。全体を連結させて、エラー無く動作するかテストするフェーズになります。万が一、エラーが発生した場合は、前の結合テストのフェーズに戻り、エラー箇所を確認します。
<受入テスト(運用テスト)>
総合テストをクリアしたら、続いて受入テスト(運用テスト)を実施します。本番環境下でテストするフェーズになります。ここで仕様変更が生じたらエンジニアの人たちは泡を吹くので気を付けましょう。万が一、エラーが発生した場合は、前のシステムテストのフェーズに戻り、エラー箇所を確認します。
これらのテストを無事にすべて通過して、ようやくリリースにたどり着きます。
4-3. 開発後にやるべきこと
<保守・運用>
開発後はシステムの運用・保守を行う必要があります。
実際にシステムを使用し、不具合があった場合は速やかに修正を行います。
またクライアントより新しい機能要求が挙がる可能性もあります。その場合は追加開発などを行ってシステム保守を行います。
5. ウォーターフォール開発のよくある質問
Q1. ウォーターフォール開発は時代遅れ?
ウォーターフォール開発は100年以上前からある考え方とされています。その後、アジャイル開発等…様々な開発手法が誕生してきて、ウォーターフォール開発は時代遅れなんじゃないか?と言われるようになってきました。今でもウォーターフォール開発で開発するケースは有ります。ただ、アジャイル開発の方が割合は多くなってきています。ウォーターフォール開発のメリットはあるので、プロジェクトの特性に合わせて開発手法を検討してみてはいかがでしょうか。
Q2. ウォーターフォール開発×アジャイル開発のハイブリッド開発はどうなの?
それぞれの良いところ取りをして開発することを企む人もいるでしょう。「実装」をアジャイル開発、「設計」→「テスト」をウォーターフォール開発といった開発手法は可能です(その逆も然り)。ただ、失敗するリスクが格段に上がるので慣れるまでは苦労するかもしれません。
6.まとめ
ウォーターフォール開発の概要から、実際にウォーターフォール開発を取り組むために必要なことを紹介してきました。ウォーターフォール開発は時代遅れだと言われることもありますが、特に大規模な開発では今でも使われていることがあります。予め仕様が固まっていれば、アジャイル開発よりも時間も掛からず、一定の品質は担保されるためです。時代と共に開発しながら仕様を決めていくケースが多くなっただけであり、ウォーターフォール開発そのものが無くなることはないでしょう。
この記事ではウォーターフォール開発の紹介をしてきましたが、弊社ではアジャイル開発をしています。アジャイル開発×オフショア開発について、詳しく知りたい方はどんな些細なことでもお問い合わせください。いつでもご連絡お待ちしております。