「ソフトウェア開発の現場でよく出てくるウォーターフォールモデルってなんだろう?」
「ウォーターフォールモデルってどうやって開発するのだろう?」
「ウォーターフォールモデルで開発する時に役立つツールはあるのだろうか?」
近年、ソフトウェア開発の現場では様々な手法が活用されてきています。しかし、日本のソフトウェア開発の現場ではまだまだ根強く活用されているのが「ウォーターフォールモデル」と言われる開発手法です。
今回はウォーターフォールモデルとはどの様な開発手法か、ウォーターフォールモデルの特徴、開発する時のメリットやデメリットを解説。併せて役に立つツールに関して紹介します。
この記事を参考にして、ウォーターフォールモデルでの開発を上手く実施し、プロジェクトを成功に導けるようにしましょう。
ウォーターフォールモデルについての基本的な説明
ウォーターフォールモデルとは一体どういう開発手法なのか?その成り立ちから説明していきたいと思います。
ウォーターフォールモデルは文字通り「滝」を意味し、W. W.ロイスによって発表された論文の内容が元になったとされています。しかし、論文内には「ウォーターフォールモデル」という記述は無く、また、前工程への後戻り(見直し)も提唱されています。その後、T.E.BellとT.A.Thayerによる論文の中で初めて「ウォーターフォール」という用語が用いられ、B.W.Boehamが出版した本において「ウォーターフォールモデル」のオリジナルはロイスだと述べられています。
本稿では「ウォーターフォールモデル」の特徴を述べ、実際のプロセスを紹介し、活用できるツールの紹介をしていきます。
ウォーターフォールモデルの特徴やメリット・デメリットについての解説
ここではウォーターフォールモデルの特徴やメリット・デメリットについて解説します。
ウォーターフォールモデルの特徴
プロセスが、要件定義・設計・実装・テストのように各段階が明確に定義されており、それぞれのフェーズが完了してから次のフェーズに進みます。そのため、前フェーズの問題点が後フェーズに影響を与えることが少ないことが特徴の1つです。
また、各段階の仕様やスケジュールが予め定められているため、全体の計画性が高く、開発スケジュールや予算管理において有効な手法とされています。
ウォーターフォールモデルのメリット
ウォーターフォールモデルのメリットとしては以下のようなことが挙げられます。
①フェーズが明確であるため計画性が立てやすい
各段階が明確に定義されていることが特徴の1つに挙げられていましたが、それぞれのフェーズが完了してから次のフェーズに進みます。そのお陰で全体の計画が立てやすい傾向にあります。
②品質管理に配慮している
ウォーターフォールモデルでは、各段階でレビューやテストを実施することで、品質の向上を図っています。各段階での品質管理により、最終的な製品の品質を高めることができます。また、段階を着実に完了してからフェーズ移行するため、抜け漏れが少ない開発手法になります。
③プロセスの進捗状況が可視化される
ウォーターフォールモデルでは、各段階が完了したら、その結果を文書化することが多いです。また、各段階でのチェックが入るため、予定も立てやすく、チェックのタイミングまでの状況も可視化しやすい傾向にあります。そのため、プロセスの進捗状況を可視化し、プロジェクト全体の進捗状況を把握することが容易となります。
ウォーターフォールモデルのデメリット
ウォーターフォールモデルのデメリットとしては以下のようなことが挙げられます。
①途中での変更に対応しにくい
ウォーターフォールモデルでは、開発の各フェーズが直列に実行されます。そのため、変更が必要になった場合は、先に進む前に前のフェーズに戻り、再度作業を行う必要があります。従って、顧客ニーズの変化に対応することが難しく、プロジェクトの遅延やコストの増加に繋がることがあります。
②設計フェーズでの不備が後の工程に影響を与える
ウォーターフォールモデルでは、設計フェーズでの不備や誤りが後工程に影響を与える可能性があります。設計フェーズで不備があり、開発の後半で発見された場合、それを修正するためには、再び設計フェーズに戻る必要があります。これにより、プロジェクトの遅延やコスト増加につながる可能性があります。
③ドキュメントに依存しすぎる
ウォーターフォールモデルでは、各フェーズで成果物となるドキュメントが必要になることが多いです。しかし、プロジェクトの進捗や成果物の品質をドキュメントに依存しすぎることで、コミュニケーションの欠如や、実際の開発作業とドキュメントが不一致が発生することがあり、プロジェクトの遅延に繋がる可能性があります。特に発生しやすいのが、実際の開発物とドキュメントが不一致になることが発生しやすいです。(遅延させないための修正漏れなどが発生しやすい。)
ウォーターフォールモデルが適していると考えられる開発
ウォーターフォールモデルが適していると考えられる開発は以下のような開発が挙げられます。
要求・要件が明確かつ変更が少ない開発
ウォーターフォールモデルは、各フェーズが完了してから次のフェーズに進む直線的な開発手法であるため、要件の変更があると後のフェーズに影響を与える可能性があります。そのため、要件が明確で変更が少ない場合に適しています。具体的には、ハードと連携して開発が進められる組み込み機器開発が挙げられます。組み込み機器はハード前提で動きを明確にすることが多く、ソフトウェアのバージョンアップを頻繁に行えることが少ないため、仕様をしっかりと作り込んでから開始するので適していると言えます。
安定的な技術やプラットフォームが使用される開発
ウォーターフォールモデルは、各フェーズが完了してから次のフェーズに進む直線的な開発手法であるため、途中で技術やプラットフォームが変更されると後のフェーズに影響を与える可能性があります。そのため、安定的な技術やプラットフォームが使用される場合に適しています。
ウォーターフォールモデルとアジャイル開発の違い
ウォーターフォールモデルは直線的なプロセスを採用しているのに対し、アジャイル開発は反復的で柔軟性があります。
ウォーターフォールモデルでは、進行中に大きな変更を加えるのは難しく、一度進めた段階に戻ることが困難な場合があります。一方、アジャイル開発では、継続的なフィードバックを得ながら開発プロセスを改善し、進行中に必要な変更を加えることができます。その反面、ウォーターフォールモデルは品質面においてはフェーズがしっかりとしているため高いですが、アジャイル開発では意識しなければ品質面に課題が発生しやすくなります。
開発プロジェクトの性質や要件によって、どちらが適切かは異なります。開発にあった手法を使うようにしましょう。
詳しい比較は過去の記事をご参考ください。
ウォーターフォールモデルの開発プロセスについての解説
日本企業ではウォーターフォールモデルを発展させたV字モデルを活用する開発が多い傾向にあります。ここではこのV字モデルに沿って解説を行います。
V字モデルとは
ウォーターフォールモデルでは、水が落ちるように工程を上流から下流に並べたものです。その工程をV字モデルでは、開発フェーズに対応するテストが対称的な形を取ります。開発フェーズが上から下に進むのに対して、テストフェーズは下から上に進んでいきます。開発フェーズにおいて作成された仕様書や設計書に基づいて、テスト仕様書を作成し、そのテスト仕様書に基づいてテストを実施します。
各プロセスの詳細について
各プロセスの詳細について、以下に説明を行っていきます。
①要件定義
システムテストと対になるフェーズ。
最も重要なフェーズになります、この段階で要求→要件に落とし込んで明確にする必要があります。顧客ニーズに関しても、この段階で盛り込む必要があり、あらゆるパターンを想定します。ここでは異常が発生した場合のケースも必要であれば洗い出すようにします。業務フローやシステム構成図などの図が使われることが多いです。この時、要件定義書を書いてレビューを実施し、次のフェーズに進めるのが一般的です。また、ここでシステムテスト用のテストパターンなどを明確にすることが望ましいです。
②基本設計
結合テストと対になるフェーズ。
要件からシステムでどの様に実現するのかを明確にしていきます。どの部分でどういう機能を担っていくのかを細分化し、各々のパーツに関して詳細化していきます。ここでは通信シーケンスを明確にするなど、パーツ間のことに関しても検討するようにしましょう。この時、基本設計書を書いてレビューを実施し、次のフェーズに進めるのが一般的です。また、ここで結合テスト用のテストパターンなどを明確にすることが望ましいです。
③詳細設計
単体テストと対になるフェーズ。
各ブロックの細かな設計を実施します。プログラムを書くためのフロー図などを活用し、どの様なロジックで実装するかを明確にしていきます。このロジックにおいては必ずフェール処理を考えるようにすることで、エラー発生時の動作をより明確にすることができます。この時、詳細設計書を書いてレビューを実施し、次のフェーズに進めるのが一般的です。また、ここで単体テスト用のテストパターンなどを明確にすることが望ましいです。
④プログラミング(実装)
プログラミングを実施する部分になります。
プログラムを書くためのコーディング規約に則って各位がコーディングするのが一般的です。昨今ではここでモブプロやペアプロを採用することもあります。実際のコードが詳細設計通りに実装されているかレビューを実施し、次のフェーズに進めるのが一般的です。また、この時、次の単体テストに向けたテストコードを意識することも重要です。
⑤単体テスト
詳細設計と対になるフェーズ。
ここではブロック毎で完結するテストを実施していきます。テスト設計に関しては予め詳細設計の段階で作っておくと期間が短くなります。ただし、プログラミング実装内容で変更があることは往々にして発生していると思います。再度テスト内容に関しては見直しを実施しましょう。また、ここで重要な問題があった場合には詳細設計フェーズまで戻って、詳細設計書の修正を併せて実施するようにしましょう。
⑥結合テスト
基本設計と対になるフェーズ。
ここではブロックとブロックの結合部分のテストを実施していきます。通信シーケンスの確認などのタイミングテストや、フェールセーフテストを入念に実施するようにしましょう。ブロックとブロックはそれぞれ別々の開発者が作ることが発生しやすいと思います。設計思想のすり合わせをこの段階でしっかりと行うようにしましょう。また、重要な問題があった場合には基本設計のフェーズに立ち戻り、基本設計書の修正を併せて実施するようにしましょう。
⑦システムテスト
要件定義と対になるフェーズ。
ここではシステム(製品)としてのテストを実施してきます。第三者目線でのテストを心がけるとよいでしょう。実際のユーザに近いステークホルダーの方に確認してもらうことも一つの方法になります。ここで問題が発生した場合には重大な問題に繋がる可能性が高いため、基本的にはこの段階では問題が発生しないようにしたいところです。
ウォーターフォールモデルでの開発に役立つLychee Redmine
ウォーターフォールモデルで開発をしていくのにかかせないのがプロジェクト管理。このプロジェクト管理を行うツールとしてオススメなのがLychee Redmineです。ウォーターフォールモデルはスケジュール管理がしやすく、可視化することが容易です。
この可視化に使われることが多いのがガントチャート。Lychee Redmineでは通常のRedmineに搭載されているガントチャートより更に使いやすく、機能も充実しています。活用することで更にウォーターフォールモデルでの開発をスムーズに進めることができます。
ウォーターフォールモデルにおけるLychee Redmineの活用事例を以下に記載します。
①バージョンの活用
各フェーズを更にステップ1、ステップ2、ステップ3といった1ヶ月単位で区切るようにし、それぞれのステップ毎にチケットを登録しましょう。そうすることで、いついつまでに完了するというのがより詳細に明確化することができるようになります。細分化したものが予定通り進んでいるかを確認できるようにしましょう。
②バーンダウンチャートの活用
本活用方法で今どれだけ終わっているかを視覚的に確認しましょう。計画線を期日ベースに変えることも可能です。期日が重なっているというのが可視化され、負荷が集中しているなどがわかり、対処を検討することができます。ただし、チケットの粒度に関しては1チケット単位で合わせるようにしましょう。
Lychee Redmineは以下のようなプランになっております。
プラン | 月額料金 | 利用機能 |
フリー | 無料 |
|
スタンダード | 900円 |
|
プレミアム | 1,400円 |
|
ビジネス[無料トライアルはこちらをお試しできます] | 2,100円 |
|
フリープランは基本機能(ワークフロー・通知設定・ファイル共有・Wiki)とカンバン機能の限定された機能しか利用できませんが、有料プランはガントチャートをはじめすべての機能が利用できます。
有料プランは30日間の無料トライアル期間を提供しています。無料期間終了後も自動課金されることもないためリスクなく始められ、その価値を実感できるはずです。
ウォーターフォールモデルで開発を成功に導きましょう!
ウォーターフォールモデルについて解説し、メリット・デメリット、各フェーズについても詳細を説明してきました。本文でも述べたようにウォーターフォールモデルは日本のソフトウェア業界でまだまだ活用され、品質確保を担ってきております。みなさまも是非本記事を読んでプロジェクトに活用してみてください。そして、プロジェクトを成功に導くようにしましょう!