システム開発の手法とは、業務システムの開発工程を構造化し、計画・制御するための枠組みのことです。
そうしたシステム開発手法は、今日までにさまざまなものが考案されてきましたが、それぞれに長所/短所があり、プロジェクトの種類や状況に応じて最適な開発手法を選択する必要があると言えるでしょう。
今回はシステム開発手法の中でも特に有名な「ウォーターフォールモデル」「アジャイルソフトウェア開発」「スパイラルモデル」の3種についてご紹介します。
ウォーターフォールモデル
ウォーターフォールモデルは、従来の工学的な開発手法をそのままシステム開発に適用したものであり、古くからあるもっともポピュラーな開発手法です。
ウォーターフォールモデルにおいては、「要件定義」「外部設計(基本設計)」「内部設計(詳細設計)」「実装(プログラミング/コーディング)」「評価(テスト)」「運用、保守」といった工程を、「水が高い所から低い所に流れる」ように、上流工程から下流工程へ順次実施していきます。
プロジェクトを逐次的な工程に分割し、若干の重複や手戻りは許容されるものの、原則として各工程が完了したことをもって次工程に進むことで、各工程成果物の品質を担保し、工程間の後戻りを最小限に抑える事ができます。
各工程が逐次実施され、前行程への手戻りが少ないことから、工程の進捗が管理しやすい事がこの手法のメリットといえます。
逆にこの手法のデメリットとしては、各工程完了を以て次工程に入る事から、「以前の工程に誤りが無い」事を前提としているため、仮に上流の工程に誤りがあったり、下流に進むにつれてシステムが具体的に見えてきた事によるユーザからの修正要求などに対応する事が困難であることなどが挙げられます。
アジャイルソフトウェア開発
上記のようなウォーターフォールモデルの弱点を克服するために考案された開発手法の一つが、反復型開発です。その反復型開発からさらに派生した手法が、アジャイルソフトウェア開発です。
アジャイルソフトウェア開発手法では、開発対象となるシステムを機能毎の小さな単位に分割し、「計画」「要件定義」「設計」「実装」「テスト」といった工程を、分割した単位毎に反復的に行い、小さな機能を1つずつ追加開発していくことで、最終的にシステム全体の開発を行います。
この手法では、各反復が完了する毎に追加した機能を実装したソフトウェアをリリースし、プロジェクトにおける各機能の優先度を評価し直します。
アジャイルソフトウェア開発手法は、現実世界で起きる変更に速やかに適応することに主眼を置いており、ユーザからの修正要求や、技術的な革新に対応が容易であるというメリットを持っています。
その半面、小さな反復を繰り返すという性質上、大規模なシステム開発には向かず、工程の進捗管理も困難である、というデメリットがあります。
ウォーターフォールとアジャイルの長所を生かした「スパイラルモデル」
反復型開発手法としてトップダウン設計とボトムアップ設計の長所を生かしたソフトウェア開発手法として考案された手法がスパイラルモデルです。
スパイラルモデルは「設計」と「プロトタイピング」を反復し、開発していく手法です。
スパイラルモデルでは、設計目標を決め、最初の反復完了時点でユーザが進展を評価し、各反復ごとに工学的分析を行いつつ目標到達へ向けて反復を繰り返していきます。
スパイラルモデルにはシステムの規模やスケジュールの予測が立てやすく、進捗を管理しやすい、要求仕様の変更にも対応しやすい、上流工程(要件定義、設計等)にスケジュールを取られ下流工程に遅延の影響が出るといったことが起きにくい、というメリットがあります。
スパイラルモデルでは反復回数が増えればその分工期が延びてしまうため、予め反復回数や、反復毎の進展を予測・定義しておくことで進捗管理をしやすくすることができます。
また、開発ツールを使うことで、手戻りが少なく開発を進めることが可能になります。