現在のシステムやアプリケーションの開発において、アジャイル開発がよいか?ウォーターフォール開発がよいか?という議論を、今でも耳にすることがあります。最近では「アジャイル開発がソフトウェア開発に主流」だとされていますが、必ずしもウォーターフォール開発に利点が無いというわけではありません。
本稿ではシステム開発において、アジャイル型とウォーターウォール型の違いと、それぞれのメリット・デメリットについてご紹介します。
アジャイル開発とは?
アジャイル(Agile)とは日本語で「俊敏」という意味です。文字通り、ウォーターフォール開発と比較してソフトウェアを素早く開発して、かつ途中での仕様・要件の変更に対しても俊敏に対処できる特徴があります。この手法が誕生したのは2001年です。ソフトウェア開発において専門性の高い有識者が集まり「アジャイルソフトウェア開発宣言」を策定したこと始まりとされています。ちなみに同宣言では、システム開発の原則を以下のように定義しています。
- 顧客満足を最優先し、価値のあるソフトウェアを早く継続的に提供します。
- 要求の変更はたとえ開発の後期であっても歓迎します。変化を味方につけることによって、お客様の競争力を引き上げます。
- 動くソフトウェアを、2-3週間から2-3ヶ月というできるだけ短い時間間隔でリリースします。
- ビジネス側の人と開発者は、プロジェクトを通して日々一緒に働かなければなりません。
- 意欲に満ちた人々を集めてプロジェクトを構成します。環境と支援を与え仕事が無事終わるまで彼らを信頼します。
- 情報を伝えるもっとも効率的で効果的な方法はフェイス・トゥ・フェイスで話をすることです。
- 動くソフトウェアこそが進捗の最も重要な尺度です。
- アジャイル・プロセスは持続可能な開発を促進します。一定のペースを継続的に維持できるようにしなければなりません。
- 技術的卓越性と優れた設計に対する不断の注意が機敏さを高めます。
- シンプルさ(ムダなく作れる量を最大限にすること)が本質です。
- 最良のアーキテクチャ・要求・設計は、自己組織的なチームから生み出されます。
- チームがもっと効率を高めることができるかを定期的に振り返り、それに基づいて自分たちのやり方を最適に調整します。
システム開発では「リリース計画」と「イテレーション」と呼ばれる2つの基本プロセスから成り立っています。
リリース計画
新しいソフトウェアを開発したり新しい機能を実装するにあたって、大体の仕様と要件を定義するのがリリース計画です。仕様および要件は細部まで定義するのではなく、あくまで「大体」定義します。これはシステム開発が「ソフトウェア開発途中に仕様や要件が変更されるのは当たり前」という前提を持った開発手法だからであり、仕様および要件が明確に定義されていないからこそ顧客からの急な変更にも対応できるようになっています。
イテレーション
イテレーション(Iteration)とは「反復」という意味です。システム開発においては小さく区切った開発単位を指します。リリース計画によって仕様と要件の定義が完了すると、優先度の高いものから「計画」「設計」「実装」「テスト」を反復的に行います。このことから、システム開発はイテレーションごとにウォーターフォール開発のようなプロセスを持っていると考えてよいでしょう。
ウォーターフォール開発とは?
システム開発モデルの中で広く取り入れられており、現在でも多くの企業で採用している開発手法がウォーターフォール開発です。プロジェクト開始日と完了日が決定しており、さらには製品の最終仕様が開発の途中で変更されないなど、緻密な計画を立ててプロジェクトを推進していく手法になります。ウォーターフォール開発は「古いソフトウェア開発モデル」という認識もありますが、機械製造や造船業、宇宙産業といった長期的プロジェクトでよく採用されています。
他にも、ERPソフトウェア等の導入や既に人気を得ている大規模なソフトウェアまたはオペレーションソフトウェアの新しいバージョン開発などでもよく採用されています。ウォーターフォール開発の基本プロセスは次の通りです。
ソフトウェア要件定義
顧客やエンドユーザーにとってどういった機能が必要で、それを実現するためのソフトウェアリソースなど細部まで定義するプロセスです。
ソフトウェア概要設計
ソフトウェア要件が定義できたらソフトウェアの概要を設計していきます。概要とはつまり「UI(ユーザーインターフェース)はどういったデザインにするか?」「データベースの構造はどうするか?」「入出力できる帳票の種類は何にするか?」など、ソフトウェアの基本ともなる部分を設計してきます。
ソフトウェア詳細設計
ソフトウェア概要設計で大枠が決まったら各設計をプログラムレベルまで落とし込んでいきます。各プログラムで実現する機能を定義し、大まかなタスク振り分けをすることもプロセスの一つです。
プログラム設計
ソフトウェア詳細設計で決定した事項はさらに細かい処理手順や一つ一つの構造などを細かく設計していきます。
プログラムコーディング
設計に基づいてプログラムコードを記述していくことでコーディングといいます。
各種テスト
ソフトウェア開発のテストは4種類あります。1つ目がプログラムテスト、コーディングしたプログラムを単体で動作させて問題を検出するテストです。2つ目が結合テスト、各プログラムを連携させて機能レベルで行うテストです。3つ目がソフトウェアテスト、各機能を連携したソフトウェア全体をテストします。4つ目が運用テスト、エンドユーザーの実証データに基づきソフトウェアの可用性などを評価するものです。
ソフトウェア運用保守
各種テストをすべてクリアして問題が無ければソフトウェアのリリースとなり、ソフトウェア運用保守に移行します。
それぞれのメリットとデメリット
それではシステムの開発手法としてアジャイル型とウォーターフォール型それぞれのメリットとデメリットについて確認していきましょう。
アジャイル開発のメリット
- 短いイテレーションを繰り返すことで顧客要件を最大限反映できる
- プロジェクト途中での仕様・要件変更も問題無く対応できる
- 顧客からのフィードバックを素早く得られる
アジャイル開発のデメリット
- 仕様設計を綿密に決めておかないと最終的な品質が落ちる
- これによって大規模なプロジェクトでは開発を根底から覆すような事態も発生する
- 開発後のソフトウェアがどうあるべきかを十分に想定していないと期待する結果が得られない
ウォーターフォール開発のメリット
- ソフトウェア開発モデルとして簡潔で分かりやすく大多数の企業に適してる
- ソフトウェアの仕様は1度決まったらほぼ変わらない
- 広い適応性と構造のために低価格でプロジェクトを開始できる
・ウォーターフォール開発のデメリット
- プロジェクトが長期化してコストがかかる
- 膨大なドキュメントが必要になる
- 柔軟性が低く大幅な仕様・要件変更に対応できない
こうしたメリットとデメリットを踏まえると、最近の開発手法としてはアジャイル型が普及しつつあるように見えますが、開発するシステムの特性や体制などにより使い分けられているのが実情のようです。
システム開発の実現!
ご紹介してきました通り、システム開発はその時代の流れや開発するシステムそのものの変化により、その手法も変化を遂げてきています。
しかしながら、どちらの開発手法を採用した場合でも、上流工程において、何をどのように開発するべきかを設計書に落とし込むフェーズは変わっていません。要件定義やディスカバリーなどと呼ばれる設計フェーズです。
つまり、開発するシステムそのものの本来の目的や必要となる要件、解決するべき課題を整理し、実装する機能や開発するシステムを定義していく作業になります。
この工程はシステム開発においても最も重要であり、打ち合わせを重ね、関連ドキュメントを作成するなど、多くの人手が必要となる作業工程とも言えます。
- カテゴリ: