システム開発の代表的な手法の1つが「ウォーターフォール型システム開発」です。最近ではDevOpsが注目されていますが、従来、システム開発プロジェクトといえばウォーターフール型で進めていくのが一般的でした。
そのため最近では「ウォーターフォール型システム開発はもはや不要だ」「ウォーターフォール型システム開発は古すぎる」という声もあります。果たして本当にそうなのでしょうか?今回はウォーターフォール型の必要性について考えていきます。
ウォーターフォール型システム開発とは?
ウォーターフォール型とはすべての開発工程が一連の流れで繋がっているものを指します。つまり滝(ウォーターフォール)のように、上流工程から下流工程へと連続的に開発工程が流れていくため、システム開発を1つの大きなプロジェクトと捉えて開発を進めていきます。プロジェクト全体としてのスケジュールも初期段階で固定し、納品日も決められます。そこに向けて1つ1つの開発工程を進めていくのがウォーターフォール型です。
それでは簡単に利点・欠点についてまとめてみます。
利点
ウォーターフォール型のメリットは開発工程ごとに明確な成果物があることです。成果物の品質が保証できた段階で次のプロセスに移行するため、進捗管理が行いやすかったり、開発と同時にシステムの信頼性を向上できるという効果があります。そのためウォーターフォール型は確実性の高いシステム開発プロジェクトに向いている開発手法です。
欠点
その反対として、それぞれの工程で発生した問題への対処が難しいというデメリットがあります。1つ1つの開発工程が連鎖的に繋がっているため、ある開発工程で問題が起きるとかなりの手戻りが発生することもありますし、ちょっとしてシステム仕様変更がプロジェクト全体に影響を与えることもあります。そのためウォーターフォール型は、原則として絶対に後戻りが許されない開発手法とも言えます。
その他のシステム開発手法
システム開発手法は当然ウォーターフォール型だけではなく、いろいろな手法があります。IT技術の発展や顧客ニーズの多様化などたくさんの要因によって、今ではウォーターフォール型を推進するシステム開発会社は徐々に減っています。各システム開発手法について確認していきましょう。
アジャイル型システム開発
アジャイル型は「イテレーション」という短い開発期間をいくつも設定し、その中で優先順位の高い要件から開発を進めていくという手法です。ウォーターフォール型が1~100までの開発工程を1つ1つ進めていくものだとしたら、アジャイル型は1~10の工程を10個作ってプロジェクトを推進するような開発手法です。
アジャイル型のメリットは小単位の開発期間でプロジェクトを推進することで、プロジェクト途中で要件変更や何らかのトラブルが発生してもすぐに対処できるという点です。加えてクライアントの意向を最大限取り入れることができるので、短い開発期間で完成度のより高いシステムを開発できます。
ただしウォーターフォール型に比べてプロジェクトコントロールが難しいので、アジャイル型の知識・経験・技術を持ったシステムエンジニアの存在が欠かせません。
スクラム型システム開発
スクラム型はアジャイル型の一種なので、短い開発期間を設けてシステム開発プロジェクトを推進するという点は変わりません。ちなみにスクラム型の場合はその単位をイテレーションではなく「スプリント」といいます。
基本的には4週間以内で開発期間を設定し、その中で開発者同士の情報共有とレビューを頻繁に繰り返すことで、短期間で品質の高いシステム開発が行えます。ちなみにスクラムとはラグビー用語で、両陣が8名ずつ方を組んで1つの集団を作り、ぶつかり合う際のフォーメーションを指しています。
スクラム型は開発者同士のコミュニケーションと信頼性がとても重要な開発手法なので、開発メンバーが入れ替われ立ち代わり変化するような環境には不向きです。
DevOps(デブオプス)型システム開発
DevOps型は開発チーム(Development)と運用チーム(Operation)が互いに協力をしてシステム開発プロジェクトを推進する手法です。開発チームと運用チームが対立関係にあるシステム開発会社は多いですが、両チームの最終的な目的は「システムを通じてユーザーの課題を解決したり利便性を向上するということで一致しているはずです。
DevOps型ではシステム開発プロジェクトの中でも継続的に機能をリリースするようなサービス提供に向いているもので、以下のような組織文化を作ることが大切だとされています。
- 一緒に働く一人ひとりを心から尊重し、その功績や能力を評価して優秀な人間だと認める
- 開発チームと運用チームが互いを尊重すれば自然とそこには信頼関係が築かれ、ひいては問題を一人で抱え込まずにチームで解決するという姿勢が生まれる
- 他者の失敗を責めるのではなく「挑戦した結果だ」と考え、それを称える
- 何か問題が発生した際はその当事者を責めるのではなく、問題に対して共に考える姿勢を取る
関連記事:DevOpsとは?その基本とアジャイルとの違いを解説
ウォーターフォール型システム開発は必要?不要?
ここまでの説明で、ウォーターフォール型は古い手法というイメージで捉えたかたも多いのではないでしょうか?実際に一部のコミュニティではウォーターフォール型の不要論が飛び交っていますし、ウォーターフォール型にはメリットが無いとしている開発者もいます。しかし本当にそうなのでしょうか?ウォーターフォール型の必要性を知るために、ここで改めてメリットとデメリットを整理しましょう。
ウォーターフォール型システム開発のメリット
- システム開発プロジェクト全体を1つのスケジュールで進めることができる
- システム開発各工程には明確なタスクが決まっているので負荷の平準化が行いやすい
- 開発メンバー全体を1つのチームとするため意識共有が行いやすい
- システム開発各工程ごとに成果物が決まっているため品質を担保しながら進行できる
- マイルストーンを設置することでシステム開発プロジェクトの進捗管理が容易になる
- システム開発プロジェクトにバッファ(余裕)を設けることで比較的柔軟な対応ができる
ウォーターフォール型システム開発のデメリット
- ひとたびシステム開発要件と仕様が決定したら簡単には変更できない
- システム開発プロジェクト途中での大幅な要件・仕様変更への対応は事実上不可能
- システム開発プロジェクトが長期化するおそれがある
- 大きなシステム開発プロジェクトでは末端までの意識共有が難しい
- 後工程・前工程でのちょっとして問題が大きな手戻りを生む可能性がある
以上のメリットとデメリットから考えるに、ウォーターフォール型は大規模なシステム開発プロジェクトかつ、確実性が強く問われるプロジェクトに向いていると言えます。そのためウォーターフォール型が不要というわけではありません。大切なのはウォーターフォール型のメリットを最大にしながら、デメリットを如何に打ち消していくかということになるのでしょう。