開発手法とプロジェクトの進め方について

#エンジニアブログ

従来のシステム開発では、要件定義でシステム仕様を確定し、それに基づいて設計・開発・テストを行い、お客様へ納品するといった、一つ一つのステップを経てシステムを当初の予定通りに開発していくのが主流でした。しかし、最近の傾向として、システム完成度だけに注力するのではなく、開発スピードやリリースを早めていくことが重視されるようになってきました。そういった側面に対応して、システム開発の手法も従来とは異なるものがでてきています。では、現在どのような開発手法があるのか、そして、その手法が出てきた背景や特徴について取り上げます。

 

 

■基本的な開発手法

まずはシステム開発がどのような流れで開発されていくのか、もっとも基本とされる開発手法を紹介していきます。

 

・ウォーターフォール開発

ウォーターフォール開発は数ある開発手法の中で基礎となっており、従来から最も使われてきた開発手法になります。システムを開発する際には、受託開発や自社開発にかかわらず以下のような順番があり、上から順番に1つの工程が完了したら次の工程に進むという開発手法です。

1.要件定義
システムを導入する目的やシステムに実装したい機能、必要とされる処理能力、稼働率などを検討し、定義していきます。

2.設計
要件定義にて定義した内容をどのように実装していくかの具体的な実装方針を決め、さらに実際に構築していく際のパラメータ(設定値)まで落とし込みます。

3.開発/構築
設計で定めた内容をもとにソフトウェアのプログラミングや、ソフトウェアが動作するための土台であるサーバやネットワーク等のインフラを構築していきます。

4.テスト
開発したソフトウェアやインフラが機能単位で問題なく動作するか確認を行ったり、システム全体を連携させて問題なく動作するかの確認を行います。

5.リリース
開発したシステムを利用者に公開し実際に利用を開始します。

6.運用
リリースしたシステムを安定して稼働させるために監視や保守対応、また不具合が発生した場合の修正対応を行います。

 

この手法では、上記のような工程が一つ一つ順番に進んでいくため、スケジュール計画が立てやすく・進捗も管理しやすい一方、ある程度工程が進んだ後に要件変更や追加が出た際には手戻りが大きくなりスケジュールの遅れが出やすいのがデメリットです。
各工程を着実に進め、テストを繰り返し実施する為、決済システムや金融機関のシステムのような、より確実性が求められるプロジェクトで採用される傾向にあります。また、この開発手法では事前に各工程に見込まれる工数の算出や進捗管理がしやすいため、多くの人員が必要な大規模のプロジェクトにも向いています。

 

■様々な開発手法

 

昨今、IT企業のWeb/モバイルサービスの展開は戦略的な視点でサービスリリースを優先し・ユーザのフィードバックをいち早く取り入れたアップデートを行うことで顧客の囲い込みを図ってきています。そうした展開においては開発途中の変更がしづらい・サービスリリースに時間が掛かる、といった点は戦略のスピード感に適合しないことが多く、その問題点からの派生として様々な開発手法が生み出されました。
ここでは、「アジャイル開発」・「プロトタイプ開発」・「スパイラル開発」の3つをご紹介します。

 

・アジャイル開発
アジャイル開発は、柔軟に変更内容や追加したい機能を取り入れることを目的に、システムの満足度を上げることを目指しています。
まず、全体スケジュールとシステムの全体機能を決め、その後、個別機能ごとに優先順位をつけていき、それを開発期間(例えば1~4週間等)でステップを分けていき、ステップ分けした単位(イテレーションと呼びます)で開発を進めます。そのイテレーション内で、計画・設計・開発・テスト・リリースを行います。この小さなサイクルによって、仕様変更に柔軟に対応でき、リリースも早いので依頼主もいち早くシステムを利用し、次の要件へ活かすことができるため、満足度も高くなりやすいメリットがあります。
一方でデメリットとして、途中で仕様変更に対応していく中で、予定外に開発ボリュームが増え、スケジュールが遅れやすいといった特徴もあります。
Webシステムの中でも1~3か月程度の小規模開発や要望の変化しやすいゲームアプリ開発や研究型のシステム開発に向いています。

 

・プロトタイプ開発
プロトタイプ開発は早い段階で簡単な試作品(プロトタイプ)を作り、事前に依頼主に利用してもらうことで、依頼主の持つシステムイメージとのズレやギャップを少なくし、開発の手戻りを抑止する開発手法です。
プロジェクトによって多少異なるものの、ウォーターフォール開発で行う要件定義に試作品作成が追加したイメージです。例えば、要件定義・試作品作成・修正、設計、開発、テストといった流れとなります。要件定義を元に試作品を作成し、操作イメージを掴み、その試作品に修正を掛けて要件定義を固めていきます。その後、設計・開発に入っていきます。
デメリットとしては、試作品を一度作成し、その修正も必要になるため、開発労力が掛かる点です。また、試作品を作ることで見えていなかった要件が見えてくることにより、要件が当初より増え過ぎることによる大幅なスケジュール遅延を起こさないように気をつける必要があります。
試作品を用いて早い段階で認識相違をなくすことが出来るこの手法では、画面デザインや操作性を重視するような通販サイトやECサイト開発、コールセンター向けのCRM開発等に向いています。

 

・スパイラル開発
スパイラル開発は、システムの個別機能で開発工程を分割し、分割された機能の中で要件定義・設計・開発・テスト・依頼主評価を行っていきます。この段階ではリリースまではされず、あくまで依頼主がシステムを利用してみて改善点を反映しながら、全ての個別機能で同様のサイクルをこなしていき、最終的にそれらを連結してサービスをリリースします。
ウォーターフォール開発ではシステム全体が完成したときに依頼主のシステム評価を受けていましたが、機能単位で開発し評価を行うことで、機能毎に素早く修正を行うことが出来ます。
デメリットとしては、個別機能の変更内容も柔軟に対応できる反面、個別機能での変更が累積していくと、当初の予算を超過しやすくなります。また、個別機能に重点を置いた開発になるので、システム全体の意識が薄れ、当初の開発目的から離れてしまうと、システム全体のバランスが悪くなる恐れもあります。
スパイラル開発では、機能毎での開発をし、連結したシステムとしてリリースを行う為、数か月~年単位の大規模開発、金融業界の勘定系システムや物流業界向けの物流管理システム等の品質が求められるパッケージのシステムに向いています。

 

 

■まとめ

どの手法が優れている、といったことは一概には言えませんし、予算規模やプロジェクトマネージャーの考え方、その企業での決まりもありますので、開発手法を柔軟に選択できる場面というのは多くないことが実情ではあります。

ただ、自身が関わるプロジェクトではどのような開発手法が取られ、メリット・デメリットは何か、他の開発手法と比較してどう違うのかといった視点を持ってプロジェクトに参加することで関わり方も変わってくることになります。また、それはこのプロジェクトが向かうべき方向性やどういった課題を持っているのかが明確になり、自身の業務の円滑化に繋がります。

関連する記事