開発手法で「ウォーターフォール型開発」というものがあります。
「ウォーターフォール/Water fall/水が落ちる、滝」という意味ですが、どのような開発手法なのでしょうか。
今回はそんなウォーターフォール型開発についての基礎知識を紹介します。
ウォーターフォールとは
「ウォーターフォール」という言葉をご存知ですか? ウォーターフォール型開発は
- 要求定義
- 外部設計
- 内部設計
- 開発
- テスト
- 運用
という6つの開発工程から成り立っているソフトウェアやシステム開発のフレームワークです。
上流から下流の工程へ一気に進んでいくことから、ウォーターフォール(滝)と呼ばれています。
「聞いたことはあるけど、どんな意味かわからない…」という方のために、今回はウォーターフォールというフレームワークの詳しい開発工程やメリット、具体的に活用するシーンについてご紹介いたします。
ウォーターフォール型の開発工程6つ
ウォーターフォール型開発は、 先に挙げた6つの開発工程という6つの開発工程から成り立っています。ウォーターフォール型開発のメリットや活用例を紹介する前に、この6つの基本的な工程をご説明します。
開発工程1:要求定義
ウォーターフォール型開発では、取引先が開発するシステムやサービス、その仕様や要件を詳しく共有する必要があります。そして、利用者がシステムになにを求めているかを明確にする要求定義の作業を進めていきます。
ウォーターフォール型開発でこれを最初に行わないと、次の段階に進むことはできません。
開発工程2:外部設計
要求定義が終わると、外部設計のフェーズに移ります。
外部設計は、UI(ユーザーインターフェース)など利用者の目に触れる、実際に扱う部分を設計していく作業です。基本設計とも言われ、ここまでが上流工程とされています。
具体的には、操作画面やどう操作するかの説明、利用規約や規定、費用面など利用者にとって必要な情報や利用者が関わる部分を設計していきます。
開発工程3:内部設計
次に外部設計にもとづいて、内部設計を行っていきます。システムやソフトウェア内部の機能やデータ、動作面など利用者が目にすることのないプログラム面の設計をしていくのが、内部設計の役割です。
ウォーターフォール型開発やアジャイル開発などの手法にかかわらず、必ず行わなければならないフェーズです。
開発工程4:開発
内部設計と外部設計が終了すれば、いよいよ開発の段階に移ります。例えばアプリケーションなら、設計はSE(システムエンジニア)が行い、開発はプログラマーが行うのが一般的です。
設計された通りに、実際にシステムやサービスを形作っていくのが開発の役割になります。
開発工程5:テスト
開発まで済ませたら、最後にテストが待っています。
実際に運用する前に、設計・開発されたシステムやソフトウェアがちゃんと機能するか確認していきます。アジャイル型開発ではテストまで、もしくは次の運用までを繰り返えし行うことで高速の改善を実現していますが、ウォーターフォール型開発ではテストも綿密に行うことで後戻りしなくて良い工程を実現します。
ただし、問題が発生した場合は後半であればあるほどコストがかさみやすい進行方法になっているので、その点では注意が必要です。
開発工程6:運用
すべての準備が完了すると、いよいよローンチして運用することができます。
ウォーターフォール型開発では、運用してから細かな修正やアップデートを行う可能性はあっても、大きく資源投下して改善を積み重ねることはアジャイル型開発よりは少ないです。
ウォーターフォール型開発のメリット6つ
先ほどまでは、ウォーターフォール型の開発工程に関して、紹介していきました。様々な行為邸があり、それぞれが大切な工程であることが理解できたかと思います。では、ウォーターフォール型開発のメリットについて6つ紹介していきます。
開発のメリット1:つくるものが明確
ウォーターフォール型開発では、一般的に完成イメージをチーム全体へ共有した上で進んでいきます。
つくるものが明確になることで進み方に迷いが生じにくかったり、たびたび完成イメージを確認したり議論したりする必要性が減っていきます。
開発のメリット2:進捗状況が明確
ウォーターフォール型開発では、一工程が終了する毎に進捗や結果を整理していくので、工程毎の管理がしやすい手法だと言えます。どんな立場・チームの人でも理解しやすくなっているのが特徴です。
開発のメリット3:品質の担保がしやすい
ウォーターフォール型開発では、次の工程に進むまでの目標や基準を明確にするので、品質の担保がしやすいです。
アジャイル型開発では何度も前の工程に戻ったり、それによって計画が遅れて品質の一部が悪くなることもあります。そういう点で、ウォーターフォール型開発は大きな利点を持っていると言えます。
開発のメリット4:無駄な時間を使わない
ウォーターフォール型開発では、初期段階での検証やこまめなアップデートを行わない分、無駄な時間を使うことを避けることができます。無駄な時間を使ってしまうことは、システムのバグを生んだり、品質にも関わってくるので、大きなメリットです。
開発のメリット5:スケジュール管理がしやすい
ウォーターフォール型開発においては、最初の段階で要求定義から運用までのスケジュールを定めるのが一般的なプロセスです。そのため、運用から逆算して各工程のスケジュールを立てることができます。
計画性という部分ではアジャイル開発より優れているフレームワーク(手法)です。
開発のメリット6:さまざまな種類の開発に応用できる
ウォーターフォール型開発は、最も伝統的で基本的なシステム開発・ソフトウェア工学の手法です。基本的にどんな開発にも対応できるよう、個別性や具体性を排除した仕組みになっているので、さまざまな種類の開発に応用できます。
逆に言えば、特殊なシステムや早期で開発したいサービスがある場合は、向いていない場合もあります。自分やチーム、会社の状況にあわせてウォーターフォール型開発を利用するか考えられると良いのではないでしょうか。
ウォーターフォール型開発の活用シーン3つ
ウォーターフォール型開発が実際に活用されているシーンを3つに厳選してご紹介していきます。
これを通して、ウォーターフォール型開発がどんな場面に適しているか、整理しながら考えていきましょう。また、それと同時にウォーターフォール型開発に適していないシーンも見えてくることかと思います
活用シーン1:ERPシステムの導入
ERPはEnterprise Resource Planningの略で、企業経営におけるヒト・モノ・カネ・情報・時間といった資源を分配して管理する計画のことを示しています。ERPを導入する時は、会社規模にもよりますが会社すべてのプロジェクトや部署に関わってくるので、入念な準備が必要です。
これが甘くなると、各部署の動き方や上司と部下の関係などにズレが生まれていき、停滞する要因になります。アジャイル型という選択肢もありますが、大きな変更が頻繁には生じて欲しくないときに、ウォーターフォール型で導入することが多いです。
活用シーン2:大規模なソフトウェア開発
ウォーターフォール型開発は、大規模なソフトウェア開発にも適しています。スケジュール管理や進捗管理がしやすかったり、後戻りせずに進めることから、大人数や長期間といった大きな資源投下を伴う開発に向いているのです。
活用シーン3:オペレーションシステムの新バージョンの開発
他にも、オペレーションシステムの新バージョンの開発にも向いていることがあります。これは、こまめに仮説を立てて修正していくよりは、課題や理想像が明確な状態からスタートするためです。
逆に、課題が曖昧なところからスタートする場合は、アジャイル開発の方が良い場合もあります。
目的や状況に応じて、ウォーターフォール型開発を用いるか、他の手法を用いるか、もしくはいろんな手法を組み合わせていくか、というように選択していきましょう。
ウォーターフォール型開発とアジャイル型開発のどちらが良い?
近年はウォーターフォール型開発と比較されてアジャイル型開発が注目されるようになってきました。インターネットの普及やコミュニケーションスピードの高速化などによって、じっくり正確に進めるより、早く進んでいけるアジャイル型開発の手法が人気になっているようです。
しかし、ウォーターフォール型開発とアジャイル型開発のどちらにもメリット・デメリットや特徴があり、その是非を一言で判断することはできません。
本記事ではウォーターフォール型開発についてご紹介しましたが、プロジェクトに応じたフレームワークを選んでいきましょう。