開発手法について(ウォーターフォールvsアジャイル)
開発手法は大きく分けて2通りあります。
(1)ウォーターフォール開発
(2)アジャイル開発
日本ではウォーターフォール開発が盛んです。ですが、世界的にはアジャイル開発、その中でもスクラム開発が非常に盛んです。
それぞれの特徴を見ていきたいと思います。
(1)ウォーターフォール開発
■ ウォーターフォール開発とは?
「要件定義」「基本設計」「詳細設計」「実装」「テスト」「リリース」という流れで、水が上流から下流へ流れ落ちるように一つ一つの工程を順番に進めていきます。
工程ごとにレビュー(成果物の確認)を行うのが特徴です。
V字モデルとも関係しています。V字モデルは、開発工程とテスト工程をリンクさせた考え方です。
各工程が対になることで、確実に検証ができることから「ウォータフォール開発」は各工程で品質を担保できる開発手法だと言えます。
このため、SIerと呼ばれるシステム開発会社(受託請負開発会社)はこの手法を中心に開発しています。
■ ウォーターフォール開発のメリット・デメリット
メリット
完成品の品質を担保しやすい
工程ごとに決められた基準を満たしてから次の工程に移るため、ある程度品質を担保しやすい
進捗管理が楽
スケジュールを守りやすい
開発人員の手配がしやすい
開発費用がぶれにくい
デメリット
実際に動く成果物を見るのに時間がかかる
途中の仕様変更・要求変更に対応しにくい
手戻りが発生すると工数がかなり増える
途中のユーザーの意見を取り入れにくい
(2)アジャイル開発
■ アジャイル開発とは?
アジャイルとは直訳すると「素早い」「機敏な」「頭の回転が速い」という意味です。アジャイル開発は、小さな単位で「設計」「実装」「テスト」を繰り返して開発を進めていきます。従来の開発手法に比べて開発期間が短縮されるため、アジャイル(素早い)と呼ばれています。
2001年に17名の技術者やプログラマーが米国ユタ州に集まり、彼らがより良い開発手法について議論するなかでまとめたものが「アジャイルソフトウェア開発宣言」です。
これは
「ソフトウェア開発において、どこに重きをおくか」
という価値観を定義したものです。
時々、この宣言は誤解されやすいのですが、
「左記の事柄に価値があることを認めながら」
という部分を理解してください。
つまり、「包括的なドキュメント」に価値がないわけではないということです。
アジャイルソフトウェア開発における12の原則「アジャイル宣言の背後にある原則」を読むと、さらに詳しく解説されているのでこちらもチェックしてください。
■ アジャイル開発の流れ
大体の仕様と要求をまず決めます。
その後、インテレーション(Interation)というサイクルを繰り返して開発を進めます。インテレーションは「設計(Design)」「開発(Development)」「テスト(Testing)」という小さな単位に分けられた工程を「設計」→「開発」→「テスト」を繰り返しながら機能のリリースを進めます。
インテレーションは1週間〜2週間が一般的で、インテレーションごとに機能(動くもの)をリリースします。つまり、インテレーションが終わるたびにいつでもリリースできる状態にするのがアジャイル開発です。
場合によっては、ウォーターフォール的な要素を加えて、最後のインテレーション後に全体のシステムテストを入れる場合もあります。
■ アジャイル開発の代表的な手法
アジャイル開発の具体的な手法に関しては、以下の3つが代表的な手法になります。
スクラム
エクストリーム・プログラミング(XP)
ユーザー機能駆動開発(FDD:Feature Driven Development)
■ アジャイル開発のメリット・デメリット
メリット
臨機応変に柔軟な対応が可能で開発スピードが速い
開発途中もコミュニケーションを取りながらフィードバックを行うので、顧客のニーズに最大限応えることができる
不具合が発覚した際に戻る工数が少ない
デメリット
開発の方向性がブレやすい
発注段階では最終的な費用の総額を試算することが非常に困難
全体的なスケジュールのコントロールが難しい傾向にある
(3)ウォータフォール開発とアジャイル開発の違い(使い分け)
ウォーターフォール開発が最適なケース
業務システムや大規模サービスなど大掛かりなシステム開発
仕様が完璧にフィックスできていて、途中で変更する可能性が低いプロダクト(システム)
予算や納期が定まっていて変更できないプロジェクト
高い品質を求められる開発案件
(例)(SaaS以外の)業務系システム、金融系システム
アジャイル開発が最適なケース
ビジネスロードマップに合わせた素早いサービスインが求められているプロダクト
仕様が決まっていない箇所が多く、開発途中の変更が多発しそうなプロダクト
細かなユーザーテストを基に改善を重ねていきたい方針のプロジェクト
(例)Webサービス、Webアプリ、スマートフォンアプリ
ウォーターフォール開発の代表格である金融系システムも、最近活況になりつつある銀行APIを使ってサービス構築するケースも増えてきており、こういったシステム開発においては、アジャイル開発が適切であるケースも多くなっています。
上記に挙げた通り、それぞれのメリット・デメリットを鑑み、適切に開発手法を選択すべきですね。