![見出し画像](https://assets.st-note.com/production/uploads/images/46774469/rectangle_large_type_2_2cceb04a7d824f74ba545b3a8a645039.png?width=800)
ソフトウェア開発のプロセスモデルについて
対象の読者
・これからソフトウェアを開発しようと考えている人
・ソフトウェア開発について基礎的な勉強したい人
・ソフトウェア開発の工程について知りたい人
このチャンネルを初めてご覧の方は以下の記事を一読いただけると幸いです。
はじめに
今回は、ソフトウェア開発の工程を体系づけたものである『ソフトウェア開発のプロセスモデル』について説明します。
ソフトウェア開発をはじめて行なうとき「どうやって作るか」という具体的な工程についてよく知らない人はぜひ一読ください。
料理や裁縫、建築にいたるまで「ものづくり」では制作に工程があり、段階的に制作が進んでいくことが多いかと思います。
ソフトウェア開発もこれらと同じように、各開発工程のもと開発を行います。
ソフトウェア開発の開発工程については、いくつかの体系立てられたプロセスモデルが用途や特性によってモデリングされています。
このうちの代表的な3つのモデルについて今回は紹介します。
ソフトウェア開発のプロセスモデル
ソフトウェア開発にはいくつかのプロセスモデルが存在しており、多くのチームがそれらのモデルに沿ってソフトウェア開発を行なっています。
これらのプロセスモデルは、ソフトウェアをより良く開発するために、試行錯誤が繰り返されて生み出されたものです。
古くから使われているモデルもありますし、比較的新しいモデルも存在します。
用意されたプロセスモデルをはじめから、完全に理解することは難しくチームとして実践するには経験が必要となります。
しかし、各モデルの特徴や解決したいポイントを抑えて適切に運用することで、闇雲に開発を進めるよりも安全に、品質の高いソフトウェアを開発することができます。
ソフトウェア開発の基本的なプロセス
多くのモデルに共通している基本的なプロセスセスは次の4つです。
[要件定義] どんなものを作るかを決める
[設計] どうやって作るかを決める
[製造] ソフトウェアを製造する
[テスト] ソフトウェアをテストする
このプロセスは基本的に上から順番に進んでいきます。
これから紹介するプロセスモデルは、様々な方式に分かれていますが、基本的にはこの基本プロセスをどこかに内包しています。
各プロセスモデルを勉強する前に、まずはこの基本的な4つのプロセスを覚えておきましょう。
ウォーターフォールモデル
まずはじめに『ウォーターフォールモデル』を説明します。
ウォーターフォールモデルは、最も有名でよく知られたモデルです。
ウォーターフォールモデルには次のような特徴があります。
・各工程を一つずつ順番に進めていく(工程は並行しない)
・基本的に一度の開発で各工程は一度しか行われない
ウォーターフォールでは、次の工程へ進むための条件が設定されており、なるべく前工程へ手戻りが発生することを防ぎます。
工程が上流から下流へ一方通行で進んでいくことを滝になぞらえウォーターフォールモデルと呼ばれています。
スパイラルモデル
ウォーターフォールモデルは、基本的に各工程を一度ずつ進んでいくモデルでしたが、この手法では開発終盤に大きな問題が発生するとリカバリーが難しいなどいくつかの問題がありました。
『スパイラルモデル』とは、ウォーターフォールモデルの欠点を補うために生まれた手法です。
スパイラルモデルの特徴は次のとおりです。
・要件定義-設計-製造-テストを何度も繰り返す
・1回の開発ループで段階的なプロトタイプを開発する
このモデルでは、ウォーターフォールモデルのメリットである段階的な工程による製造手法は活かしつつ、短い開発サイクルを何度も繰り返すことで、後工程で問題が発生しても次のサイクルで修正することができます。
また、開発の途中で実際に動かせるプロトタイプを作成することで、関係者間での認識の齟齬や抜け漏れなどを防止することもメリットの一つです。
スパイラルモデルは、『反復型開発』と分類される手法です。
反復型開発には、他にも「インクリメンタルモデル」や「イテレーティブモデル」などがあります。
アジャイルソフトウェア開発
『アジャイルソフトウェア開発』は現在最も人気がある手法で、過去のソフトウェア開発プロセスの問題をより柔軟に解決するために生み出されました。
アジャイルソフトウェア開発は、特定の開発手法を指してはいません。
『アジャイルソフトウェア開発宣言』と呼ばれる原則をもとに作られた各開発手法の総称になります。
・プロセスやツールよりも個人と対話を
・包括的なドキュメントよりも動くソフトウェアを
・契約交渉よりも顧客との協調を
・計画に従うことよりも変化への対応を
この4つの価値をもと様々なアジャイルソフトウェア開発手法が存在します。
特に『スクラム』『XP(エクストリーム・プログラミング)』などが有名です。
各手法によって違いはありますが、アジャイルソフトウェア開発は、ウォーターフォールと比較すると、事前の「計画」よりも、開発中に発生する問題に対しての「適応性」に重視したプロセスといえます。
アジャイルソフトウェア開発の1つの手法であるスクラムでは、開発期間を「スプリント」と呼ばれる一定の期間に固定して何度も繰り返します。
スプリント期間中には要件定義、設計、製造、テストなどを行います。
手法としてはスパイラルモデルに近いですが、スクラムの場合はスプリント内での工程に制限はなく、テストだけを行なうスプリントや、製造だけを行なうスプリントも許容されます。
どの手法を選ぶが良いか
どんな手法を採用したらよいかは、チームの規模や開発経験の成熟度によって変わってきます。
ここでは、僕の考える個人の経験からポイントを記載していきます。
■ プロジェクト人数
プロジェクトの人数が多くなればなるほど、計画通りに開発を進める難易度が高くなります。
開発チームが数十人を超えるような大規模なチームにおいては計画や段階的な工程に重きを置いているウォーターフォールモデルやスパイラルモデルが適しているでしょう。
逆にアジャイルな開発手法の場合、10人程度の小規模チームに適していると言われています。アジャイル開発手法であるスクラムでは、チームの人数は3人~9人程度が適切であると言及されています。
■ 問題解決の複雑性・難易度
ソフトウェアが解決しようとしている問題の複雑性や難易度によっても選択すべきモデルは変わってきます。
例えばスタートアップ企業など新しいビジネスや製品を開発することを目的としている場合、柔軟に開発サイクルを繰り返し、何度もプロトタイプによるフィードバックを得るほうがプロジェクトの成功確率は高まります。
そのため、アジャイルのような問題への適応性を重視したモデルが適しているといえます。
逆に製造するものが比較的シンプルで、実績のあるものであれば、プロジェクト完了までの計画が事前に見えやすいウォーターフォールのようなモデルの方が安全にプロジェクトを進めることができます。
■ プロジェクトチームの開発経験
プロジェクトチームの開発経験が浅い場合、ウォーターフォールモデルやスパイラルモデルは適していない場合が多いです。
上記モデルは、段階的な工程での開発となるため、事前の計画の重要性が高くなっています。
特にウォーターフォールモデルでは、前工程への手戻りがしにくいため、要件定義や設計の工程で「これから起こりうる問題を事前に洗い出せるか」がプロジェクト成功に大きな比重を占めてきます。
ソフトウェア開発の経験値があまり高くないチームにおいては、少しずつ目に見える形でプロジェクトを進めていけるアジャイルのようなモデルの方が適しているでしょう。
ここで記載したケースはあくまで一例であり、小規模なチームでウォーターフォールモデルを選択することも、簡単なアプリケーションをスクラムで開発することも間違いではありません。
開発メンバーの特性やプロジェクトの状況をみて適切なプロセスモデルを選択することが重要です。
まとめ
製品の特性やチームの状況に適した『プロセスモデル』を選択して開発することで、開発プロジェクトの成功確率を上げることができます。
チームでのソフトウェア開発をはじめる時は、ソフトウェア開発のプロセスモデルについて勉強し、いずれかのモデルに沿って開発を進めるとよいでしょう。
アンケートのお願い
このチャンネルでは、これから提供していくコンテンツやサポートの内容を改善していくために、アンケートをお願いしています。
ぜひアンケートにご協力ください。
アンケートはこちらから
この記事が気に入ったらサポートをしてみませんか?