たとえるなら
注文住宅の建築です。間取りを決め(要件定義)、設計図を引き(設計)、工事をして(開発)、完成検査をする(テスト)。基礎工事が終わってから「やっぱり3階建てに」とは言えないように、後戻りしない前提で、最初に全部を決めてから進みます。
もう少しくわしく
ウォーターフォール開発は、開発の工程を「要件定義→設計→開発(実装)→テスト→リリース」と順番に並べ、上から下へ一方通行で進める方式です。滝(waterfall)の水が逆流しないように、前の工程が完了してから次へ進み、原則として後戻りしません。それぞれの工程の終わりに文書や成果物をきちんと確認してから先へ進むのが特徴です。
工程ごとに成果物(ドキュメント)を作るのも大きな特徴です。要件定義では「何を作るか」をまとめた要件定義書、設計では画面や機能の仕様書、テストではテスト項目表と結果の記録。次の工程を担当する人はこの文書を頼りに作業するため、大人数でも分担して進められます。
この方式の強みは計画の立てやすさです。最初に全体像を固めるので、完成時期や費用の見通しを立てやすく、多くの会社や人が関わる大規模開発でも分担しやすくなります。銀行のシステムや官公庁のシステムなど、途中で要件が変わりにくく、失敗が許されない大型プロジェクトで長く使われてきました。
テストの組み立て方にはV字モデルという考え方が使われます。要件定義に対しては受け入れテスト、基本設計に対しては結合テスト、詳細設計に対しては単体テスト——というように、上流の各工程と、それを確かめるテストが対になっているという整理です。図にするとVの字に見えることから、この名前がついています。
弱点は変化に弱いことです。最後のテスト段階で問題や認識ずれが見つかると、前の工程まで戻る大きな手戻りになります。しかも手戻りの費用は、後の工程で見つかるほど跳ね上がります。要件定義の段階なら文書を1行直せば済んだことが、テスト段階では設計書もプログラムもテスト項目も全部やり直しになるためです。
だから現場では、上流工程のレビューに時間をかけます。「動くものを見るまで気づけないことがある」という弱点を補うために、画面のラフ絵(モックアップ)を早い段階で見せて確認を取る、といった工夫もよく行われます。実際には完全な一方通行ではなく、必要な後戻りは受け入れつつ、それを最小にする進め方と考えるほうが実態に近いです。
「作っている途中で要望が変わる」ことが当たり前のWebサービス開発では、短いサイクルを繰り返すアジャイル開発が選ばれることが多くなりました。ただし、どちらが優れているかではなくプロジェクトの性質による使い分けです。作るものが決まっていて関係者が多いならウォーターフォール、市場の反応を見ながら形を変えていくならアジャイル、という判断になります。
現場での使われ方
「このプロジェクトはウォーターフォールで進めます」
最初に要件と設計を固め、工程を順番に進める方式でやります、という開発方針の宣言です。
「いま設計フェーズなので、実装はまだ先です」
工程を順に進めている途中で、現在は設計段階。フェーズは工程の区切りを指す言葉です。
「設計レビューが終わらないと実装に入れません」
前の工程の完了を確認してから次へ進む、というこの方式の原則をそのまま表した一言です。
「テストで見つかった仕様漏れなので、手戻りが大きいです」
後の工程で問題が見つかったときの報告。上流まで戻る必要があり、費用も期間も膨らみます。
よくある質問
ウォーターフォールは古いやり方なのですか?
古いというより「向き不向きがある方式」です。要件が最初から明確で変わりにくい大規模システムでは今も現役で使われています。一方、変化の速いWebサービスではアジャイル開発が主流になっています。
V字モデルとは何ですか?
各工程と、それを確かめるテストを対にして整理した考え方です。要件定義には受け入れテスト、基本設計には結合テスト、詳細設計には単体テストが対応します。図にするとVの字に見えるのでこう呼ばれます。何をどこで確かめるかがはっきりする利点があります。
なぜ後戻りは避けられるのですか?
避けたいのは、費用が跳ね上がるからです。要件定義の段階なら文書を直すだけで済んだ変更が、テスト段階では設計書・プログラム・テスト項目のすべてをやり直すことになります。だから上流の確認に時間をかけます。
本当に一度も後戻りしないのですか?
現実にはします。完全に後戻りしない開発はほとんどなく、必要な修正は受け入れつつ、その量を最小にする進め方だと考えたほうが実態に近いです。原則として後戻りしない、というのは目指す形の話です。
アジャイルとどちらを選べばいいですか?
作るものが最初から決まっていて、関係者が多く、途中で仕様が変わりにくいならウォーターフォールが向きます。市場の反応を見ながら形を変えていくならアジャイルです。実際には両方を混ぜた進め方もよく取られます。