はじめに
プログラミング初学者の者です。オンラインでプログラミングを学習させて頂いてるのですが、さらに理解を深めていきたいと思い、学習したことを備忘録として、残して理解を深めていきたいと思います。
また、間違った点など、ありましたら、ご指摘いただけると幸いです。よろしくお願いします。
開発手法について
システムの開発手法では、複数の手法があり、プロジェクトに応じて適切な開発手法を使い分けるようです。それぞれには、メリット、デメリットがあり、それらについて簡単にまとめていきます。
ウォーターフォール型
ウォーターフォール(Watefall)とは「滝、落水」を意味する英単語で、文字通り、水が上流から下流に流れるように、決められた作業工程を一つひとつ順番に遂行していくシステム開発手法です。
リリースまでの具体的な開発工程は
「要件定義」<「設計」<「構築」<「テスト」となるのが一般的です。要件定義を策定してから設計に取りかかるなど、ウォーターフォール型の特徴は、上流の工程を100%完了させてから下流の工程に映ります。
要件定義・設計は「上流工程」、開発・テストは「下流工程」と呼ばれます。
また、構築から設計に戻るといった「開発工程の逆戻り・手戻り」が、基本的に想定されていないことも特徴です。
向いているプロジェクト
・機能・予算・納期が明確なプロジェクト
・大規模な業務システムの開発(銀行や公的期間など)
具体的には、業務要件のはっきりしている業務アプリケーション・システム開発や専門コンピューターを活用する汎用系のシステムなど。また、多くのエンジニアの動きを管理しやすいので、大規模システム開発にも向いている開発手法です。
メリット・デメリット
メリットとして
・リソースやスケジュールの管理がしやすい
・幅広いプロジェクトに対応できる
やり直しや修正がないように各開発皇帝で100%を目指すので、最初の要件定義の段階で綿密なシステム開発計画を策定します。そのため、リソースまでのスケジュールを管理しやすい、開発予算や人員の確保などのリソースを管理しやすいメリットがあります。
デメリットとして
・柔軟性が低い
・予算超過や納期遅延のリスクがある
工程ごとに分業化されるウォーターフォール型は、柔軟性が低く、一つの工程が遅れた場合は、後の工程に大きく障害が出るリスクがあります。
例えばテスト段階で修正が必要と判断されれば、設計や要件定義まで手戻りすることもあり、下流工程にいくほどプロジェクトへの影響は深刻化します。ドキュメントの修正・再作成を含め、作業やり直しによる開発工数の増大は、開発予算の超過や納期遅延にもつながるリスクです。
そのため、ITやWeb業界など、市場やニーズの変化が激しく、プロジェクトの進行中に仕様の変更など生じる可能性のあるものには向かない傾向にあります。
プロトタイプ型
ウォーターフォール型を改良した手法が「プロトタイプ型」です。
プロトタイプ(prototype)とは「試作品・原型機」を意味する英単語。
開発(プログラミング)に入る前に試作品を作成して発注者に確認してもらう方法です。制作されたプロトタイプをテスト・レビューしながら、リソースに向けて完成度を高めていく開発手法です。プロトタイピング型と呼ばれる場合もあります。
工程はウォーターフォール型と同様ですが、開発からリリースまでの工程が「試作品の開発」>「テスト・レビュー」>「試作品の修正」>「本開発・リリース」となることがプロトタイプ型の特徴。
向いているプロジェクト
・前例のないWebアプリケーション・システムなどの開発
・全体をコントロールしやすい小〜中規模プロジェクト
メリット・デメリット
メリットとして
・不具合を開発の初期段階で発見できる
・必要な機能を開発前に追加できる
デメリットとして
・開発コストが高騰しやすい
・納期が長くなりやすい
アジャイル型
基本機能のみを開発し、ユーザーに使ってもらってレビューを集め、開発とテストを繰り返す手法です。
アジャイル(ajile)とは「俊敏な・機敏な」さまを意味する英単語。文字通り「俊敏な」開発を実現するため、システム全体を細かい機能に分割し、優先度の高い機能から構築・リリースを繰り返していきます。
アジャイル型の開発工程は大きく2つ。要件定義では、おおまかなシステム要件・仕様を作り、2〜3週間程度で実装できる単位に機能を分割します。分割された機能は、優先度の高い順に「計画」>「設計」>「実装」>「テスト」>「リリース」を1つのサイクルとした「イテレーション(反復・サイクル)」を繰り返し、システムの完成が目指されます。
イテレーションとは、一連の工程を短期間で繰り返す開発サイクルのこと。
イテレーションごとにレビュー・フィードバックを行うアジャイル型は、発注側の担当者の積極的な関与が必須です。担当者の関与度合い、考え方の違いに応じた複数の開発手法が存在していることもアジャイル型の特徴です。
向いているプロジェクト
・用件や仕様が固まっていないプロジェクト
・ECやSNSなどのWebサービス、モバイルアプリやゲームなど
メリット・デメリット
・スケジュール管理・工程管理が困難になりがち
・プロジェクトの方向性がブレやすい
スパイラル型
システムの開発工程をサブシステム(機能)ごとに分割し、重要な機能から開発していく手法です。
スパイラルとは「ループ線」を意味する英単語。文字通り、要件定義以降の「設計」>「構築」>「テスト」>「評価・改善」を1つのサイクルと捉え、ループ線を描くように反復してシステムを完成させます。発注者から1つの機能にOKが出たら、次の機能の開発に取りかかる手法です。
スパイラル型では、まず要件定義でシステムの仕様書を作成したうえで、全体をいくつかのサブシステム(機能)に分割し、開発に取りかかる優先度を決めます。最初の機能をテストしたレビューは次の機能の開発に活用される流れ。プロダクトの完成度を徐々に上げていくことが特徴です。
スパイラル型は、ウォーターフォール型とアジャイル型のメリットを組み合わせたと言える開発手法。アジャイル型と異なるのは、システムが完成するまでリリースされないこと。機能単体でリリースされることはありません。
向いているプロジェクト
・品質重視の大規模プロジェクト(業務システム)
・途中で仕様変更が生じる可能性のある開発
メリット・デメリット
メリットとして
・発注者のレビューを反映させやすい
・プロダクトのクオリティを高められる
デメリットとして
・スケジュール管理がしにくい
・コストが膨らむ可能性がある