ウォーターフォール開発 ・アジャイル開発とは?|メリット・デメリット15選

ウォーターフォール開発 ・アジャイル開発とは?|メリット・デメリット15選
最新情報や関心のある情報を毎日お届け。 FEnetインフラメールマガジン メルマガ登録はこちらから>>

目次

ソフトウェアの開発技法とは


ソフトウェアの開発技法とは、システム開発を計画的に進めるために考案された、「体系化されたソフトウェアの作り方」のことです。

ここでは、「ウォーターフォール開発」「アジャイル開発」について紹介していきます。
開発技法によって特徴が異なり、それぞれにメリット・デメリットがあります。
システム開発に携るエンジニアであれば持っておきたい知識だといえます。

まずは、ウォーターフォール開発とアジャイル開発の基本的な情報を見ていきましょう。

ウォーターフォール開発とは?

上流工程の作業を最初に行い、一つの工程が終わってから一段階下の工程へと進めていく手法です。
上から下へ水が落ちていく様子に似ていることから、ウォーターフォールと名付けられました。
主に大規模なシステム開発で用いられることが多いです。

作りたいものがはっきりしており、変更の可能性が低い案件に向いているでしょう。
要件定義を行ってから外部設計をし、次に内部設計、開発と順次進めていきます。
最後にテストを行って、問題がなければ運用するという具合です。

工程に分割した開発

ウォーターフォール開発手法の特徴は、開発工程がいくつかに分割されている点です。

要件定義、設計、4段階のテスト、リリース、運用という順番で進め、前の工程に戻ることは基本的にはありません。
ウォーターフォール開発という名を体現するような性質となっています。

アジャイル開発とは?

計画性よりも臨機応変さを重視する開発手法です。
状況に応じて、一週間から二週間単位の期間でプロジェクトに修正を加えます。
開発の途中段階で実験を繰り返して方向性を見定めることも可能です。

方向性を変更するなどして新たに必要になった工程を、既存の工程と同時並行で進めることもできます。
モバイル業界など移り変わりの激しいジャンルにおいて採用されることが多いです。

反復増加型開発

アジャイル開発では、反復期間を設け、反復ごとに機能を追加していく「反復増加型開発」を行います。

機能変更やユーザーの要望などを随時取り込みながら開発を進められることから、アジャイル開発はユーザーの要望を反映させやすい開発手法であるといえます。

アジャイル開発の代表的な手法

アジャイル開発には様々な手法が存在します。
今回は良く使われている3つのアジャイル開発型の開発手法について紹介していきます。

以下で説明するのは、「スクラム」をはじめ、「ユーザー機能駆動開発(FDD)」「エクストリーム・プログラミング(XP)」の3点です。

同じアジャイル開発型の手法でありながら、それぞれ異なる特徴を持っています。

スクラム

「スクラム」とはソフトウェア開発の手法です。
1986年に発表された論文、「The New New Product Development Game」に触発され、スクラムと名付けられました。

スクラムという名称は、上記の論文においてラグビーのスクラムにちなんで名付けられています。

アジャイル開発の柔軟さを活かしつつ、早期に自律的な開発チームを形成することを目指す手法となっています。

エクストリーム・プログラミング(XP)

エクストリーム・プログラミング(Extreme Programming)とは、1999年に発表されたアジャイル型開発手法のことです。
「それぞれの手法を極限(Extreme)まで実践したらどうなるか」という提唱者の疑問が名前の由来となっています。

プログラミングの途中でも仕様変更や修正が発生することを前提とし、短い開発サイクルを繰り返して開発を進めることで高いスキルでの開発を促進します。

小規模な開発チームに最適な手法であるとされ、スピード感や変化への対応が求められやすいベンチャー企業などで人気がある手法です。

ユーザー機能駆動開発(FDD)

「ユーザー機能駆動開発(Feature Driven Development)」とは、1997年に提案されたアジャイル型開発手法です。

機能を細分化して開発することで、実際に動作するソフトウェアを短い期間で提供していく手法です。
「Feature」とはユーザー視点の機能価値のことを指し、顧客目線でも進捗や成果が見えやすいという特徴があります。

ウォーターフォール開発とアジャイル開発の違い


ウォーターフォール開発とアジャイル開発の違いは、開発工程の進め方にあります。
ウォーターフォール開発が要件定義〜運用までの工程を順番に進めていくのに対し、アジャイル開発では実装〜テストを繰り返して開発していきます。

従来より採用されてきたウォーターフォール開発とは異なるスタイルでシステムの開発を目指すアジャイル開発ですが、柔軟性が高いというメリットがある一方で、ウォーターフォール開発よりもスケジュールの全体像が見えにくかったり、作業進捗が把握しにくかったりとデメリットも存在します。

ウォーターフォール開発も同様で、メリットがあればデメリットもあり、アジャイル開発とウォーターフォール開発では良い点がそれぞれ異なります。

しかしアジャイル開発とウォーターフォール開発のどちらかが優れている、ということはなく、組織やチームの性質、開発規模などによって向き不向きがあります。

ここからは、アジャイル開発とウォーターフォール開発のそれぞれのメリット、デメリットについて一つずつ説明していきます。

アジャイル開発のメリットとデメリット7選


短い期間で開発プロセスを繰り返すアジャイル開発には、開発スピードが早いことや、仕様変更や修正を取り入れやすいこと、ユーザーからのフィードバックを受けやすいことなどのメリットがあります。

ただし良い点だけでなく、ウォーターフォール開発よりも全体のスケジュールが見えにくいこと、柔軟性ゆえに開発の方向性がブレやすいこと、納期遅延しやすいなどのデメリットもあります。

それでは、アジャイル開発とウォーターフォール開発のそれぞれのメリット、デメリットについて見ていきましょう。

1:【メリット】開発スピードが早い

アジャイル開発の1つ目のメリットとしては、開発スピードが早い点が挙げられます。

全ての機能の設計〜テストを順番に行うウォーターフォール開発よりも、ひとつひとつの機能の設計〜テストを繰り返し行うアジャイル開発の方が開発スピードが早いといえます。

仕様変更や修正が発生した際の影響が小さいため、手戻りが少ないことがアジャイル開発のスピードの早さにつながっています。

2:【メリット】仕様変更や追加に対応が容易

2つ目のメリットは、仕様変更や追加への対応が容易である点です。

全ての機能の設計を終えてから実装に入るウォーターフォール開発では、仕様変更や仕様の追加が発生した場合の対応が難しく、変更内容によっては非常に時間がかかったり、人員を割く必要が出てきたりします。

一方アジャイル開発では、小さな機能単位で開発を進めるため、大きな対応は発生しにくくなっています。

3:【メリット】小さな単位で開発するため修正工程が小さい

3つ目のメリットは、小さな単位で開発するため修正工程が小さいという点です。

二点目のメリットと同様の理由で、アジャイル開発の方が修正対応が小さくなりやすいです。
このようなメリットから、アジャイル開発は柔軟な対応が可能であると言われています。

4:【メリット】ユーザーとフィードバックを行い開発が行える

4つ目のメリットは、ユーザーのフィードバックを活かしつつ開発が行えるという点です。

アジャイル開発ではウォーターフォール開発に比べてユーザーとコミュニケーションを取る頻度が高いため、ユーザーの要望を取り入れつつ開発を進められます。

5:【デメリット】全体のスケジュールや進捗具合が把握しにくい

1つ目のデメリットは、全体のスケジュールや進捗が把握しにくいという点です。

ウォーターフォール開発では、先に全体のスケジュールを決めるため進捗の把握がしやすいですが、機能や要件ごとにスケジュールを組むアジャイル開発では、全体のスケジュールや進捗が把握しにくく、管理が難しいといえます。

6:【デメリット】柔軟性があるため開発の方向性がブレやすい

2つ目のデメリットは、柔軟性があるため開発の方向性がブレやすいという点です。
柔軟性があるというのはアジャイル開発のメリットでもありますが、同時にデメリットでもあります。

最初にしっかりと仕様や設計を決めておかないと、繰り返し開発していくうちに想定していた製品からかけ離れたものが作成されかねません。

7:【デメリット】納期遅延の可能性が高い

3つ目のデメリットは、納期遅延の可能性が高いという点です。

アジャイル開発ではひとつひとつの機能ごとに開発するため、その都度変更対応や仕様の追加が可能ではありますが、一方でシステムの完成形は見えにくいという問題があります。

最初に全体スケジュールを決めてしまうウォーターフォール開発よりも、完成までの道のりが見えにくいことが原因の一つとして挙げられます。

ウォーターフォール開発のメリットとデメリット8選


ここまではアジャイル開発のメリット、デメリットについて説明しましたが、ここからはウォーターフォール開発のメリット、デメリットについて説明していきます。

ウォーターフォール開発には、全体のスケジュールや進捗が把握しやすいこと、経験が浅いエンジニアが開発に参加しやすいこと、工程が明確に区切られているため開発に専念しやすいこと、低コストで開発できるなどのメリットがあります。

一方で、アジャイル開発と比較すると柔軟性に欠けること、手戻り作業が発生すると大幅に工数が増えてしまうこと、工程分担に時間がかかるなどのデメリットもあります。

それでは、ウォーターフォール開発のメリット、デメリットを見ていきましょう。

1:【メリット】全体のスケジュールや進捗具合が把握しやすい

1つ目のメリットは、全体のスケジュールや進捗が把握しやすいという点です。

アジャイル開発とは対照的に、ウォーターフォール開発でははじめに全体のスケジュールを決定してから順番に作業が進んでいくため、計画的に開発を進められます。

管理する側から見ると、ウォーターフォール型開発の方が進捗状況が簡潔でわかりやすいといえるでしょう。

2:【メリット】経験が浅いエンジニアでも開発に参加しやすい

2つ目のメリットは、経験が浅いエンジニアでも開発に参加しやすいという点です。

ウォーターフォール開発は、各工程が明確に区切られているため、エンジニアが担当する工程が絞られます。
経験が浅いエンジニアでも、割り振られた工程に集中することができ、教える側の負担も小さくなることから、ウォーターフォール開発は新人エンジニアでも参加しやすい開発手法となっています。

3:【メリット】工程が明確に区切られ担当する開発に専念できる

3つ目のメリットは、工程が明確に区切られているため、担当する作業に専念できるという点です。

ウォーターフォール開発は、前の段階で決められた内容に従って開発していく手法です。
アジャイル開発とは異なり前の工程に戻ることはないので、作業者は割り振られた工程のみ集中して取り組めます。

すでに決まっている内容通りのものができるので、品質の保ちやすさにもつながります。

4:【メリット】効率の良い開発ができる

4つ目のメリットは、効率の良い開発ができるという点です。

開発スピードや手戻りの少なさを考えると、アジャイル開発の方が開発効率が良いともいえますが、アジャイル開発の場合は「小規模チームである」ことが必須条件となります。

大規模なシステム開発では、ウォーターフォール開発の方がスケジュールが簡潔で管理しやすく、大人数で開発するには効率が良いといえます。

5:【メリット】低コストで開発ができる

5つ目のメリットは、低コストで開発ができるという点です。

はじめに全体のスケジュールを決めることから、開発作業に入る前から開発規模が見えやすく必要な人員だけを確保できるため、ウォーターフォール開発は無駄なコストを抑えやすい手法となっています。

6:【デメリット】柔軟性がなく大幅開発の変更はできない

1つ目のデメリットは、柔軟性がなく大幅な開発変更はできないという点です。

工程が順番に進んでいくというウォーターフォール開発の性質から、開発の後半になればなるほど大きな修正を加えるのが難しくなっていきます。
アジャイル開発とは対照的に、大きな仕様変更が発生した場合に莫大なコストがかかるため、変更は加えずに開発を進める選択をせざるをえない場合もあります。

7:【デメリット】手戻り作業が発生した場合大幅な工数増になる

2つ目のデメリットは、手戻り作業が発生した場合大幅な工数増になるという点です。

アジャイル開発のメリットでも触れましたが、先に全体スケジュールが決まっており、前の工程に戻れないウォーターフォール開発は、仕様変更や修正等で変更が発生すると、対応するのに非常に手間や時間がかかります。

システム開発は完璧に予定通りに進めるとも限らないので、ウォーターフォール開発の持つリスクの一つであるといえます。

8:【デメリット】工程分担に時間がかかる

3つ目のデメリットは、工程分担に時間がかかることです。

はじめに全体のスケジュールを立てるのがウォーターフォール開発の特徴ですが、その計画を立てるのにまず時間がかかるということです。

各工程にどのようなタスクがあって、どの程度人員が必要なのかを把握する必要があるため、作成者にとって大きな負荷となります。

アジャイル開発の主たる工程3選


ここまでは、アジャイル開発とウォーターフォール開発のそれぞれのメリット、デメリットについて紹介しました。

ここからは、それぞれの開発技法の工程について説明していきます。
アジャイル開発には、リリース計画、イテレーション、設計・実装・テストと三つの主たる工程がありますので、各工程について見ていきましょう。

1:リリース計画

アジャイル開発では、まず「リリース計画」を行います。

ユーザーの要求から仕様を取りまとめる段階ですが、この段階で詳細に定義するのではなく大まかに定義することで、開発段階での仕様変更や追加、修正に対応できるようにします。

2:イテレーション

「イテレーション(Iteration)」とは、反復を意味する単語で、アジャイル開発においては開発する機能の単位を指します。

機能の内容やボリュームに応じて短い期間を設定し、その期間内で設計から実装、テストを繰り返します。

反復を繰り返すことで柔軟に変更や追加、修正を取り入れ、最終的な完成を目指していきます。

3:設計・実装・テスト

アジャイル開発では、イテレーションごとに設計・実装・テストを繰り返します。

この段階では、ウォーターフォール開発のように作業を順番に進めていきます。
イテレーション単位で設計からテストまでを実施するため、修正が発生しても大きな影響が発生しにくいです。

ウォーターフォール開発の主たる工程9つ


ウォーターフォール開発は、主に9つの工程に分かれています。
一般的には、要件定義(要求定義)、外部・内部設計などの設計部分までをウォーターフォールの名前にちなんで上流工程と呼び、プログラム開発以降を下流工程と呼びます。

ユーザーの要望を聞き、システム設計を行う上流工程の役割は重要で、完成品の姿や品質を決める段階であるといえます。

上流工程で不備があると、下流工程での対応が困難な場合があり、プロジェクト全体の進行を左右する場合もあります。

1:要件定義(要求定義)

ウォーターフォール開発では、まず顧客の要望をヒアリングします。
打ち合わせを行い、どのような機能を持つシステムを開発するかを決めていきます。

ここでは、システムの要件だけでなく、開発に必要な人員や予算についても決定します。

2:外部・内部設計

外部設計では、ユーザー目線からシステムに必要な機能や、インターフェースを設計していきます。

内部設計では、外部設計をもとに、開発者目線でプログラムの実装を想定して設計します。
システムの処理やデータのような詳細部分まで設計する段階です。

3:プログラミング

この工程では、外部設計や内部設計をもとにプログラミング言語を用いて機能を実装していきます。

ウォーターフォール開発におけるプログラミングは、これまでに作成した設計図から実際に動くシステムを作成する段階となっています。

4:単体テスト

プログラミングが完了したら、作成したプログラムの動作確認を行います。

単体テストは、機能ごとにテストを行い、設計書通りにシステムが実装されているかの確認をする工程です。

ウォーターフォール開発では単体テストが最初のテスト工程となり、徐々にテスト範囲を広げていく形式となっています。

5:結合テスト

この工程では、複数の機能を組み合わせた時にきちんと動作するかの確認をします。

単体テストでは単独の機能をテストしましたが、ここでは複数の機能を結合してテストすることで、別画面への遷移や、データの受け渡しなどが正常に実装できているかをテストし、想定どおりに機能間の連携がとれているか確認します。

6:システム(総合)テスト

単体テスト、結合テストが完了したら、システム(総合)テストを行います。

この工程では、全てのプログラムが設計における想定どおりに動作するかのテストを行います。
ここでは、これまでのテストで確認しなかった多量のアクセスへの耐久や、システムの処理速度などの非機能要件についてもテストします。

7:運用テスト

システム(総合)テストが完了したら、運用テストを行います。

運用テストでは、実際にシステムを運用する環境において、作成したシステムが正常に動作するかのテストを行います。

この工程がウォーターフォール開発における最後のテストとなり、テストの結果問題がなければリリースされます。

8:システム移行(リリース)

全てのテストが完了すると、システム移行(リリース)が行われます。

この工程では、開発したシステムを本番環境に移行(リリース)し、全ての機能が問題なく動作しているかを確認します。

9:運用・保守

開発したシステムが稼働した後も、稼働し続けられるように監視が必要になります。

不具合が起きた場合にはすぐに解消し、システムを使い続けていくために改善が必要であれば都度対応していきます。

運用・保守がウォーターフォール開発の最終段階となります。

ウォーターフォール開発 ・アジャイル開発を理解してシステム開発に携わろう


ウォーターフォール開発もアジャイル開発も一長一短があり、一概にどちらが良いということはありません。
それぞれの開発手法のメリットとデメリットをよく意識しながら、システム開発に携わることが大切です。

インフラエンジニア専門の転職サイト「FEnetインフラ」

FEnetインフラはサービス開始から10年以上『エンジニアの生涯価値の向上』をミッションに掲げ、多くのエンジニアの就業を支援してきました。

転職をお考えの方は気軽にご登録・ご相談ください。