この記事の位置づけ
先日まで行っていたインターン中に触れた事項について復習しながらまとめる記事となっています。自分の感じたことを残しておくという意味で書いている側面もあるので、誤りも多々あると思いますがご容赦ください。これら気が向いたらご指摘いただけると幸いです。
今回はインターンで触れられた「ウォーターフォール」と「アジャイル」の2つについて述べていきます。
ウォーターフォール
要求分析→基本設計→詳細設計→実装→テスト(単体テスト→結合テスト)→運用・保守の順で流れる開発モデルになります。
%(画像挿入)
作業を順番に進めていく開発する手法であり、大規模なプロジェクトを大人数で開発することに適しています。
要求分析
ユーザの話を基にソフトウェアで実現するべき機能をまとめる作業。要求仕様書として記述をまとめます。要求される内容は機能仕様と非機能仕様の2つに分けられます。(要件定義は要求工学として一つの分野になるような内容なのでここでは詳細は割愛します)
基本設計・詳細設計
ソフトウェアの要件を満たすようなソフトウェアの機能などを考えます。詳細設計だと処理記述書を書くこともあるのかな?(詳細設計だとほぼコード書いてるのと同じみたいなこともあるので書かないこともあるとか)
テスト
品質管理の際にプログラムに欠陥が残っているかを確認します。後述のV字モデルとかだと設計・PGとテストが対応していたりします。テストについては別記事でまとめようと思うのでここでは割愛します。
メリット
- 開発の進捗管理が容易
- 作業を順番に行うので開発がどこまで進んでいるかすぐにわかります。
- 作業分担が行いやすい
- 信頼性の高いソフトウェアを作りやすい。
- 各種ドキュメントの制作を行いながら開発を行うことができ、テストをしっかりと行うことができるので、ソフトウェアの信頼性を高めやすいです。
デメリット
- 上流工程での遅れが下流工程に大きく影響
- 作業が順番に流れるので、要求定義などのドキュメント作成が遅れるとそのままその後の作業が起これることになります。実際には要求定義が完結せずに次の段階に移らないといけない状況があることも。
- 作業を順番通りに行うことが難しい
- 作業後半で仕様と設計の相違を見つけた場合に前の段階に戻るのは難しい
V字モデル
ウォーターフォールの発展形としてV字モデルがあります。このモデルではドキュメント作成や開発作業とテストを対応させることにより、テストをより合理的に実施することが可能なモデルとなっています。
アジャイル
1つのプロジェクトの中で特定のサイクル(スプリント)を複数回繰り返すことによってソフトウェアの開発を行う方式です。スプリントは1~4週間区切りで行われます。
プロジェクト立ち上げ時に行うこと
プロジェクトを立ち上げた後に行うこととしては以下があります。以下の各項目はスプリントでは繰り替えしません。
- インセプションデッキ
インセプションデッキはプロジェクトの概要に当たるものです。チームの中でプロジェクトに対しての共通理解を得るために行われます。 - ワーキングアグリーメント
アジャイル開発を行う際のルール作成です。この中で各スプリントで行われるデイリースクラムの時間の使い方などの様々なルールが決められます。 - ユーザストーリーマップ
プロジェクトの中で必要な機能などを割り出します。実現したい事項を時系列順に並べます。そのうえで、より詳細な機能を各事項毎に記述していきます。(これらは紙などの上に付箋で張られる事が多いです。)この上で、各機能をいつまでに実装するかを区分します。(前述の付箋を貼った紙の領域を線で区切ります。)
各スプリントで行うこと
以下に記述することは各スプリントの中で行うこととなります。ただし、それをどの程度の頻度で行うのかには差異があります。
- スプリントプランニング(スプリント開始時のみ)
ここでは、プロダクトバックログ(プロジェクトの中で行う必要がある作業)からスプリントバックログ(スプリントの中で行う作業)を抜き出して決定します。重要度や作業の重さを基にしてスプリントの中で行う作業を決定します。 - デイリースクラム(毎日)
チームの中で作業の進捗やその日に行う作業などを確認します。(IPAの資料だと15分でやるとか、立ったままやるとか、朝やるとか書いてありましたが、人数・チームメンバーの勤務地・スケジュールなどによって変化します。実際、私の担当をしていただいた方は16:30からしてましたし、勤務地がばらばらなのでオンラインでやってました...) - バックログリファインメント(適宜)
スプリントプランニングで決定したスプリントバックログの内容を作業状況に合わせて見直します。進捗が早いから次のスプリントで行うであろう作業を今のスプリントに入れたり、逆に抜いたりという作業が行われます。この項で述べている各スプリントで行うことの中で唯一、行うタイミングがきまっていない作業になります。 - スプリントレビュー(スプリント終了時)
スプリントの成果をステークスホルダ―に発表します。成果物のデモなどを行うことがあります。ステークスホルダ―のフィードバックは次のスプリントプランニングなどに活かされます。 - スプリントレトロスペクティブ(スプリント終了時)
スプリントの振り返りを行います。スプリントの成果や反省点などを振り返ることでつぎのスプリントにつなげます。KPT分析などが行われます。
案件として見るウォーターフォールとアジャイルの違い
ここからは開発する側はあまり意識することのない金銭とか契約的な話の違いを見ていきます。
ウォーターフォール型は開発期間及び開発の予算となる資金は契約の際に確定することになります。このため、作業を効率よく進めて費用を浮かせれば利益が増える半面、工数が伸びて経費が増えると案件としての利益は減少します。また、瑕疵責任があります。
アジャイル開発は準委任契約という形で契約が行われます。このため、金額や工数などがウォーターフォール開発ほどしっかり確定していません。ウォーターフォール開発よりも案件として柔軟に開発することができます。
参考