システム開発の方式の代表として「ウォーターフォール」と「アジャイル」があります。
アジャイルは最近何かと聞くようになった方式ですね。
これらを分かりやすくたとえてみます。
ウォーターフォールとアジャイルの概要
それぞれ方式の説明としては以下になります。
ウォーターフォール:要件定義、基本設計、詳細設計、コーディング、単体テスト、結合テスト、リリースのように工程を最初から分けて順に進める方式
アジャイル:1~3週間の短いサイクルで開発を行う。サイクルを何度も繰り返し完成させる方式
概要としては上のようになります。
それではさっそくたとえてみます。
それぞれの方式のたとえ
・試験対策のために単語帳500ページを覚える必要があり、テストは100日後である。
単語帳500ページ覚えることを開発の終了(ゴール)と考えてください。
ウォーターフォール的アプローチ
ウォーターフォール的アプローチは、
「単語帳を前から進め1日5ページを完璧に覚える」
です。
最初の100ページが要件定義、次の100ページが設計、次の100ページがコーディング、次の100ページがテスト、最後の100ページがリリース、というイメージで、前から順番に進めていきます。
このやり方で100日取り組めば、5×100=500ページを100日後に確実に覚えることができます。
また、毎日やることがはっきりしているので途中でやり方を迷う必要がありません。
決まったやり方に沿って進めていけば完成することが保証されているのがウォーターフォールのいいところです。
逆にこの方法の弱い点は何でしょうか?
ずばり、途中の仕様変更に弱いことです。
例えば、
「10日取り組んで100ページまで覚えたところ、突然試験範囲から最初の100ページが除外された」
状況を考えてみてください。
10日をかけて行った作業がすべて無駄になってしまいます。
ウォーターフォールのメリットとデメリットを整理します。
・進め方が決まっており、手順通りに進めれば完成する。
・やる作業が分かりやすい。
・仕様変更に弱い。
・工程を順に進めていくので、ある工程で止まると先に進めない
アジャイル的アプローチ
アジャイル的アプローチは、
「単語帳を1日50ページ進める、覚え方は適当でよいので500ページ終わったら繰り返す」
です。
この方法だと、10日で単語帳を一周できますよね。
これを10回繰り返して単語帳の完成を目指す方法です。
設計を重視しない(開発の前準備にそれほど時間をかけない)ので、早めにコーディングに取り組める利点があります。
また、仕様変更に強いです。
前の例で、10日後に最初の100ページが範囲外になることが分かったとします。
アジャイル的進め方をしていれば、最初の100日にかけた日数は2日だけなのでダメージは少ないです。
変更を修正して次のやり方を策定する、というのが比較的簡単にできます。
逆にデメリットとしてはシステムの完成が保証されていないことがあります。
このやりかたでは適当に単語帳を広く浅く進めていくので、10回繰り返してたとしても全部を完璧に覚えている保証がありません。
ですのでアジャイル開発では「完成の定義」をすることが非常に重要になります。
また、短期間でコーディングやテストまで行うので作業量はかなり多くなります。
自動化ツールやコンテナ、バージョン管理など覚えるべき技術も多いので、日々学習しながら進める必要がありかなりの負担になります。
・早めにコーディングに取り組める。
・仕様変更に強い。
・「完成の定義」を決めていないとシステムの完成が保証されない。
・覚える技術が多く負担が大きい
ウォーターフォールトアジャイルの方式のたとえは以上になります。
新作人気スマホゲーム