今回はウォーターフォール開発とアジャイル開発とはどのようなものかを時間軸だけではなくて、成果物がどのようにつくれていくのかをイメージでとらえて、そこから自然に導き出されるそれぞれの開発傾向を導き出します。
それによって各手法のメリット・デメリット、どこに気を付けなければならないかを納得して理解してみようという試みです。
ウォーターフォール開発とアジャイル開発について
それぞれの開発のやりかたについて、開発期間と成果物の両面で捉えてみます。
ウォーターフォール開発
ウォーターフォール開発の流れ
ウォーターフォール開発は、別名フェーズドアプローチともいって、プロジェクトが立ち上がったら、プロジェクトを工程(フェーズ)に分割して、各工程をクリアしながら最終工程のシステム立上げ(通常はプロジェクトの完了)まで、もっていくというものです。
イメージにするとこうなります。
局面の名前は、会社ごとに異なる定義があったりしますが、大きい流れは次のようになります。
- 要件定義/基本設計:お客様と何をつくるか、どのようなものになるかの認識をあわせる
- 設計/プログラム設計:システムを実際にどのように作るかを決定する
- 製作/単体テスト:設計したものを実際に動作するプログラムとして製作/動作確認をする
- 個別に開発されたプログラムを結合してシステム全体として動作するか運用面も含め確認しリリースする
実際には工程は、もう少し細かく工程の目的ごとに分割されますが、大きな流れは上記に示した内容になります。
最初にやることを決めたら、期間とやることを分けていって最後にシステムが完成するという流れです。
成果物の方をみると、要件定義/基本設計あたりまでで、システムの大枠が決まります。
それが今回のプロジェクトで開発するゴールになります。
それを設計フェーズで、上の図では少し色がついてきますが、どのようにシステム化するか決めます。
製作・単体テストでは、実際のプログラムを作りこむことになりますので、図の上ではかなりの部分の色が濃くなって完成に近づきますが、まだ全体のテストが完了していないため、一部の色は未完成になっています。
最終的に、結合してお客様にもテストしていただき、完成、システムを切り替えればプロジェクトの完了となります。
ウォーターフォール開発の傾向(メリットとデメリット)
図の上では、開発は完了しているものの×印がついている領域があります。
この部分は、最終的には不要になってしまった-つかわれない部分となります。
要件定義の段階で、紙の上で、または検討中は必要だと想定して機能として織り込んだものの、
・実際にテストしてみると不要だった
・要件通りだが実運用にあわない
・要件を出した時は必要だったが今はもう不要
このような種類のものです。
上記のように見ていくと、ウォーターフォール開発の傾向がわかります。
メリット
- 開発範囲が初期定義されるため全体計画ができる(外部契約/発注がしやすい)
- 要件と範囲にあいまいな部分がなければ、人海戦術による開発ができる
デメリット
- 開発期間が長期間になりがちでモチベーション、品質など日々のコントロールが必須
- 最終局面まで動作確認ができないため要件間違い発見は後半になる
- 不要機能をはずすのも作業が必要なためそのままリリースされがち
ウォーターフォール開発を成功させるポイント
上記の傾向を踏まえて、開発成功のポイントは
【プロジェクトマネジメント】
になります。
長期間にわたる、場合によっては大人数の人をどのようにマネジメントして最後までもっていくか、プロジェクトマネージャ(PM)の力が問われるところです。
プロジェクトを成功させるには、しっかりした「プロジェクト計画」を立案し、日々「プロジェクトをコントロール」するというマネジメントができれば、プロジェクトは成功に近づきます。
アジャイル開発
アジャイル開発の流れ
アジャイル開発では、短期間の開発を繰り返しながら、小さなシステムを大きく育てていくというアプローチをとります。
イメージにするとこうなります。
期間は特に規定もありませんが、機能単位で短い期間で、「開発対象を決め→設計→製作→テスト・リリース」のサイクルを繰り返します。
開発には、スクラム(SCRUM)、エクストリームプログラミング(XP)などいくつかのやり方があります。
アジャイルとしては、もっとも適用されているのが多いスクラムの概要を示します。
- 開発サイクル(スプリント)を短い期間に分割して段階的に開発(期間の最長は4週間)
- 実装する機能や実施事項をバックログとして管理
- ミーティングを重視、計画、ディリーのスクラム会議、スプリントの終了時のレビューをしっかり実施
バックログをチームで消化していきながら、一定量のバックログを消化したらリリースを繰り返すことになります。
スプリントを駆け抜けるために、チーム間のコミュニケーションを重視するという手法です。
リリースしても途中で不要になったり、システムを成長させていく過程で使えなくなった部分を修正したりが発生するため、途中で開発したもので使えなくなる部分はでてきますが、そこは直しながら(リファクタリング)対応していきます。
アジャイル開発の傾向(メリットとデメリット)
アジャイル開発のメリットとデメリットを整理します。
メリット
- 短期間でリリースされるため、要件→確認が短期ででき改善していくことができる
- コミュニケーションがうまくいけばモチベーションあげて成果を出すことができる
デメリット
- 最終的なゴールが不明(無い?)なため、契約・発注は注意が必要
- 大人数での開発には向かないため、大規模な開発が必要な場合に適用は困難
- サイクル毎に開発対象を決定しながら進めるが決定ができないと開発に影響がでる
アジャイル開発を成功させるポイント
上記の傾向を踏まえて、開発成功のポイントは
【コミュニケーション】
になります。
短期間でチームで強力しながらプロジェクトをまわすためには、チーム内の協力関係、またどこまで開発するかを都度お客様とも決めながら進めていく必要があるため、コミュニケーションをしっかりとることが大切になります。
プロジェクトを成功させるには、プロジェクトのリーダーが率先してメンバーおよびお客様とのコミュニケーションをとりながらプロジェクトを先導していくのがポイントで、そこがクリアできればプロジェクトは成功し、チームメンバーの成長にもつながっていきます。
まとめ
ウォーターフォール開発もアジャイル開発も、すすめるためにはマネジメント力、コミュニケーション力が重要になってきます。
それらは技術書などからやり方を学んだだけでは身につかず、手法を適用しての実プロジェクトの経験が必要になります。
プロジェクトマネジメントでお困りの際には、ご相談いただければ対応させていただきます。