システム開発には様々な手法がありますが、その中でもとても有名な開発手法であるウォーターフォール開発。名前の由来は「滝」で、上流から下流に滝が落ちるように工程が進んでいくことをイメージしたネーミングになっているようです。
この記事では、ウォーターフォール開発の定義や種類、メリットデメリットについて解説していきます。ウォーターフォール開発の具体的な進め方についても説明していますので、是非最後までご覧いただき参考にしてください。
ウォーターフォール開発とは?
少しでもシステム開発に携わったことのある方は、ウォーターフォール開発という言葉を聞いたことがあるのではと思います。システムエンジニアだけでなく、システム会社に関わる業種の方は最も最初の段階で学ぶのではないでしょうか。そんなメジャーなウォーターフォール開発の、定義や開発工程の種類に関して説明していきます。
ウォーターフォール開発の定義
ウォーターフォール開発は、システム開発の現場でよく利用されるとても有名な開発手法です。昨今ではアジャイル開発など新しい開発手法も採用されつつありますが、多くのプロジェクトではウォーターフォール開発が利用されています。
ウォーターフォール開発では、下記の工程を上から順に実施していきます。この上流から下流に進捗が進むことが滝のようになっていることが名前の由来となっています。
- 要件定義
- 基本設計
- 詳細設計
- 開発
- テスト
- リリース/運用
この各工程は完成ごとにレビューを行い、問題ないかどうかを確認しながら進めていくという特徴を持ちます。
ウォーターフォール開発工程の種類
先ほどの章で紹介したウォーターフォール開発における、開発工程の種類について詳細に説明していきます。
要件定義
要件定義では、顧客の必要とするシステムの内容を決定することが目的です。具体的にどのような内容かというと、顧客が求める機能やシステムが影響する範囲(スコープ)を決定します。この工程はとても重要で、ここでの定義がきちんと行われていないと顧客の要件を満たせず、「開発失敗」とみなされてしまう場合があります。
基本設計
基本設計では要件定義で決定した事項を実現できるような画面や出力、処理などを機能単位で分割して、各機能がどういったものかや機能間の繋がりなどを設計します。
詳細設計
詳細設計では、基本設計で大枠を作った各機能の中身を詰めていきます。各機能の処理がどのように動いているかを条件分岐レベルの細かい部分まで記載していきます。詳細設計を見れば基本的に開発ができるレベルまで仕上げていく必要があります。
開発
開発工程では、詳細設計をもとに開発を行っていきます。開発にはコーディングだけではなく、ソースコード管理レポジトリの作成やデータベースの作成や環境構築なども含まれます。コーディング規約などコードを書く上でのルールは開発前に決めておく必要があります。
テスト
テスト工程では、開発したシステムが各設計書の通りになっているかをテストし、バグを発見する工程です。発見されたバグに関しては同じバグがシステム内に含まれていないか確認する同件調査を実施したり、バグ混入の原因を調査して開発時の認識齟齬による関連バグがないかを確認する必要があります。
リリース/運用
リリース/運用工程では、成果物を顧客の環境へリリースし、実際に運用していく工程です。リリース時にはUATと呼ばれる受け入れテストを実施します。実際にシステムが動き出し、顧客の利用が開始されてから運用工程が始まります。運用工程では、顧客からの質問に回答したり、何らかのエラーによりシステムで障害が発生した場合の復旧対応などを行います。
ウォーターフォール開発手法のポイント
ここまではウォーターフォール開発の定義や工程をみてきましたが、ここからはウォーターフォール開発のポイントとなるメリットデメリットをご紹介します。
ウォーターフォール開発のメリット
ウォーターフォール開発のメリットは、有名な手法であるため
①開発経験がある開発者や対応経験のある顧客が豊富にいる
②スケジュール管理が簡単 という2点です。
先ほども紹介しましたが、ウォーターフォール開発はシステム開発で、最も使用される開発手法です。そのため、システム開発経験がある方はほぼ確実にウォーターフォール開発の経験があると思われます。また、システムを導入する側の顧客側もウォーターフォール開発でシステムを導入した経験がある場合が多いです。そのため、開発の流れを両者が理解できているため、開発をスムーズに開始することができます。
ウォーターフォール開発においてスケジュール管理に関してもメリットがあります。開発手法の性質上、要件定義を先に行う必要があるため、要件定義を終えた段階で大体の工数が見積もれます。そのため、その工数から各工程のスケジュールがわかりやすいという点があります。
ウォーターフォール開発のデメリット
ウォーターフォール開発のデメリットは、顧客側の仕様変更に弱い点です。要件定義工程から下流へと順に開発を進めるウォーターフォール開発では、上流工程が正しいという前提で開発が進みます。そのため、要件に変更が発生した場合、要件定義より下流の設計から全て改める必要が発生します。
顧客から考えると軽微な要件変更の場合でも開発工程まで進んでいる場合、ソースコードが丸々使用できなくなる場合もあります。この弱点はウォーターフォール開発の歴史の中でも問題となっており、この弱点を補うために、アジャイル開発が生まれたとも言われております。
ウォーターフォール開発の進め方
それでは、ここからはウォーターフォール開発の進め方に関して例を挙げてわかりやすく解説していきます。
ウォーターフォール開発を行う流れ
とある企業で、営業管理システムを構築する場合を例に見ていきます。まず、要件定義として、人事管理システムの必要な機能とスコープを決めていきます。流れは下記のような流れとなります。
- 要件定義 【必要な機能の決定】
今回は従業員の売上成績を蓄積し集計やランキングを表示する機能と従業員の売上を入力する機能を必要機能としました。 - 要件定義 【スコープの決定】
今回は本社にシステム導入を行うと仮定し、スコープは本社勤務する従業員のみと決定しました。 - 基本設計
ユーザが使用する、集計画面や入力画面のボタン配置や表示方法などを決定します。また、データベースにユーザ情報を登録するためのテーブルなどの、必要なデータベースの設計も合わせて行います。 - 詳細設計
実際の処理の流れを決定していきます。集計の際にどのようにデータベースからデータを取得/登録するか、処理の中の条件分岐をどのように行うか、また入力チェックなどを決定します。データベースの方でも各カラムの定義を決定します。 - 開発
詳細設計をもとに実際にデータベースにテーブルを作成したり、システムの環境構築を行い、プログラミングで開発を行います。 - テスト
各設計に基づき、テストケースを作成し、テストを実行します。その後、リリース判断を行います。テストによりバグが発見された場合は、同件調査やバグ混入の深掘りを行い、他にバグがないかを調査します。 - リリース/運用
顧客側の受け入れテストを実施し、顧客の環境にシステムをリリースします。その後システムが使用されてからはシステム運用を行い、システムの安定稼働に努めます。
以上が、ウォーターフォール開発の基本的な流れです。
開発手法の選び方
今回の記事ではウォーターフォール開発についての詳細や、実際に開発が行われる場合の流れを説明しました。実際プロジェクトが始まるとなった場合、本当にウォーターフォール開発を行って問題ないのかを判断する必要があります。ウォーターフォール開発以外にも、昨今よく利用されるようになってきたアジャイル開発やプロトタイピング開発など多数の開発手法が存在します。
その数ある開発手法の中からウォーターフォール開発を選択するのが妥当と言うためにはプロジェクトの特徴をヒントに判断する必要があります。
- 要件定義後に仕様変更がないと考えられる
- 仕様変更にすぐに対応できるシステム構成である
- スケジュール管理を確実に行う必要がある
- スピードよりも正確さが求められる
上記のようなプロジェクトの場合は、ウォーターフォール開発を選択するのが妥当と判断できます。
ウォーターフォール開発まとめ
今回は、ウォーターフォール開発についてご紹介しました。重要ポイントのまとめは以下の通りです。
- ウォーターフォール開発の名前の由来は「滝」
- ウォーターフォール開発の基本的な工程は、要件定義・基本設計・詳細設計・開発・テスト・リリース/運用の流れ
- ウォーターフォール開発のメリットは、経験者が多くて進めやすい点とスケジュールが管理しやすい点
- ウォーターフォール開発のデメリットは、顧客側の仕様変更に弱い点
ざまざまな開発手法がありますので、是非要件にマッチした開発手法を取り入れてください。
当社では、アジャイル開発やウォーターフォール開発など、ご希望に応じた手法でシステム開発が可能です。システム開発をお考えの企業様は、是非お気軽にご相談ください。