エンジニアの知識

ウォーターフォールとは?新人SE&未経験でも分かり易く解説!

「ウォーターフォール」という言葉を聞いたことがあるでしょうか?今後、SEやプログラマーとして活躍したいと思う方には、避けて通ることは出来ない程、重要なアプローチモデルとなります。

今回は、ウォーターフォールについて詳細に解説します。

この記事でわかること

  • ウォーターフォール型開発とはなにか?
  • ウォーターフォール型開発の詳細
  • ウォーターフォール型開発の利点はなにか?
  • ウォーターフォール型開発の欠点はなにか?

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

ウォーターフォールとは滝のこと。滝のように段々と開発をすすめる様子から命名

ウォーターフォール型開発(Waterfall Model)」は、ソフトウェ開発における、最も有名な開発手法です。ウォーターフォールとは、「滝」の意味であり、ソフトウェア開発の工程が、さながら上から下へ段々に水が進んでいくような姿から名付けられています。

ウォーターフォールは、ソフトウェアの設計から開発・顧客への納品までに至る工程を、以下のように分割し、管理します。

ウォーターフォールは構造がシンプル。上流工程をSEが担当し、下流工程はPG(プログラマー)やそれぞれが担当する

ウォーターフォール型開発の工程

  • 上流工程
    • 要件定義:業務の分割と分担、業務内容、実施方法のイメージ確認
    • 基本設計:事務手順の設計、人と機械の分担検討、外部使用の検討
  • 下流工程
    • 詳細設計:内部仕様の検討、危機感の分担の検討
    • 実装:プログラム開発と単体テストの実施
    • テスト:プログラム間(機器間)連携を検証するテストの実施
  • メンテナンス:納品したプログラムを顧客が効率よく使えるようサポートする

この中でも要件定義や基本設計までを「上流工程」といい、残りの詳細設計、プログラミングやテストを「下流工程」といいます。

要件定義とは?

要件定義は顧客の求めるシステムを定義し、顧客から同意を得る段階

ウォーターフォールでは、まず上流工程の作業から行います。その中でも、最初に行うのが「要件定義」です。要件定義では、以下の3つの目的を遂行します。

要件定義の目的

  • 顧客の求めるシステムを定義する
  • 開発の目的を定める
  • 顧客に同意を得る

これらの目的遂行のために作成する「要件定義書」は、「顧客に同意していただく仕様書」となります。要件定義書について詳細に知りたい方は、以下の記事をご覧ください。

基本設計とは?

基本設計」とは、ウォーターフォール型開発において要件定義の後に行う設計作業であり、主にSEが行います。この基本設計・外部設計までのフェーズを「上流工程」と呼びます。

下流工程」との違いは、成果物の内容が「発注者側(指示者)」の目線であるか否かの違いです。つまり「上流工程」における成果物は「発注者側」の意見を元に、仕様を書面化したものとなります。

この設計作業では、主に「システムの概要的な設計」を行うため、「概要設計」と呼ばれることもあります。同様に他のシステムとデータの受け渡しが必要な場合の設計や、利用者の操作などに応じた挙動などを設計するため「外部設計」と呼ばれることもあります。

詳細設計とは?

ウォーターフォール型開発において、詳細設計・内部設計からは「下流工程」と呼ばれます。「詳細設計」とはウォーターフォール型開発において、基本設計の次に行う設計作業です。

「下流工程」からは「発注者側(指示者)」の意見は入りません。逆に、この段階で「発注者側(指示者)」の意見が入る様では、いつまでたっても仕様が固まらずプロジェクトは崩壊します。

主にSEが主導しますが、場合によっては一部にプログラマーを迎えて、共同で設計作業を行うこともあります。詳細設計では、外部設計で定義した「利用者の操作に応じた設計」をより詳細に定義したり、外部とやり取りを行うデータの詳細を設計したりもします。

詳細設計ではシステム内部の処理を中心に設計を行うため「内部設計」とも呼ばれます。

実装とは?

実際に仕様書に基づいて、プログラマーがプログラミングをおこないます。

基本的にPG(プログラマー)主導でのプログラミングフェーズになりますが、会社によっては、システムエンジニアも加わりプログラミングすることもあります。

テストとは?

テストとは文字通り、作ったシステムのテストをおこなうことです。そのシステムに不具合や「バグ」と呼ばれる問題がないかや、システムに欠けているものが無いかなど入念にチェックします。

システム開発をする以上は不具合・バグはつきものなので、テストフェーズ次第でクライアントに納品するものの質が変わってきます。テストは概ね以下の3つに別れ、PGやテスター、SEに加えて、顧客の担当者がそれぞれ行います。

新米システムエンジニアの方はこのフェーズに関わることが多いです。

実装フェーズの内訳

  • 単体テスト:PG又はテスターが、個々のプログラムの仕様や内部設計に基づき実施
  • 結合テスト:PG又はテスターや、一部をSEが内部設計や外部設計に基づき実施
  • 総合テストSEや顧客の担当者が、外部設計や要件定義に基づき実施

メンテナンス

300システムは開発したら終わりではない。システムが止まらないように、顧客が使いやすいようにサポートする

ウォーターフォール型開発における「メンテナンス」とは「保守運用業務」のことです。

すべての設計・開発(プログラミング)・テストを終えるとシステムは顧客へ納品されます。しかしシステムが納品されたからといって、開発が即座に停止するわけでは有りません。

実際には、メンテナンスは数年単位・数十年単位で行われることが通例です。サポートは通常は、別チーム(別部署)が担当しますが、SEやPGが担当することもあります。

このとき必要となるのがこれまで解説してきた仕様書(設計書)です。正しい仕様書であれば、メンテナンスに役立ちます。

利点と欠点

ウォーターフォールの利点は「簡単」なこと。欠点は「後戻りが難しい」こと

ウォーターフォールには多くの利点はありますが、最も大きな利点は「構造がシンプルで簡単」という点です。そのため殆どのSEやPGが改めて教育する必要がないくらいに浸透しており、スムーズに開発を行えます。そして初めて覚えようとする方にも、比較的簡単に覚えられます。

対して欠点としては「不具合が発見されると、修正のための後戻りが難しいこと」です。

なぜなら、「ウォーターフォール型開発は、各工程が正しいことを前提に進める開発手法」だからです。そのため不具合が前工程で見つかった場合、修正にスケジュールを要したり、余計なコストが掛かります。この溝が広ければ広いほど、重大になってしまいます。

したがって、ウォーターフォール型開発では、「十分な設計を心がけ、顧客と密に連携すること」が最も大切といえます。

まとめ

まとめ

ウォーターフォールは開発の基本ですが、失敗もつきものです。ウォーターフォール型開発で失敗しないためには、「十分な設計を心がけ、顧客と密に連携すること」です。

ウォーターフォール型開発まとめ

  • システム開発の工程を1つ1つ区切って管理する開発手法
    • 上流工程
      • 要件定義:業務の分割と分担、業務内容、実施方法のイメージ確認
      • 基本設計:事務手順の設計、人と機械の分担検討、外部使用の検討
    • 下流工程
      • 詳細設計:内部仕様の検討、危機感の分担の検討 
      • 実装:プログラム開発と単体テストの実施
      • テスト:プログラム間(機器間)連携を検証するテストの実施
    • メンテナンス:納品したプログラムを顧客が効率よく使えるようサポートする
    • ウォーターフォールの利点:構造がシンプルで分かりやすい
    • ウォーターフォールの欠点:前工程が正しいことが前提であるため、不具合発見時の後戻りが難しい

よく読まれている記事

1

Shellとは? Shellとは、人間の理解できる言葉を機会へ伝えるプログラムです。 Linux環境でコマンドプロンプト画面を開いているとき、常にShellは起動している状態です。 「Shell」とは ...

2

Linuxは主にサーバー用として利用されるOSです。大規模な基幹システムの開発者、ロボットや家電開発等の組み込み系エンジニア、ネットワーク機器やデータベースに携わるインフラエンジニアは触れることが多い ...

3

プログラミング言語を習得しようと思った時、必ずと言っていいほど候補として挙げられるのが「Java」というプログラミング言語です。 「Java」は、現在日本で最も使われている言語であり、非常に人気のある ...

4

この記事は、Linuxについて勉強している初心者の方向けに「Shellスクリプト」について解説します。最後まで読んで頂けましたら、Shellスクリプトはどのような役割を担っているのか?を理解出来るよう ...

-エンジニアの知識