🐷

ウォータフォール、アジャイル開発、スクラムについて

に公開

アジャイル開発について

https://zenn.dev/goat_spike/articles/f2edd845cee0f3
こちらの記事でアジャイル開発のまとめを書こうとした所結構な量になってしまったので、別途記事にいたしました。

CI/CDの必要性をまとめる前にアジャイル開発についてまとめようと思います。
近年のソフトウェア開発はスピード感特に重要であるなと感じております。AIなどの目まぐるしい変化の中でより、プロダクト開発の高速化がより一層求めらると感じます。

開発手法の特徴

特徴/手法 ウォーターフォール開発 アジャイル開発 スクラム開発
アプローチ 順序型(直線型) イテレーション型 イテレーション型
計画 詳細な初期計画が必要 柔軟で適応的な計画 柔軟で適応的な計画
フェーズ 要件定義→設計→実装→テスト→運用 短いサイクルでの反復 スプリントでの反復
フィードバックのタイミング 後半 頻繁に小さな変更ごと 頻繁に小さな変更ごと
リスク管理 後半にリスクが集中 継続的なリスク管理 継続的なリスク管理
変更の反映 難しい 簡単に反映可能 簡単に反映可能
ドキュメント重視 高い 中程度 中程度

ウォーターフォールについて

ウォータフォールはプロジェクト間の各フェーズに進捗管理や依存関係の管理が容易であるメリットもあるが、仕様変更による修正が非常にリスクであると言えます
また長期にわたる開発で採用されることが多いと思うので、メンバーの移り変わりが激しいです
それゆえに仕様に関するドキュメントを作成したり手間がかかります。逆にここをサボってしまうと明確な文章が存在しない事となり、後ほど何でこの機能が作られたのかとか、新しいメンバーがドメイン知識を確認することができず開発をすることになりバグが生まれる原因となるパターンも存在すると考えます。なおバージョン管理を怠ったたりして古い文章を参照してしまったりした場合も怖いです

アジャイル開発について

アジャイル開発は通常2~3週間程度の短いスプリントで作業を完了させる反復型の手法です
アジャイル開発のメリットとして、想定外の変化やバグに対して柔軟かつ素早く対応できることが一番のメリットかなと思ってます
ただ完全にアジャイル開発がいいとも言えずリモートチームの場合、意思疎通に時間がかかったりスケジュール管理の難しさ、プロダクトの方向性のずれ、コストが増大になること危険性などもあります
使用調整への柔軟な対応ができるゆえ、度重なる使用調整により全体のスケジュールが遅れたり、予定していたリリース日に間に合わない等々、、、

スクラム開発について

アジャイル開発には様々な手法(スクラム,エクストリーム・プログラミング(XP), ユーザー機能駆動開発(FDD))がありますがその一つとしてスクラム開発も取り上げます
スクラムはスクラムマスター、プロダクトオーナー、開発者などの役割を持ったメンバーでチームを組みます

  • スクラムマスター
    • チームの仕事の進捗管理
    • メンバーの困りごとを確認し作業の障害となる原因を特定排除を行う
    • チームを健全な状態に保つ
  • プロダクトオーナー
    • プロダクトの責任者として役割を持つ
    • プロダクトバックログの優先順位管理(開発すべき機能、要件のリスト)
    • ステークホルダーとの連携調整
    • メンバーから上がってきたプロダクトに関する問題に責任を持って設定を下す役割も持つ
  • 開発者
    • 開発に関する幅広い業務を担当

スプリントは一連の作業を行う固定機関であり、通常1〜4週間程度。各スプリントごとに何を達成するかが決められます。この何を達成するかを計画することをスプリントプランニング(スプリント系買う)というそうです
いざスプリントが始まったらデイリースクラムでそれぞれのメンバーの進捗や課題を確認するミーティングが開かれます。スクラムのコミュニケーションを改善し、課題の特定、改善が目的です
スプリントが終盤に近づいてきたら、スプリントレビューとスプリントレトロプロスペクティブ(振り返り)を行います。スプリントレビューは、スプリント期間終盤に行う工程で、実装した機能に対するレビューのことです。スプリントレトロプロスペクティブとは、スプリントの振り返りミーティングのことで、スプリントレビューと同様にスプリント最終日に開催されることが多いです。スプリントのよかった点や・課題点を洗い出し、その要因と改善策などをスクラム内で話し合って次回のスプリントに活かすのが目的です。

CI/CDの必要な理由

高速なリリースサイクル

アジャイルやスクラムの開発手法では、頻繁なリリースと迅速な対応が求められます。CI/CDを導入することで、コードのビルド、テスト、デプロイを自動化し、リリースサイクルを短縮することができます。

高品質なソフトウェア

すべての変更に対して継続的にテストを実行することで、バグの早期発見と修正が可能となり、最終的に高品質なソフトウェアが提供されます。

柔軟な対応力

ウォーターフォール開発が詳細な初期計画に依存しているのに対し、アジャイルやスクラムでは計画の柔軟性が求められます。CI/CDを導入することで、小さな変更をすぐに取り込んでデプロイすることができ、迅速な対応が可能となります。

リスク管理の向上

継続的にテストを実行することで、リスクを早期に発見して対応することができます。これにより、プロジェクトの進行中に発生する潜在的なリスクを低減し、プロジェクトの安定性を高めることができます。

必要な理由のまとめ

CI/CDは、アジャイルやスクラムのような近代的な開発手法において、高速かつ高品質なリリースの実現、リスクの低減、柔軟な対応を可能にできると感じました。

[引用]
そもそもなぜCI/CDが必要なのでしょうか?

開発手法について

Discussion