【開発手法】ウォーターフォール開発の問題点
ウォーターフォール開発とは、システム全体の開発工程をフェーズ順に進めて後戻りはしないソフトウェア開発手法です。
ソフトウェア開発をフェーズ別に分割し、時系列順にすると、おおまかには以下のような流れとなります。
フェーズ名 | 内容 |
---|---|
要求定義 | 要求を確認する |
要件定義 | 要件を決める |
外部設計 | システムの振る舞いを決める |
内部設計 | システムの構造を決める |
開発 | システムを作る |
テスト | システムをテストする |
運用・保守 | システムを安定的に使わせる |
この流れ自体はどのような開発手法でもあまり変わらないでしょう。アジャイル開発であっても、そのイテレーションで開発する機能についてはこのようなフェーズを踏むことになるはずです。
問題は、前工程に戻ることを許容するか?です。これを許容せず(あるいは多少緩く考えても、最小化することに最大限の努力を払う)のがウォーターフォール開発です。
ウォーターフォール開発への批判
ウォーターフォール方式で開発ができれば、作業は非常に効率的となるでしょう。各ステップの実行者は、前工程の完全な情報を基にして、自身の作業に集中できるからです。
しかし現実的にそんなことは不可能であるとして、ウォーターフォールはしばしば批判されます。
ウォーターフォールの問題点は、やはり各ステップで完璧な成果物を作ることが不可能なことも多いという点にあります。
ウォーターフォール方式では前工程への戻りを許容しないため、もしも実際にソフトウェアが出来上がってきてから何かしらの修正をしたい場合、それを認めません。現実的に絶対に認めないということは難しいので、認める部分もあるでしょうが、やはり当初の想定に寄せる方向に誘因が働くことは多いです。
しかし、修正したいということはビジネス的に価値がないものが実際にはできてしまっているということで、それにも関わらず修正しない・修正を軽微にとどめようとするのなら、結果として出来上がったソフトウェアはビジネスの現場で役に立たないものでしかありません。あるいはウォーターフォールでうまくいくことを前提とした予算・納期を設定しているにもかかわらず手戻りを許容するのであれば、ソフトウェア開発者に負担が寄ることになるでしょう。
つまり、ウォーターフォール方式では、「価値のないソフトウェアが出来上がる」か「価値のためにソフトウェア開発者の負担が単純に増すだけ」という結果になりかねないのです。
それゆえ、各ステップで完璧な成果物を作ることことを前提とした開発観をやめて、プロセスや納期や予算といった観点から手戻りを許容するような開発へ移行するべきだ、と批判がされているのです。
手戻りを許容するウォーターフォール開発?
「ウォーターフォール開発といえど、ある程度は許容する」と言う立場もあります。しかし、そうなると、ウォーターフォール開発と他の開発手法の区別がつかなくなり、そもそもウォーターフォール開発という概念自体が無意味化します。ステップごとに作業を進めるというのは、特にウォーターフォールの専売特許というわけでもなく、多かれ少なかれどの開発手法もそういう側面を持ちます。その手戻りを認めるか?という点にしか、ウォーターフォール開発という概念と他を区別できるポイントはありません。
現実的には「どこまでは許容して、どこまでは許容しないのか」というグラデーションの問題で、その考え方を開発に取り込めているのであれば、それは脱ウォーターフォールできていると考えるべきでしょう。その許容の線引きは正しいのか?という問題は依然残るでしょうが、それは個々のプロジェクトに良し悪しが依存するため、現場で都度判断するしかありません。
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。
関連記事
2020.02.25
完全未経験からエンジニアを目指す爆速勉強法
USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
- キャリア・学習法
- エンジニア
2024.09.01
問題解決のアプローチを例えで理解する
本記事では、さまざまな問題解決のアプローチを身近な例えを用いて解説し、それぞれの手法の特徴や適用シーンを考察していきます。
- アーキテクティング
2022.12.29
【徹底解説】要件定義とは、外部設計との違い
要件定義のためにはまずは顧客の要求をヒアリングするところから始めます。
- アーキテクティング
2023.04.06
システム開発における開発、検証、ステージング、本番環境の必要性を解説!
システム開発において、開発、検証、ステージング、本番環境の違いを理解することは非常に重要です。
- アーキテクティング