はじめに
ソフトウェア開発を行うにあたって、その作り方を体系化したものを「ソフトウェア開発方法論」と呼びます。
その代表的なものがウォーターフォール型開発です。ウォーターフォール型開発は、かつてよく使われていた開発手法ではありますが、徐々に衰退しつつあるとも見ることができます。
今回の記事では、ウォーターフォール型開発の特徴を示し、なぜ時代の潮流と合わなくなってきているかをご説明します。その上で近年よく導入されるようになってきているアジャイル型開発の必要性について述べます。
ウォーターフォール型開発の特徴
冒頭でご紹介したウォーターフォール型開発とは、滝の水が上から下へ落ちるのと同じように、企画→要件定義→設計→実装→テスト、と開発工程をいくつかに分け、それぞれの工程が終わると次の工程に進み、前の工程には戻らないという開発スタイルです。
ウォーターフォール型開発はなぜ時代の潮流と合わないのか?
ウォーターフォール型開発が適しているのは確実性の高いプロジェクトです。ここで言う確実性の高さとは、工程を後戻りすることが無い、あるいは少ないことを指します。
例えば企画→要件定義→設計→実装→テストまで進んで、重要な仕様ミスが見つかったとします。そこから要件定義に戻ることで、再び設計、実装、テストを行わなければならないとしたら人件費含めた開発費など、かなりのコストがかかるでしょう。
私が以前(2010~2012年)参画していた携帯電話開発のプロジェクトは、まさに工程の後戻りが許されないプロジェクトでした。企画・仕様・ハードウェア・ソフトウェア・商品、など広範囲の部署が開発に携わり、半年から1年ほどかけて1つの携帯電話の発売までに至ります。特に出荷直前ともなると、たった1つの変更だとしても、影響範囲がいろいろなところに及び、修正するとしても簡単にはいかず、部署間の調整にコストがかかってしまいます。そのため、後戻りが起きないように開発を工程ごとにわけて、その中で品質を保証するためのテストを行い、ある程度の品質が確保できたら次の工程に行くという流れを取っていました。
工程の後戻りが起きないような確実性の高いプロジェクトであればウォーターフォール型開発は適しています。
しかし、とどまることを知らないIT技術の進化、サービスや顧客ニーズの多様化は、開発者たちの平安な日々を保障してはくれません。次から次に新しいサービス・製品が求められ、しかも競合他社よりいかに早くリリースするかも重要になってきます。
そんな状況の中では、確実性の高いプロジェクトの方が少なくなるのも仕方のないことでしょう。いかに短納期で時間や労力をかけずに顧客が求めるものを提供できるのか、が重要となってきます。そして顧客のニーズは社会の状況など条件によってころころ変わる不確実性の高いものでもあります。
アジャイル型開発の特徴
アジャイル開発は、1~100まで一気に作るという開発スタイルではなく、短い開発期間の単位(イテレーション)を何度も繰り返しながら、成果物のクオリティを向上させていきます。
より小単位での実装→テストを繰り返していくことで後戻りの工数を減らせるというのがアジャイル開発のメリットでもあります。不確実性の高いプロジェクト開発に向いている手法と言えるでしょう。
アジャイル開発においてはソースコードを開発者同士と共有しておくことが必要となります。そのためソースコードのバージョン管理が重要になります。バージョン管理システムとしてよく使われるのがGit/Mercurial/Subversionです。
まとめ
時代の潮流の変化から見た、アジャイル型開発の必要性は見えてきたでしょうか?補足しますと、決してウォーターフォール型開発が使えないものというわけではありません。確実性の高いプロジェクトに対しては充分効果もありますし、長年使われてきた伝統や実績のある開発手法でもあります。
ただ、近年のIT技術の高度化や開発サイクルの短期化、サービスの複雑化などの要因によって、ウォーターフォール型開発が合わないケースが増えてきているのは確かでしょう。より短期間で効率よくサービス・製品を開発することを求められる中、仕様変更も頻繁になり不確実性は高くなってきています。
あなたのいる開発現場は確実性が高いプロジェクト、不確実性が高いプロジェクト、どちらでしょうか?現場に合わせた開発手法を選択することが重要です。
本ブログは、Git / Subversionのクラウド型ホスティングサービス「tracpath(トラックパス)」を提供している株式会社オープングルーヴが運営しています。
エンタープライズ向け Git / Subversion 導入や DevOps による開発の効率化を検討している法人様必見!
「tracpath(トラックパス)」は、企業内の情報システム部門や、ソフトウェア開発・アプリケーション開発チームに対して、開発の効率化を支援し、品質向上を実現します。
さらに、システム運用の効率化・自動化支援サービスも提供しています。
”つくる情熱を支えるサービス”を提供し、まるで専属のインフラエンジニアのように、あなたのチームを支えていきます。
No Comments