記事を書いた背景
先日つよつよエンジニアの方とお話をさせていただく機会があり、アジャイル開発の話になったのですが、アジャイル開発についての理解が曖昧だったので、調べてまとめてみました。何かご指摘等ありましたらコメントよろしくお願いいたします。
開発手法
ウォーターフォールとアジャイル
よくアジャイルと比較される開発手法の一つとしてウォーターフォール開発があります。
アジャイル開発を理解するためにもウォーターフォール開発について知っておきましょう。
ウォーターフォール開発の特徴
ウォーターフォール開発は滝が流れるように上から下に開発を進めていくという開発手法で
企画→設計→実装→テスト
といった流れで開発を進めていきます。
最初に要件を全て決めてしまうので予算やスケジュールの見積もりは立てやすいものの途中で仕様の漏れなどが見つかった場合、前のフェーズに戻るのが困難になります。
アジャイル開発の特徴
アジャイル開発は企画→設計→実装→テストを細かいスパンで区切って開発を行います。例えば、1週間で機能Aを実装してフィードバックをもらうといったことを行います。
ウォーターフォールとはメリットとデメリットが逆になり、細かいスパンで区切っているので手戻りが容易だが、予算やスケジュールの見積もりが立てづらいといったことが挙げられます。
また、しっかり仕様等を確認しないと軌道がずれていってしまい、当初想定していたプロダクトとは異なったものができてしまうといったことが起こります。
アジャイルの中の手法
アジャイル開発にもいくつか種類があります。
- スクラム
- エクストリームプログラミング
- ユーザー機能駆動開発
今回は特に有名なスクラム開発について書いていきます。
スクラム開発
スクラム開発の進め方は以下の通りです。
- プロダクトへの要望を優先順位ごとに並べ替えその順で機能を作る
- 固定の短い期間(1から4週間ほど)で区切る
- プロジェクトの進め方に問題がないか毎日確認し合う
- 作っている機能が正しいか定期的に確認の場を設ける
また特徴は以下の通りです。
- 自立的なチームづくりができる。・・・リーダーのような立場がなく各個人が主体性を持って取り組むため
- 問題の検知が早い・・・短いサイクルで回し、報告も毎日行うため
- 軌道修正が早めにできる。・・・短いサイクルで回すため
役割
役割は主に3つです。
- プロダクトオーナー
- スクラムマスター
- 開発メンバー
それぞれの特徴
プロダクトオーナー
プロダクトの責任者
開発は行わずスケジュールや予算の管理をする
チームに対して指示はしない、あくまでもプロダクトバックログの編集をして情報を流すだけ
スクラムマスター
チームの調整役
スクラムのルールや進め方をプロダクトオーナー、開発メンバーに説明する。
タスクの調整、顧客やプロダクトオーナーからの無理な要望から開発メンバーを守る
専任の場合もあるし開発メンバーと兼任の場合もある
障害物をリスト化するなどして洗い出し取り除いていく
開発メンバー
設計、ドキュメント作成、コーディング、テスト、運用といった一通りのスキルを持っていることが求められる
メンバーは皆平等であり、上下関係はない
用語
スクラム開発では様々な用語を使います。
バックログ
プロダクトの要望をまとめたリスト、プロダクトオーナーが作ることもあるし開発メンバーの意見が反映されることもある。
スプリントプランニングミーティング
バックログの内容をもとにスプリント内で何を作るか、どのくらい作るかを決定する。工数の見積もりを行い、作業を割り振る
デイリースクラム
状況共有のためのミーティング、いわゆる朝会
昨日やったこと、今日やること、障害になっていることを話し合う。
細かい仕様等の話し合いは避け、(別で時間を設ける)15分くらいで終わるようにする。
スクラムの理想のチームは3人から10人ほどなので一人1分話したとしても15分以上はかからないのが普通
スプリントレビュー
プロダクトオーナーが成果物を確認する。
必ず動くアプリを使って確認する。
スプリントレトロスペクティブ
振り返りを行う良かった点や改善すべき点を話し合う
ウォーターフォールとアジャイルどちらがいいか
結論、両者のどちらが優れているといったことはありません。
プロダクトによって都度選んでいくといった形になります。
最近はネイティブアプリの開発など技術が早い物に関してはアジャイルが採用されることが多いようです。