JITERA

お問い合わせ

ウォーターフォール開発の工程やメリット・デメリット、注意点を解説

ウォーターフォール開発の進め方とメリット・デメリット

ソフトウェア開発の手法には様々なモデルがありますが、少なくとも日本のIT企業に最も多く採用されているモデルの1つがウォーターフォール開発になります。

アジャイル開発という開発モデルも多く採用されていますが、ITゼネコンという俗称が示すように、まるでビルや橋を建設するかのような体制で業務をこなす日本のIT企業の姿勢によりマッチしている開発モデルは、ウォーターフォール開発と言えます。

本記事では主要なソフトウェア開発モデルである、ウォーターフォール開発におけるメリットやデメリットなどを解説していきます。

アバター画像

文系大学出身で、25歳の時にIT業界に足を踏み入れました。ヘルプデスクから要件定義まで、下流から上流まで文字通り叩き上げでキャリアを築き上げました。取得した資格もいつの間にかもう2桁に。趣味も資格取得。あと、映画鑑賞と飲み会。

ウォーターフォール開発とは?

ウォーターフォール型の開発とは、システム開発のための開発方法のひとつで、非常に基本的な開発概念となります。滝のように上から下に向けて水が流れるように開発していく様子から、ウォーターフォール型という名称がつけられました。一般的には、次の手順で開発を進めていきます。

  • ステップ1:開発したいシステムを決定する
  • ステップ2:開発に必要な機能を決定する
  • ステップ3:実際にシステムを開発する
  • ステップ4:開発したシステムをテストする

最初の段階で、具体的な画面やすべての機能を決定して開発に着手するため、開発の全体像について見渡しやすいというのが大きな特徴です。

ウォーターフォール開発の工程・進め方

ウォーターフォール開発はまるで建築作業のように、要件の整理や設計をしっかりと行ってから製造や運用の作業に移行し、大きなトラブルがない限りは1つ前のステップに戻ることはありません。

従って、前述した様にITゼネコンと言われることもある日本のIT企業の開発体制と相性が良いモデルです。より詳細に説明すると、業務の進め方は以下のようなステップを順番にこなしていく形になります。

  • ステップ1:要件定義
  • ステップ2:外部設計
  • ステップ3:内部設計
  • ステップ4:コーディング
  • ステップ5:テスト
  • ステップ6:運用

ステップ1:要件定義

ソフトウェア開発においてまず最初に行わなければならない開発工程が要件定義です。これはクライアントの要望をヒアリングし、言語化していく作業です。

誰が何のためにそのシステムを使用するのか、または何のためにその修正を施すのかを明確にすることにより、開発内容の大枠を決めることができるようになります。

後述する、ウォーターフォールの小回りが利かないというデメリットをなるべく小さくするためにも、力を入れなければならない開発工程です。

ステップ2:外部設計

外部設計は、要件定義で決めた内容をシステムに落とし込む作業を行う開発工程で、具体的な機能や画面遷移などを決定し、文書に残していきます。

クライアントの要望を聞きつつもプログラマーの意見も取り入れ、両者の意向を満たすように調整していかなければなりません。

開発現場の状況によっては、後述する内部設計と同様に、前述した要件定義の開発工程で一気に行う場合も少なくありません。

ステップ3:内部設計

内部設計は外部設計で決めた内容をプログラムに落とし込む作業を行う開発工程になります。つまり、どのクラスにどのような機能や条件を追加するか、どのデータベースを使用するかなどをこの開発工程で決定します。

プログラムに落とし込んで実現できなければ、要件定義や外部設計で決めた内容は何も意味がないため、前述した様に外部設計とともに要件定義の開発工程で共に行う場合が多いです。

ステップ4:コーデイング

コーディングは、内部設計で決めた内容をプログラミングで実現する作業を行う開発工程になります。コーディングを行う際には様々な作法があるため、タグの位置や変数の名前などは適当にやらず、その現場の方針に従う必要があります。

また、プログラミングの内容を他の人から見てもわかりやすくするため、コーディングの内容は文書に残す必要があります。

ステップ5:テスト

テストはプログラミングにミスがないか、要件通りの機能に出来上がっているかを確認する作業を行う開発工程になります。

テストと言っても様々な種類があり、プログラミングの内容にミスがないかを確認する単体テスト、複数の機能を合わせた時に誤作動を起こさないかを確認する結合テスト、実際の業務の流れに沿って操作して不具合がないかを確認する受入テストなどがあります。

ステップ6:運用

運用とは、テストまで完成してエンドユーザーに公開されたシステムが、正常に動いているかを監視する作業を行う開発工程です。

もしも異常が見つかった場合は関係部署や関連会社に連絡して対策を協議・実施する必要があります。異常がなかった場合も監視内容などを文書にまとめてクライアントや経営陣などに提出しなければなりません。

業務効率化システムを開発したいなら「ジテラ」へ!他社より1.4倍速い開発、お返事は3日以内、開発知識ゼロでもOK!、お見積りは無料。お見積りは無料!

ウォーターフォール開発のメリット

ウォーターフォール開発は当然の事ながら、日本国外のIT企業でも多く採用されている開発手法になります。その理由としては、やはり多くのメリットを持っているからです。

巷ではウォーターフォール開発は古い開発手法である、アジャイル開発に比べてメリットが少ないという声も少なくありませんが、決してそんなことはありません。

関連記事
ウォーターフォール開発モデルとは?アジャイル開発との違い、向いているプロジェクトを解説
ウォーターフォール開発モデルとは?アジャイル開発との違い、向いているプロジェクトを解説

多様な開発方法に対応できる

ウォーターフォール開発はシステム開発の基礎ともいえる開発手法なので、多様な開発方法に対応できるモデルです。

なぜなら個々の役割分担が明確で、完成までの作業のイメージがしやすいため、エンジニアはこれまでに手掛けたプロジェクトの経験を新しい現場にも適用することが比較的簡単だからです。

個々の役割分担が明確である点は人員を採用する側にもメリットがあり、どのようなスキルや経験を必要とするか、数を絞ったうえで明確になるため、適切な人材とマッチングしやすくなります。

アジャイル開発の場合ですと、様々な開発工程の経験が必要となるため、満足できる人材を探し出すことは簡単ではありません。これは日本だけでなく、世界的に人手不足が深刻化しているIT業界でなら猶更のことです。

スケジュール管理がしやすい

ウォーターフォール開発は開発方法が明確なので進捗管理がしやすいというメリットもあります。

開発方法が明確ということは、何をどのような順番でやらなければならないかが明確ということでもあるため、スケジュールが作成しやすくなり、加えてその精度も高まります。

また、不測の事態が起こって遅延が生じそうになったとしても、前述した様に役割が明確であるため、どの人材を応援に回せば良いか、またはどのような人材を緊急で募集するかが明確になります。

ソフトウェア開発においてリリースの遅れや中断は金銭面だけでなく、会社間での信頼関係にも大きなマイナスの影響を及ぼすため、要求定義から運用までの流れが明確なので予定の管理がしやすいというのは、プロジェクト運営において非常に重要な要素です。

品質管理がしやすい

ウォーターフォール開発は事前に、具体的な機能や画面イメージ、データの処理方法を決めるため、品質の管理がしやすい開発モデルです。

事前にこれらの要素が決まっていれば、テストの内容を考える時間やテストの実施時間を多く取れるため、より正確かつ緻密なテストを行える可能性が高くなります。勿論、バグの修正のための時間も多く取れるため、余裕を持った対応をすることが可能になります。

もしもバグを残したままリリースをしてしまうと、重大なセキュリティ事故や誤作動に繋がり、前述したリリースの遅れ以上の重大な損害をもたらしてしまいます。ソフトウェアも他の製造業と同様に、品質管理は綿密に行わなければなりません。

費用管理がしやすい

ウォーターフォール開発は、開発物システムが明確に決まっているため、無駄な作業をすることがない開発モデルです。それはつまり、予め計画された費用以上になる可能性が低いということです。また、設計物が明確なので具体的な見積書を作成しやすいです。

従って、予め計画された計画についても妥当なものになる可能性が高いです。いくら良いシステムを開発したとしても、売り上げ以上の費用となってしまってはビジネスにおいては何の意味もないどころか、やらない方が良かったと言っても過言ではありません。

ビジネス活動は結局のところ、利益を確保して自分と従業員の生活を守ることを目的にしているため、費用の状況はしっかりと把握しておく必要があります。

文書化がしやすい

開発するシステムが明確なので何を設計すれば良いかイメージがしやすいのも、ウォーターフォール開発の大きなメリットの1つです。設計するのもが明確、ということはどのような文書にすれば良いのか、どのような資料を残せば良いのかということも明確になります。

また、ウォーターフォール開発は出戻りが少ないため、文書に落とし込む内容に抜けや漏れが生じる可能性が低くなります。ソフトウェア開発は1度開発したらそれで終わりということはなく、その後も運用や改善などの作業もあります。

この時、抜けや漏れがない、システムの内容が正確に文書化された資料がなければ、運用や改善などの業務の正確性も効率も著しく低くなってしまいます。

ウォーターフォール開発のデメリット

ウォーターフォール開発には多くのメリットがありますが、同時にデメリットもいくつか存在するのも事実です。ソフトウェア開発はエンジニアの経験やスキル、予算や業務フローなどの問題で開発手法を簡単に変えることは出来ません。

従って、ウォーターフォールを採用するのか、それとも他の手法を採用するのかは、メリットとデメリットの両方に目を向ける必要があります。

途中変更が難しい

ウォーターフォール開発は基本的に、既に終わった開発工程をやり直すことはない開発モデルです。ウォーターフォール開発では次の開発工程に進む前に、成果物に対して綿密なチェックが行われるからです。

もしも途中で機能を変更した場合、変更した機能が別な機能にも影響を与えてバグを起こす可能性もあります。従って、開発が進めば、細かな変更がしにくいというデメリットがあります。。

このようなデメリットがあるため、ウォーターフォール開発において成果物へのレビューは非常に重要で、チームやプロジェクトのメンバー全員が全ての案件に対して自分事として取り組む必要があります。アジャイル開発以上に横のつながりを強くしておかなければなりません。

最新技術を取り入れにくい

ウォーターフォール開発は次の開発工程に進む前に綿密なチェックが行われるために、途中で手戻りが発生すると大幅に完成予定がずれやすいというデメリットがありますが、これは最新技術を取り入れにくいというデメリットにもつながります。

通常、ウォーターフォール開発で開発するプロジェクトや案件の規模は大きくなることが多い開発モデルです。これはつまり、既存のシステムやプログラムに与える影響も大きくなるということです。

一方、システムが使用している技術を最新のものに変える、という作業についてもソースコードやネットワーク、データベースなど様々なことを考慮して進めなければなりません。

只でさえ大きな開発案件に加えて技術の更新まで行うとなると、熟練のエンジニアを何人も集めなければならなくなります。

日々、急速に技術が発展している今日のIT業界において、最新技術を取り入れにくいというデメリットの影響は小さくないです。

ユーザーの意見を取り入れにくい

前述した様にウォーターフォール開発は、既に終わった開発工程をやり直すことはなく、加えて1つ当たりの開発案件それ自体が大きくなる傾向が強いため、開発に要する時間も多くなることが多いです。

これはつまり、ユーザーの意見を取り入れてシステムに反映できる機会が少なくなるというデメリットがあるということです。

なるべく頻繁にユーザーの声を取り入れて頻繁に改修を行った方が、より使いやすいシステムに進化することが多いですが、ウォーターフォール開発の場合はそれが難しくなります。

それどころか開発に時間がかかり過ぎて、その時点で開発している内容が、完成したころには既に時代遅れの内容に成り下がっている、ということも少なくありません。

ウォーターフォール開発を進める際の注意点

ウォーターフォール開発には多くのメリットがありますが、前述したようにすでに終わった開発工程をやり直すことができないなど、小回りが利かないというデメリットもある開発モデルです。

従って、ウォーターフォール開発を進める際は気をつけなければならない点が幾つかあり、もしこれらを怠ると、時間やコストの大幅なロストという損害を被ってしまいます。

事前計画を徹底する

ウォーターフォール開発を進めるには、事前計画を徹底しなければなりません。開発作業やクライアントとの意識合わせの前に、何にどのくらいの日数をかけるか、どのくらいの人数を割り当てるかなどの計画をしっかりと練る必要があります。

また、開発が進んだ後についても、事前に練った計画を守るように常日頃から気をつけ、もし変更を余儀なくされたとしても最小限にしなければなりません。事前に計画を練る際は、自分だけで考えず、タスクを割り当てる予定のチームメンバー全員に意見を聞いて、計画に反映すると良いです。

自分の力量を最も把握しているのは結局自分であるため、余程経験が浅くない限り、まずはチームメンバーそれぞれに自分のタスクの見積もりをさせると、より精度の高い見積もりが完成します。

顧客との密なコミュニケーションを取る

ウォーターフォール開発は開発作業が進めば進むほど、変更が容易ではなくなります。従って、顧客と密にコミュニケーションを取り、認識の齟齬は早めに解消しておく必要があります。

もしも開発作業の終盤に認識の齟齬に気づいて修正が必要になった場合、文書の修正やプログラマーとの認識合わせ、ソースの修正やテストのやり直しなど、膨大な作業を短時間で処理しなければならなくなります。最悪の場合、計画していた案件のリリースを遅らせる、などの対応を取る必要が出てきます。

このような事態を防ぐためにも、最低でも週に1度は顧客と面談を行って、修正した文書や以後の計画について話し合っておかなければなりません。

変更管理の厳格化

前述した様にウォーターフォール開発は急な変更に弱く、開発作業が進行すればするほど、その傾向は強くなる開発モデルです。従って、変更管理は厳格化しておく必要があります。前の章で、顧客と密なコミュニケーションを取る必要があると記載しましたが、それはプログラマーやテスターなども同様です。

顧客との打ち合わせの結果、認識の齟齬があることがわかり、文書やソースを修正した場合はなるべく早くプログラマーやテスターと打ち合わせを行う必要があります。

修正内容を早めに後の開発工程を担当する人員に伝えておくことで、時間を多く取るため、余裕を持った対応を行うことができ、バグの可能性を低く抑えることが可能になります。

リスク管理の徹底

ウォーターフォール開発は、前述した通り、基本的には事前に準備した計画通りに進め、変更には早めに対応するのが王道です。しかし、いくら事前の計画を守ることが重要と言っても、不測の事態というものは起こりうるものです。

従って、そのような事態にはなるべく早く対応しておく必要があります。例えば、エンジニアが繁忙期に退職する、若しくは経験豊富なエンジニアがプロジェクトから退いてしまうという事例は良くあります。

このような事態が起こった時、代役が務まるエンジニアを募集する、貴重なノウハウを残ったメンバーに伝えるために各種のマニュアルなどの文書を残してもらう、などの対策を早めに取る必要があります。

プロジェクトチームの体制を整える

ウォーターフォール開発は、開発工程などではっきりと区切った役割分担が土台にある開発手法のモデルであるため、プロジェクトチームの体制は早めに整えておく必要があります。

アジャイル開発の場合であれば、メンバーが要件定義からコーディングやテストまで、言ってしまえば何でもできることを前提にチームを組んでいるので、プロジェクトの状況によって柔軟にチームの体制を変えることができます。

しかし、ウォーターフォール開発の場合はそうはいきません。どのような人物に要件定義を任せるのか、テストを任せる人員は何人にするか、などを明確にしたうえでチームメンバーを募集し、予算を組んでおく必要があります。

まとめ:ウォーターフォール開発は計画と管理が大切

ウォーターフォール開発は、はっきりとした役割分担と事前にしっかりと練った計画が根本にある開発モデルです。従って、スケジュールや費用の管理がしやすいなどのメリットがある一方、最新技術を取り入れにくいなどのデメリットも存在します。従って、リスク管理の徹底などを注意する必要があります。

この記事をここまで読んだ人の中には、現在計画しているシステムの開発にどのような開発手法を採用しようか、悩んでいる人も多くいると思います。

そのような人は、是非1度株式会社Jiteraにお問い合わせください。株式会社Jiteraはソフトウェア開発に深い知見があるため、開発手法についても有意義なアドバイスができる可能性が高いです。もし興味がある方はこちらのリンクにアクセスしてください。

アバター画像

文系大学出身で、25歳の時にIT業界に足を踏み入れました。ヘルプデスクから要件定義まで、下流から上流まで文字通り叩き上げでキャリアを築き上げました。取得した資格もいつの間にかもう2桁に。趣味も資格取得。あと、映画鑑賞と飲み会。

コスト削減も課題解決も同時に実現

「JITERA」で迅速
ソフトウェア開発

開発を相談する
Recommended articles for you

Discover more of
what matters to you

email-img
メルマガ登録
JITERA社内で話題になった生成AIトレンドをいち早くお届けします。
Thank you!

Jiteraのメールマガジン登録が完了しました。