見出し画像

ウォーターフォールは廃れていくのか - 現代ソフトウェア開発読本(2)

これからのソフトウェア開発のモダナイゼーションを探る
前回:モダナイゼーションと温故知新 次回:アジャイルは救世主か


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

一般的な定義

ウォーターフォール開発とは、ウォーターフォール(落水、滝)のように、開発工程を後戻りすることなく、開発を進めていくものです。水は高きところから低きところへ逆戻りすることなく流れるのです。

原則としては、(1) 各工程に分割し、(2) 各工程の開発計画(完了基準)を明確に決め、それを厳格に順守して次工程に進むこと(トップダウンアプローチ)と、(3) 厳格な完了基準を順守することで名称の通り後戻りをなくすことです。これが一般的に信じられているウォーターフォール開発の原則です。

本来の定義

ウォーターフォール開発を論文として最初に提唱したのは、1970年のウィンストン・ロイスによるもので、このときの原則は(1) 工程分割と(2)それを管理するトップダウンアプローチです。そしてロイスの定義では「ウォーターフォール」という名称は用いられておらず、前工程への後戻りも言及されていました。

つまり、一般的な定義にあった「(3)後戻りはしない」という原則はありません。これからウォーターフォール開発でも、本来は後戻りしていいのです。もっと言えば、必要なときは積極的に後戻りするべきです。

一方、原則の(1)と(2)から計画を明確に立て、その運用も厳格にすることから、結果的に(3)の後戻りは少なくなりました。これから、後世に別の人によって、ウォーターフォール開発と名付けられたものです。

ウォーターフォール開発は現代でも通用するか

前回の記事で述べたように、ウォーターフォール開発は現代技術として今でも通用すると考える人と、現代では通用しない従来技術(レガシー技術)であると考える人がいます。実際はどうなのでしょうか。

現代の開発状況

現代の開発では (a) 開発開始時に仕様が未確定で、(b) 仕様変更も多く、(c) 開発のアジリティ(俊敏さ)を重視し、この結果 (d) 素早く開発を繰り返す状況になっています。

ウォーターフォール開発は現代では通用しない

このような現代の開発状況ではウォーターフォール開発の計画重視の運用で、工程の完了審査が厳しく、仕様変更に対して後戻りもできないことが、ウォーターフォール開発が現代では通用しないという根拠になっています。

この中で一番の根拠はウォーターフォール開発の名称の通り、後戻りができないことです。しかしこれは前節の一般的なウォーターフォール開発の原則の話であり、本来のウォーターフォール開発では後戻りはできます。

ウォーターフォール開発は現代でも通用する

本来のウォーターフォール開発では後戻りはでき、仕様変更や実装変更があるときは積極的に後戻りするべきです。また仕様未確定や仕様変更があると予想できるときには、ウォーターフォール開発の計画に、あらかじめ、後戻りを入れることも必要です。

ただしウォーターフォール開発は工程を分割し、工程間の進行を厳格に審査するために、開発のアジリティはどうしても落ちます。この意味では現代のアジリティ優先の時代にはマッチしませんが、以下のアジャイル開発との使い分けをすることで、現代でも通じる技術になります。

アジャイル開発との相互運用

ここではウォーターフォール開発と比較されるアジャイルソフトウェア開発を取り上げ、その使い分けを見ていきます。

アジャイルソフトウェア開発の特性

アジャイルソフトウェア開発では、開発計画の中に繰り返し開発を入れることで、結果的に後戻りを可能にしています。また工程分割を原則とせず、工程間の完了審査もないことから、繰り返し開発を素早く進めることができます。(アジャイル開発の詳細は別回で紹介する予定です。)

ウォーターフォール開発とアジャイル開発の差異と使い分け方針

両者の根本的な違いは、工程分割の有無計画重視の軽重です。これから両者の使い分けは、仕様の確定度に依存します。仕様が確定しているときで、開発が大規模なときは工程分割を原則とするウォーターフォール開発の方が適しています。またインフラ制御などの安全性を保証するときも計画重視のウォーターフォール開発の方が適しているでしょう。さらにウォーターフォール開発では過去の実績が多く、IPAの「ソフトウェア開発分析データ集」などがあり定量的な評価を行いやすいため、類似の開発プロジェクトに適しているでしょう。

一方、アジャイル開発は仕様の未確定部分が多く仕様変更も多いものに向いています。またアジリティ重視のときはアジャイル開発の方が向いているでしょう。工程分割をする必要のない小規模な開発でも向いているでしょう。

ウォーターフォール開発とアジャイル開発の使い分け方法

両者の使い分けは、デフォルトはアジャイル開発で、大規模か安全性重視でアジリティをあまり求められておらず、仕様の確定度が高く仕様変更があまり多くないときなどの特定の条件を満たすときはウォーターフォール開発にするのが、使い分けの基本となるでしょう。

この基本の使い分けに加えて、組織と開発メンバ、ユーザの組織と担当メンバのアジャイル文化にも依存して、両者の使い分けを行います。
ウォーターフォール開発は比較的、機械的に作業できますが、アジャイル開発は一定の開発文化とスキルが必要になるため、上記も使い分け方法に加える必要があります。

結論:ウォーターフォール開発は使い分ける

結論としてはウォーターフォール開発は廃れません。ウォーターフォール開発は現代に通じる技術であり、アジャイル開発と使い分けてハイブリッドで運用するのがいいでしょう。これが現代ソフトウェア開発のモダナイゼーションになります。
異論や反論はあるかもしれませんが、アジャイル開発の回でもう一度見ていきますので、お楽しみにしてください。

(参考文献)

IPA
IPAソフトウェア開発分析データ集(定量的品質分析)
IPA DXITフォーラム(現代ソフトウェア開発の関連情報)
IPAソフトウェア開発調査(現代ソフトウェア開発調査)

NOTEマガジン

プログラミングの掟
IPAソフトウェア開発分析データ集 教科書
関数型プログラミング事始め
アジャイル開発分析 ~アジャイル開発の掟
ソフトウェア開発マンガFAQ
マンガ読本 ソフトウェア分析 事始め
IPAソフトウェア調査分析


いいなと思ったら応援しよう!

五味弘 よろしければサポートをお願いします!