![見出し画像](https://assets.st-note.com/production/uploads/images/77630403/rectangle_large_type_2_9bcba2f71083a08e9353a125126837ae.png?width=1200)
【ソフトウェア開発プロジェクト管理手法比較】アジャイル型VSウォーターフォール型開発手法【プログラミングプロジェクト】
<書いている人>
エンジニアからクラウド系プロジェクトリーダーになった人。
普通の一般的なおっさんです。
アジャイルVSウォーターフォール
人は憎しみ、なぜ争うのか…
色々な話題があるこの2つの争い。この2つの開発手法について、私の個人的な見解を踏まえて、まとめさせていただきました。
ウォーターフォール型
「明確な要件や仕様を明らかにしてください」
開発前に明確な答えが出せるのであれば、ウォーターフォール型の開発が可能な証拠です。
このような図で表される場合が多いのがこの形
![](https://assets.st-note.com/img/1651188438791-xpflvBsL7C.png?width=1200)
超ざっくり言えば
「大枠から詳細までしっかり考えて実装しましょう」
というお話です。
大前提として、左半分が絶対に正解しているという前提の元開発をしていくので、途中で間違えに気づいた場合にすべてやり直しになるということです。
ウォーターフォールの利点
利点としては全ての期間や工数が早い段階で確定できることです。
要件や仕様、詳細仕様さえ定義すれば確実に工数見積もりができます。
また、コストも安くなる傾向があります。
![](https://assets.st-note.com/img/1651444097393-BksIU5XZWD.png?width=1200)
ただし、次で説明する通り「間違えない要件や仕様が定義されている」という前提があります。
この部分が、個人的にはかなり難易度が高い部分だと思います。
ウォーターフォールの弱点
前にも何度か書かせていただきましたが、前提条件に関する問題修正に弱い点です。
![](https://assets.st-note.com/img/1651443972559-gE3RAFKCvI.png?width=1200)
問題の修正を行おうとすると、問題が発生した箇所の設計に立ち戻って作業を行う必要があり、完全な軌道修正を行うには大きな時間と労力が必要となります。
こんな時に便利
個人的には「すでに運用されているシステムの完全なリプレイス」を行う場合はこの方法が向いていると思います。
すでにされている運用を全く改善する必要はなく、全く同じものを作成する場合は、この方法が最も工数を使わずに開発が完了するでしょう。
※運用の改善などは一切行われませんが…
アジャイル型
アジャイル型開発は「設計」「開発」「検証」を細かく繰り返す前提の開発手法です。
![](https://assets.st-note.com/img/1651445906086-MFY2vPFKfL.png?width=1200)
そのため、テストは何度も行われる前提で自動化され、自動的なデプロイなども設計されます。
アジャイルの利点
開発を繰り返す前提で開発環境が用意されるため、いずれのタイミングの問題も吸収しやすく、開発中の問題にも対応しやすいです。
また、問題が発覚した場合のストレスも小さくて済みます。
![](https://assets.st-note.com/img/1651446152264-6Z7BF9WoSG.png?width=1200)
常にリリース可能なものを各プロセス完了時に作成を行うため、機能などを考慮しなければ、任意のタイミングで任意の規模でのリリースが可能であることも魅力の一つだと思います。
![](https://assets.st-note.com/img/1651446398849-F6Uf5Bs9aM.png?width=1200)
プレスリリースなどを打つための実証実験などを挟み込む事により、途中のプロセスでリリースしたものを利用してプロジェクトに対する深い理解を得ることもできます。
アジャイル弱点
開発物をすべて再開発する可能性もあるため、開発当初に開発予定が建てられない事が大きな弱点だと思います。
開発物はいつリリースしても問題はないですが、どうしてもメインの機能やクリティカルな機能は後半に確定する場合があります。
この場合、機能を優先するかリリース時期を優先するかの判断を行う必要があると思います。
![](https://assets.st-note.com/img/1651446754257-xYg1wNNAGe.png?width=1200)
また、開発環境を準備するのに時間が必要な場合があり開発工数や要求スキルが高くなってしまうような懸念があります。
アジャイル開発に必要な自動テストやリファクタリング、自動デプロイなどのノウハウは高度な開発知識が必要であり、時間がかかる場合があるのです。
こんな時に便利
全くの新規事業を開発する場合や、開発物以外のモノの改良を含めて行う場合(運用フローの改善など)はこの方法が便利でしょう。
期間ではなく、効果に重きをおいた仕組みだと思います。
個人的な意見
人は間違えを犯すものであり完全な正解を常に出せるモノではありません。
こう考えると、間違えることを前提にしたアジャイル開発の方が依頼主や開発者など、開発に関わる全体にストレスなく進められるように感じました。