「ウォーターフォールvsアジャイル」みたいな話がいまだにされることが多いようなので、まずはその成り立ちに遡ってウォーターフォールとアジャイルについて振り返ってみましょう
ウォーターフォール型開発とは
1960年代後半に発表されたWinston Royceさんの論文が起源と言われています
元々は建築業界の手法をソフトウェア開発へ適用したら…という話でした
ウォーターフォール型開発で簡単に調べてみると、要件定義、設計、実装、テスト、のように滝が流れるように進んでいく…と紹介されています
アジャイル型開発とは
2001年に発表されたアジャイルソフトウェア開発宣言に端を発した開発手法です
宣言にある4つの価値と12の原則を尊重したあらゆるプラクティスのこともアジャイル型開発の一部として紹介されることもあります
アジャイル型開発で簡単に調べてみると、要件定義、設計、実装、テスト、を小さい単位で繰り返していくことで進んでいく…と紹介されています
よくある嘘
先程、このように記載しました
ウォーターフォール型開発で簡単に調べてみると、要件定義、設計、実装、テスト、のように滝が流れるように進んでいく…と紹介されています
アジャイル型開発で簡単に調べてみると、要件定義、設計、実装、テスト、を小さい単位で繰り返していくことで進んでいく…と紹介されています
簡単に言うとこれらは嘘です
どこが嘘なのか、見ていきましょう
ウォーターフォール型開発の嘘とは
Winston Royceさんの論文が起源とされていますが、その論文ではウォーターフォール型開発(この論文で命名された訳ではないですが…)ではうまく行かないだろう、と紹介されています
何故かというと、テストを最後にまとめて行おうとすると設計の間違いがあったときに手戻りをしなければなりません
問題なのは、設計、実装をしてからミスと気づくまでの時間が数か月に及ぶことがある、ということです
つまり、フィードバックを受けるのが遅すぎるため気づいた時には既に手遅れになっており、修正にかなりのコストが掛かってしまう、ということです
このような最後にまとめて行うテストは「ビッグバンテスト」と呼ばれています
(ビッグバンを起こすレベルの奇跡が起こらなければ通過させることが不可能なテストだから)
ここまで読むとわかるかもしれませんが、ウォーターフォール型開発は誰もおすすめしていません
そもそも叩かれるための藁人形として紹介された手法なので…
少なくとも、ウォーターフォール型開発というのはソフトウェア開発業界では絶対にNGな手法です
勿論、ウォーターフォール型開発を進化させようとする人はいないため、発表された1960年代後半から全く進化していません
アジャイル型開発の嘘とは
アジャイルソフトウェア開発宣言では細かいやり方は全く明示されていません
何故ならば、常により良いやり方を探すことこそがアジャイルだからです
ですが、優れたプラクティスとして(アジャイルの一部として)紹介されるものはいくつもあります
XPやTDDをはじめとするこれらのプラクティスはここ20年~30年の内に考案された数々の知恵の結晶です
というか、ソフトウェア開発業界における大革命の集合こそがアジャイルです
先程の、工程を繰り返す~というのとは根本となる発想が全然違います
どっちが良いか
アジャイルソフトウェア開発宣言から始まった大革命の数々はとてつもないものでした
ウォーターフォール型開発とアジャイル型開発というのは、飛脚とテレビ電話くらい違うものです
最早、比べるに値しないと言っても言い過ぎではないレベルですね
この図はクリーンアジャイルでサークルオブライフと呼ばれているものです
(元々はロン・ジェフリーズさんがXPのプラクティスを紹介したものです)
アジャイルソフトウェア開発宣言で言われている4つの価値と12の原則を守り、先人の知恵を拝借することで、大革命の恩恵を受けることができます
何故ウォーターフォール型開発がまかり通っているのか
ソフトウェア開発を齧ったことがある人であれば、ウォーターフォール型開発がどれだけ欠点まみれの手法かは知っています
それなのにまるで当たり前のようにウォーターフォール型開発が蔓延っています
良く言われているのが、いまいちソフトウェア開発を知らない人が経営陣にウォーターフォール型開発が最も優れた手法のように紹介し、それを信じ込んでしまう、というパターンです
一種のバズワードになってしまっている訳です
しかし、専門職でもない人が専門職っぽい人に騙されてしまうのは果たして悪いことでしょうか
本当に悪いのは、知識の無い専門職気取りの人だと僕は考えています
そのような人にならないために本を読みましょう
まとめ
まずは優れたプラクティスを採用しましょう
優れたプラクティスは調べればいくらでも出てきます
そして、テストコードを書きましょう
テストコードこそが大革命の中心です