Contents
開発手法を正しく使い分けることができていますか?
昨今のIT技術の発展は目覚ましく、日々さまざまなITサービスがリリースされています。
そうしてリリースされたサービスは驚くほどの速度で改良され、我々の生活をどんどん豊かにしてくれています。
こうした変化の速度に追従するため、旧来のウォーターフォール開発に代わり、アジャイル開発が注目されるようになってきました。最近特によく耳にするようになったアジャイル開発ですが、安易にこの手法を採択するとシステム開発が頓挫してしまうことがあるというのをご存じでしょうか?
ここでは、ウォーターフォール開発とアジャイル開発とを比較し、メリットとデメリットの理解を通じて、それぞれの開発手法をどのように使い分けたらよいか説明します。
開発手法の基本「ウォーターフォール型開発」とは

ウォーターフォール型開発とは、開発されるシステムの全機能において、要件や仕様をあらかじめ厳密に定義してから開発に着手する手法で、システム開発の基本手法として旧来から用いられてきました。
「要件定義→設計→実装→テスト→運用」という開発サイクルを、順番通りに一度だけ実施します。滝を流れる水が下に落ちていく(=ウォーターフォール)ように一方通行で行うことから、ウォーターフォールと名付けられました。
一度定義した要件や仕様を厳守することが前提となるため、後からの変更を基本的に想定していません。変更する場合は、主要な関係者によって変更内容を合意したうえで、開発サイクルをさかのぼって実施することになるため、大きな時間とコストが発生します。
ウォーターフォール型開発のメリット・デメリット

ウォーターフォール型開発のメリットは、計画した通りのシステムが出来上がることと、その工程管理が比較的容易なことです。
ウォーターフォール開発では、開発されるシステムの要件や仕様だけにとどまらず、開発工程・スケジュール・費用・人員計画などをすべて、開発に着手する前に厳密に計画します。
そのため、いったん開発に入ってしまえば計画に沿って進むように管理するだけでよいので、結果として計画通りにシステム開発を完了させること比較的容易になります。
一方デメリットは、開発着手までの計画策定に大きな時間とコストがかかることと、仕様の変更に柔軟に対応できない点です。
計画策定の時間とコストが大きくなるのは、開発するシステム仕様や開発スケジュールを厳密に計画しなければならないためです。
大きいプロジェクトになると計画だけで数年かかることも珍しくありませんし、計画期間が長くなればコストもこれに比例して大きくなります。
また、一度決まった計画を変更することが想定されていないため、変更する場合は開発工程をさかのぼるので大きな時間とコストを要します。
世の中のニーズが加速度的に変化する昨今において、変化に柔軟な追従が難しいことは大きなデメリットといえるでしょう。
新たな開発手法「アジャイル」とは

アジャイル開発とは、機能毎などの小さな単位で、厳密な要件定義や仕様設計を行わず、大枠だけを決めて開発に着手する開発手法です。
「要件定義→設計→実装→テスト→運用」のサイクルを小さな単位(主に機能単位)で何回も繰り返し実施するため、開発途中の急な仕様変更にも柔軟に対応できます。
速やかにソフトウェアやシステムをリリースすることを目的とした手法であることから、英語で「Agile=俊敏・素早い」という単語をとってアジャイル開発と名付けられました。
アジャイル型開発のメリット・デメリット
アジャイル開発のメリットは、仕様変更に柔軟に対応できることと、開発のスピードが早いことです。
しかし、アジャイル開発ではウォーターフォール開発と異なり、最初から仕様変更が発生する前提で、要件・仕様を厳密に定義しないため、仕様変更が発生しても後戻りが容易となり、時間とコストのロスを最小限に抑えることができます。
結果として開発スピードが速くなることと、開発している途中のシステムを実際に見ながら仕様を決定していくことにより顧客の要望に対応しやすく、顧客満足度が上がりやすいのも特徴です。
一方デメリットは、システム開発の目的がぶれてしまいやすいことと、全体管理が難しいことです。
アジャイル開発は良くも悪くも仕様変更に柔軟に対応できるため、目先の仕様変更が繰り返された結果、当初目的としていたものとまったく異なるシステムが出来上がってしまうといった事がよく起こります。
また、全体管理がうまくいかず、複数のチームが個々の判断で機能開発進めた結果、機能同士の連携がうまくいかずに新たなバグが生まれてしまうなど、全体的なコントロールの難易度が大きく上がるといったデメリットもあります。
開発するシステムに応じて使い分けることが大切
実際の現場では、開発プロジェクト発足時点で要求事項を厳密に定義できる顧客が少ないため、とりあえず開発に着手できてしまうアジャイル開発を要求される場面が多いですが、これには注意が必要です。
たとえば、既に安定稼働しているシステムをそのままリプレイスする場合や財務会計システムを開発する場合など、要求される仕様が途中で変更される見込みが少ない場合は、都度仕様を確認しながら進めるアジャイル開発はかえって非効率となってしまいます。
また、アジャイル開発における全体管理に十分なリソースが割けない場合や、そもそも全体管理ができる人員がいない場合、各チームの連携がとれずバラバラに開発が進むこととなり、結果的にシステム全体としての整合がとれなくなったり、予期しないバグが発生したりしてしまうため、このような場合もウォーターフォール型での開発を提言した方がよいでしょう。
要件や仕様を厳密に定義するのが煩雑だからといって、安易にアジャイル開発を採択することは、システム開発に大きな不利益を招いてしまいます。
ウォーターフォールとアジャイル、両方の開発手法を正しく使い分け、円滑なシステム開発プロジェクト運営を推進してください。
[文]片山 浩基 [編集]サムライト編集部