2022年11月14日
|2022年11月25日
この記事の目次
日本のIT業界では多くの大規模開発がウォーターフォール開発によって行われてきました。しかし、最近はアジャイル開発を採用して開発をしている企業も増え、ウォーターフォール開発は「時代遅れ」というイメージもあるようです。
この記事では、ウォーターフォール開発について、手順やメリットといった基礎知識を解説したうえで、アジャイル開発との違いを解説します。ウォーターフォール開発とアジャイル開発のそれぞれに違ったメリットがありますので、なぜウォーターフォール開発に「古い」というイメージがついてしまったのかも合わせて検証してみましょう。
「ウォーターフォール(Waterfall)」の日本語訳は「滝」です。
ウォーターフォール開発の大きな特徴は、システム開発の工程が分担されており、順番に進んでいくことにあります。システムの開発工程が上流工程から下流工程へと、後戻りすることなく滝のように進んでいくため、この名前が付けられました。それぞれの工程について概要を見てみましょう。
開発スタートの前に、システムエンジニアがクライアントにヒアリング調査をして、システムに実装してほしい機能や性能を擦り合わせ、要件定義書にまとめます。クライアントと受注側に認識やずれが生じないよう、要件定義書には、開発の目的・開発期間・性能・導入方法や運用方法などを明記します。
要件定義は、あくまでシステムに持たせる機能や目的といった要件をまとめたものであり、その要件をどのようにシステムで実現させるかは、設計の工程により決めていきます。設計では、クライアント向けと開発担当者向けの設計書を、各機能ごとに作成するのが一般的です。
基本設計では、要件定義で決定した内容をもとに、画面や操作方法、データ出力といったシステムの概要やユーザから見えるインターフェース部分を設計します。完成した基本設計はクライアントも確認する場合が多いため、専門用語や複雑なデータはあまり記載されません。
基本設計書の内容が確定したら、ユーザーから見えにくいシステム内部の動作などを設計し、実際にプログラムができる内容まで細かく落とし込んでいきます。開発工程の指示書としても使用されるものであり、開発者や内部者のための専門的な資料を盛り込みながら作成していきます。システムの品質だけでなく、プログラミングやメンテナンスのしやすさにも影響が出る重要な工程です。
設計ができれば、いよいよ開発工程です。目的の機能をシステムに実装するため、プログラマーがプログラミング言語を使って、コンピュータへ必要な指示をプログラムしていきます。いくつものプログラムが組み合わさることで、複雑な機能を持つシステムが構築されます。開発は、一人のプログラマーが行うわけではなく、チームで行うことが一般的です。
ウォーターフォール開発では、要件定義や設計の工程を上流工程といい、開発にかかわる工程以降を下流工程といいます。単に工程が分かれているだけでなく、担当する職種も分かれており、一般的には上流工程をシステムエンジニア、下流工程をプログラマーが担当します。案件や企業規模によっては、詳細設計にプログラマーが携わったり、開発工程にシステムエンジニアが携わったりすることもあります。
プログラムが正しく動作するかテストを行います。
単体や結合した状態でテストを実施し、エラーが発生しないよう確認することが目的で、テストには次のようなものがあります。
テストに問題がなければ本番環境にリリースします。旧システムからの移行の場合は、一時的にシステムが使用できなくなるため、システムを停止できる時間帯を選ぶなど、環境に配慮しながら慎重に移行を行わなければなりません。
リリース後も、トラブル対処や改修・アップデートを必要に応じて実施し、システムが安定稼働できるよう運用・保守を行っていきます。
ウォーターフォール開発には、開発工程ごとに作業が分担されているからこそのメリットがあります。
ウォーターフォール開発のメリットについて詳しくみてみましょう。
ウォーターフォール開発は各工程で期間を設定してプロジェクトを進めるので、納期から逆算し、スケジュールを立てやすい点が大きなメリットです。
また、開発状況の進捗も把握しやすいため、チームリーダーがトラブル発生時に迅速に対応できるという利点があります。
スタートの段階から、それぞれの工程で「いつまでに」「なにをするのか」という具体的な計画を立てるため、人員確保の予測を立てやすいというメリットがあります。また、次の工程へ引継ぎするために情報を常に整理しておくことが重要な開発手法であり、人員に不測の事態があったときの引き継ぎもスムーズに行うことができます。
ウォーターフォール開発では、要件定義の段階で事前にクライアントと充分な打合せをして開発計画を立て、各行程で作業分担をして開発を始めます。各工程ごとにテストをして、完成品をチェックするため、システム完成後の安定性に定評があります。
ウォーターフォール開発にはメリットがあるにもかかわらず「古い」「時代遅れ」という声も上がっています。
その要因ともなっているウォーターフォール開発のデメリットをご紹介しておきます。
ウォーターフォール開発では要件定義、設定の段階でじっくり仕様の打合せをするため、開発のスタートまでに時間がかかります。開発スタートまでに時間がかかるぶん、開発期間全体が長期化しやすいというデメリットがあります。
ウォータフォール開発は各工程を順番に開発し、完成したら次工程に移るという開発方式です。次の工程に移った後は、前の工程にさかのぼることを想定していないため、実際に開発が始まると、途中で仕様変更が困難なのが欠点です。
やむを得ず仕様変更をする場合には、人的コスト増加、工数の増加による開発期間の延長などの負担も大きくなります。場合によっては、調整が難しく代替案で対応せざるを得ないこともあります。
開発開始までに時間がかかり、途中での仕様変更がしにくいウォーターフォール開発ですが、計画的に開発を行い確実な品質を求めるプロジェクトなどには好まれる傾向にあります。具体的にウォーターフォール開発に適している開発を3つご紹介します。
クライアントからシステム開発を請け負う業態の企業、いわゆるSIerではウォーターフォール開発が良く採用されます。SIerは、クラアントが望むシステムを期限内に決められた予算で納品する必要があるため、各工程を計画的に進めていく手法は相性が良いといえます。クライアント側がIT知識に乏しい場合でも、各工程の成果物を開発側とクライアントが双方に確認し、合意を得ながら進めていくことで、大きな手戻りの期間や費用を発生させることなく、プロジェクトを進めていくことができます。
ウォーターフォール開発は、要件定義まで進めばスケジュールが分かり、開発期間の目途がつきます。また、どの工程でどのくらいエンジニアを確保すべきかも予測が立てられるので、予算も早い段階で把握することが可能です。多くの企業や人がかかわり、費用も大きくなる大規模なプロジェクトでは、ウォーターフォール開発のメリットが活きます。
短期間でのリリースよりも、確実な安定性を求められる開発には金融系のシステムや携帯電話の通信システムなどがあります。不具合が発生した場合、大きな被害につながるような開発は、安定性に定評のあるウォーターフォール開発がよく採用されます。
従来からシステム開発で採用されているウォーターフォール開発に対し、アジャイル開発は近年主流になりつつある手法です。
アジャイル開発では、大まかな要件定義で開発に取り掛かり、「計画→設計→開発→テスト」を細かく繰り返すことで、システムの精度を高めていきます。要件定義をしっかり詰めてから計画性をもって開発を進めていくウォーターフォール開発と違い、短い開発期間でリリースできる点と、開発途中での仕様変更が前提となっている点にメリットがあります。
デメリットとしては、見積もりが十分にできないため、開発途中で予想外の変更が重なると、開発期間や人件費などのコストに影響がでる点などがあげられるでしょう。
プロジェクトを進捗させながら要件を固めていくため、チーム内のコミュニケーションや、クライアントや上層部の理解、プロジェクトリーダの手腕などが求められます。
ウォーターフォール開発よりもスピーディーにリリースでき、クライアントの要望による仕様変更や、不具合への対応も柔軟なため、近年はアジャイル開発を採用する企業が増えています。
全体像を詳細には決めずに柔軟な開発を検討したい場合や、開発途中に仕様変更が多く出てくることが見込まれる場合、継続的に改善が必要な製品の開発などではアジャイル開発が適していると言えます。
「ウォーターフォール開発は古い」というイメージは主に次の3つの要因によるものです。
最近では、エンドユーザーのニーズ変化が速く、開発側もスピーディーな開発が求められる傾向が強くなっています。開発期間が長くなると、完成する頃には顧客ニーズが変わってしまうリスクがあり、せっかく開発したシステムが水の泡になってしまう可能性もあります。アジャイル開発はこのようなスピードを重視する時代に適していると言えるのかもしれません。また、海外ではアジャイル開発が主流にもなっています。
しかし、開発期間や予算の予測が立てやすく、品質も安定したウォーターフォール開発は現在でも多くの企業に採用されています。明確なメリットがある以上、決して古いわけではありません。ウォーターフォール開発とアジャイル開発、両方のメリットとデメリット、それぞれの特性を理解した上で、案件に合った開発方法を選ぶことが必要です。
ウォーターフォール開発を重点に、アジャイル開発との違いを解説しつつ「ウォーターフォール開発は古いのか」を検証してみましたが、いかがでしたか?
ウォーターフォール開発は開発の計画が立てやすいという大きなメリットがあります。また、品質の高い完成品を求める際に多く採用される開発方法で、これまでの実績もある、頼もしい開発方法の一つです。
一方で、開発期間が長くなり途中での仕様変更が難しいため、スピーディーさを求められる昨今では時代に合わなくなりつつあるデメリットも抱えています。
ウォーターフォール開発とアジャイル開発、どちらの開発方法にもメリットとデメリットがあり、開発の向き不向きがあります。それぞれの開発手法のメリットとデメリットを吟味して、プロジェクトにあった開発方法を選びましょう。
最新記事
プログラミング学習に暗記は不要!未経験から効率的に学習する方法
2024年4月18日
この記事の目次1 【結論】プログラミング学習に暗記は必要ない1.1 【理由1】すべて暗記するのは不可能なため1.2 【理由2】カンニングしてもいいため1.3 【
プログラミングに必要なパソコンのスペックとは?初心者向けの選び方
2024年4月18日
プログラミングには、最低限のスペックを備えたパソコンが必須です。とはいえ、初心者の人は「プログラミングに必要なパソコンのスペック」を把握していないでしょう。今回
インフラエンジニアのやりがい5選!向いている人や一日の仕事の流れも解説
2023年10月20日
ITエンジニアのなかでもインフラエンジニアに興味を持っており、「どのようなやりがいがあるのだろう?」と気になっている人もいるのではないでしょうか。 type転職