目次
昔から存在し、システム開発の主流と言われる開発手法のウォーターフォール開発と、最近よくみるようになったアジャイル開発。どちらにどんなメリットがあってデメリットがあるのか気になる方も多いと思います。
それぞれ全く異なる特徴をもち、向いているプロジェクト、向いていないプロジェクトが存在します。開発手法の選択は、プロジェクトの成功が決まる大きな判断です。
本記事では、それぞれの特徴やメリット・デメリットについて解説します。
アジャイル開発とウォーターフォール開発の違い
アジャイル開発とウォーターフォール開発の違いは、開発プロセスの進め方です。アジャイル開発は、機能単位で小さく区切り、素早く開発を繰り返していく手法で、ウォーターフォール開発は、上から下に向かって各工程を後戻りしない前提で進めていく手法です。
アジャイル開発は仕様や要件が固まっておらず、あとから変更が発生しやすいシステム開発に適しており、ウォーターフォール開発は、事前に仕様が決まっていて変更が発生しにくいシステム開発に適しています。
従来までのシステム開発では、まず何を作るかの全体像を決めて要件を取り込みながら、全体を設計してから開発するウォーターフォール開発が主流でした。ですが、近年では、時代の変化のスピードが加速するにつれて、すばやい仕様変更が求められるようになり、アジャイル開発が普及しています。
アジャイル開発とは
アジャイル開発の「アジャイル」とは、「agile」という英単語のことで、「機敏な」という意味を持ちます。
アジャイル開発は、現在システムやソフトウェアの開発で主流になっている開発手法の一つです。アジャイル開発は、開発プロセスを複数の段階に分けて機能単位の小さなサイクルで繰り返す点が大きな特徴になります。
優先度高い要件から順番に開発を進めていき、開発した各機能の集合体として1つのシステムを形成するイメージで、実装を進めます。プロジェクトに変更はつきものという前提で進められるため、急な仕様変更に強く、プロダクトの価値を最大化することに重点をおいた開発手法です。
アジャイル開発の流れと特徴
アジャイル開発の流れと特徴について、解説します。
リリース計画
アジャイル開発のリリース計画では、厳密な仕様を決定しないで、だいたいの仕様と要求だけを決め、システムに求められる目的を理解して進めます。
これは、「プロジェクトに変更はつきもの」という前提があるからです。途中で仕様変更があったとしても臨機応変に対応ができるため、顧客のニーズに最大限に対応できます。
イテレーション
リリース計画で、おおまかな仕様と要求を決定したら、イテレーションと呼ばれるサイクルを何度も繰り返しながら開発を進めます。アジャイル開発の種類の一つであるスクラム開発では、スプリントとも呼ばれます。
イテレーションとは、反復という意味をもちます。小さな単位に分けられた開発を繰り返し行い続けます。イテレーションは大体1週間〜2週間ごとが一般的で、イテレーションごとに毎回機能をリリースします。
アジャイル開発が向いているプロジェクト
アジャイル開発が向いているプロジェクトについて解説します。
システムの全体像がはっきりしていないプロジェクト
開発するシステムの要件が7割程度しか決まっていないようなプロジェクトはアジャイル開発に向いています。
残りの3割は、プロジェクトの状況を見ながら並行して固めていくので、短期間でのリリースやレビューを繰り返すアジャイル開発に適しているのです。
顧客は、完成した機能を確認しながら、整合性をとりつつ残りの要件を決定していき、完成形へと持っていくことができるからです。
顧客ビジネスの状況によって要件の優先度が変わりやすいプロジェクト
顧客が、ビジネスの状況を予想できない場合で、システムはどうしても近いうちにほしいという場合に、アジャイル開発は向いています。
とりあえず開発に着手し、部分的なリリースを繰り返しながら開発を進め、例え優先度が変更になってもアジャイル開発では柔軟に対応できるからです。
現代社会のように、ビジネスを取り巻く環境が変わる時代では、このように迅速でフレキシブルな開発手法が求められることがあります。
アジャイル開発が向いていないプロジェクト
情報を正しく記録するために、正確性や安全性が求められるようなシステムは、アジャイル開発には向いていません。
アジャイル開発の最大の特徴は、柔軟性があることです。そのため、開発の方向性がぶれやすいことや、スケジュール、進捗管理がしにくいことが挙げられます。正確性や安全性が求められるシステムでは、この柔軟性が仇となる場合があります。
アジャイル開発の開発手法
アジャイル開発では、いくつかの種類があります。ここでは、アジャイル開発の代表的な種類3つを解説します。
スクラム
スクラム開発は、アジャイル開発の中でも有名な手法で、チームで効率的に開発を進めることができるフレームワークです。チーム一体となってプロジェクトを進めることに重点をおくことから、ラグビーのスクラムが語源になっています。
スクラム開発では、チームメンバー自身がスクラムごとの計画を立案し、設計と実装を進めます。スプリントごとに進捗状況や制作物のレビューを繰り返すため、チームでのコミュニケーションが重要です。
エクストリーム・プログラミング
エクストリーム・プログラミングは、技術面に重点をおいたプログラマー中心の開発手法です。英語で「Extreme Programming」と書き、XPと略すこともあります。
エクストリーム・プログラミングは、下記のような4つのメリットが発揮されます。
1.コミュニケーション
ステークホルダー間のコミュニケーションを重視する
2.シンプル
設計は必要最低限に留める
3.フィードバック
頻繁にテストを実施し、フィードバックを重視する
4.アクション
仕様変更・設計変更のアクションが打ちやすい
エクストリーム・プログラミングは、事前に綿密な計画を行うことよりも、仕様や要件の変更に対して柔軟に対応することを重視した手法と言えるのです。
ユーザー機能駆動開発
ユーザー機能駆動開発は、実際に動作するソフトウェアを適切な間隔で繰り返す手法で、顧客にとっての機能価値を重視した開発手法です。英語でかくと「Feature Driven Development」となり、FDDと略します。
実際に動作する機能を開発するためには、ユーザー側のビジネスの可視化を行います。そのため、開発に取り掛かる前に事前にビジネスモデリングを実施する必要があります。
またこのFDDと似た概念で、「Domain- Driven Design」と呼ばれるドメイン駆動設計がありますが、こちらは開発手法というよりもソフトウェア設計に関するプラクティスになります。システム化、アプリ化する前の既存業務・業務ルールに対し、洞察や示唆を加え、DDDの詳細についてはまた別記事で説明したいと思います。
アジャイル開発のメリットとデメリット
アジャイル開発のメリットとデメリットについて、解説します。
アジャイル開発のメリット
アジャイル開発のメリットは、臨機応変に柔軟な対応が可能で、開発スピードが速いことです。ウォーターフォール開発では、計画で決定した設計を重視するため、トラブルの発生箇所によっては修正にかかるコストが膨大になる可能性があります。
しかし、アジャイル開発の場合は、全体の計画を小さな単位に区切って設計、実装、テストを繰り返しているため、テストで問題が発生したとしても小さく区切ったイテレーション内を戻る工数で済みます。
また、開発途中もコミュニケーションをとりながらフィードバックも行うので、顧客の要求に最大限に応えることができることもメリットです。
アジャイル開発のデメリット
アジャイル開発のデメリットは、計画段階で厳密な仕様を決定していないために、開発の方向性がぶれやすいことです。
開発途中でさらによくしようと改善を繰り返し、テストやフィードバックで変更と追加を加えていくことで、当初の計画からずれてしまうことが理由です。また、全体スケジュールのコントロールが難しいことも挙げられます。
チームの中で小さな単位での開発を繰り返すために、全体を把握しきれずに気づいたら納期に間に合わないということもあります。
ウォーターフォール開発とは
ウォーターフォール開発とは、事前に決めたプロセスに沿って開発を進めることです。英単語で「waterfall」を語源としており、「滝」のように上から下に向かって開発を進めます。
ウォーターフォール開発は、1968年にNATO後援の国際会議にて、ソフトウェア開発を職人芸的な作成方法から工業製品としての作成方法に変える方法として、ウォーターフォール開発の原型が誕生しました。今では多くの現場で利用されている開発手法です。
この開発手法は、システムに実装するための機能や仕様を全て事前に決めてから、開発を始めます。各工程を順番に、そして確実に完了させて全てのプロセスが終了するとシステムが完成するイメージです。
ウォーターフォール開発の流れと特徴
ウォーターフォール開発は、システム開発を上から下に流れるようにプロジェクトを進めていく必要があります。基本的な工程の流れは、「要件定義」「外部設計」「内部設計」「実装」「テスト」「運用」で、これらの工程を順番に進めていくのが特徴です。
ウォーターフォール開発に欠かせない工程について、紹介します。
要件定義
要件定義は、開発工程の準備段階で、開発者の視点から要求をまとめて、具体的なプロジェクトの進め方を決めることです。
システム開発では、ユーザーの要求を実現することが目標です。そのため、開発を開始する前に、要求をもとにして実装する機能や性能などを要件定義に定めて、具体的にどのように進めていくかを決めます。
目標が不明確だと、どのように進めればいいかわからなくなってしまうため、要件定義はプロジェクトを成功させる大事な工程です。
外部設計
外部設計は、基本設計とも呼ばれ、要件定義と外部設計が上流工程に含まれます。要件定義で決定した機能や性能、制約条件を考慮して、システムの基本となる設計を行います。
外部設計では、システムの外部的な設計を行います。外部的な項目としては、操作画面や操作方法、データの出力など、ユーザーから目に見える部分の使用を決定したり、セキュリティや運用マニュアル、システム開発の工数や費用を設計したりと、ユーザーに向けた仕様を設計します。
内部設計
内部設計では、外部設計をもとにしてシステム内部の動作や機能、物理データ、ユーザーから見えない部分の設計を行います。
外部設計と詳細設計の間に挟まれた工程ですが、内部の仕様に特化した設計のため、どちらかといえば詳細設計と同じ工程として扱われます。
実装
実装とは、外部設計と内部設計で定めた仕様の通りに、実際に機能する実体としてプログラムで再現することです。
テスト(試験)
テスト(試験)とは、実装が一通り完了したプログラムが、設計通りに動作しているか、不具合がないかを確認する工程です。モジュールごとに行うテストのことを単体テストといい、各モジュールで問題がなければ、システム全体の動作を確認する結合テストを実施します。
その後、ユーザーが要求している仕様を満たしているかを確認するシステムテストや、実際にユーザーが利用する環境で動作を確認する運用テストを行い、徹底的に不具合がないかを確認します。
運用
運用とは、24時間365日、問題なくシステムを稼働させるための業務です。
システムをリリースしたら、システムの運用業務が必要になります。運用していくうちに、顧客の要望に合わせて追加機能の開発を必要になってくることもあります。
ウォーターフォール開発が向いているプロジェクト
ウォーターフォール開発が向いているプロジェクトは以下のようなプロジェクトです。
- 機能や予算、納期が明確に決まっているプロジェクト
- 大規模な業務システムの開発
ウォーターフォール開発は、一つの工程が完了してから次の校庭に進むため、プロジェクトの安定的な信仰が期待できる開発手法です。つまり、必要な機能や要件が明確であり、予算や納期も明確であるプロジェクトに最適な開発手法だといえるでしょう。
全てを明確にしてから取り掛かるプロジェクトは、大規模なプロジェクトであることが多いです。業務アプリケーションや業務システム、特定のコンピューターを活用する汎用系システムなどです。多くのエンジニアの動きを管理するには適している開発手法なので、大規模な開発に向いています。
ウォーターフォール開発が向いていないプロジェクト
ウォーターフォール開発が向いていないプロジェクトとは、事前に仕様が定まっておらず、仕様変更が度々発生する可能性があるプロジェクトです。
特に、ユーザビリティを常に意識しなければいけないサービスの場合、ウォーターフォール開発は向いていません。
ユーザビリティによって変化する要件があると仕様の変更が頻繁に発生し、ウォーターフォール開発のデメリットである、仕様変更をした際に手戻りの工数が増えてしまい、納期に間に合わない可能性があります。
ウォーターフォール開発のメリットとデメリット
ウォーターフォール開発のメリットとデメリットについて解説します。
ウォーターフォール開発のメリット
ウォーターフォール開発のメリットは、以下の3つあります。
- プロジェクト全体の計画が立てやすい
- 予算や人員の手配がしやすい
- 進捗管理がしやすい
ウォーターフォール開発は、計画的な開発手法であるため、上記のようなメリットがあります。要件定義を終えた段階で、開発スケジュールの全容を把握できます。開発する内容やスケジュールをしっかり決めてからプロジェクトを進行するため、計画を実行しやすいでしょう。
また、計画が明確であるために、人員の確保もしやすくなり、プロジェクトの初期段階で、開発に何が必要で何が不足しているかが明確になります。工程ごとに取り組むべきことがはっきりするため、人員の入れ替わりがあっても引き継ぎが簡単です。
ウォーターフォール開発のデメリット
ウォーターフォール開発のデメリットは、以下の2つあります。
- 手戻りが発生すると工数が増える
- ユーザーの意見を取り入れにくい
ウォーターフォール開発では、後戻りをしないで開発を進行するのが大前提の開発手法です。しかし、事前に立てた計画でも、手戻りが発生する可能性はゼロではありません。
ウォーターフォール開発の最大のデメリットは、突如仕様が変更になり手戻りが発生すると、事前に計画した全体的なスケジュールが狂ってしまう可能性があることです。全体的にスケジュールが狂ってしまうと、開発の工程はやり直しになると共に、スケジュールの見直しを必要になります。
おわりに
これまで多くのシステム開発で利用されてきたウォーターフォール開発は、綿密に計画を立てるため、大規模なシステム開発に向いています。しかし、途中で仕様変更の要望があった場合は、工数の増大につながる可能性があります。
近年では、小さな単位で開発を進めていくアジャイル開発も普及しています。もし、顧客の要件があまり明確でない場合は、アジャイル開発の導入を検討してみるのもおすすめです。プロジェクトに適した開発手法を選びましょう。
—————————————————————————————————————
システム開発、アプリ開発、新規事業立ち上げ、DX化の推進でお困りではありませんか?
日本全国には開発会社が無数にありますが、Webサービスやアプリサービスのスケール(規模拡大)を実現するビジネス推進力やシステムの堅牢性、可用性を意識した設計力・技術力を持つ会社は、多くはなく、弊社は数少ないその一つ。お客様のご要望通りに開発することを良しとせず、お客様のビジネス全体にとって最適な解を模索し、ご提案ができるビジネス×テック(技術力)×デザインの三位一体型の開発会社です。ITやDX全般に関して、何かお困りのことがございましたらお気軽にご連絡いただけたらと思います。
—————————————————————————————————————