ウォーターフォール型開発モデル
上で説明したように、ソフトの開発工程を各フェイズに分け、それを順番に実 行しようという開発スタイルを「ウォーターフォール型開発モデル」と呼びま す。ウォーターフォール(滝)のように、上(要求分析)から下(完成)まで流れ落 ちるように進めることからこの名前がつきました。
ウォーターフォール型開発モデルの要点は、上で述べたように自動車などと同 じようにソフトウェア開発にも工程があることを認識して、各工程をしっかり やりなさい、ということです。その教えをまとめると次のようになります。
各フェイズで成果を形にして残しなさい。
前のフェイズの成果を基にして次の工程をやりなさい。
前のフェイズが全部終わるまで、次のフェイズをやってはいけません。
最後になって「設計がまずかった。最初からやり直し」なんてことにならない ように、各フェイズをしっかりとやりなさい。
プログラマが頭の中で「仕様検討」や「設計」をしている時間を除いてみれば、 実際のところプログラムを作っている期間なんてわずかなものなのです。開発 の進捗は「どの部分までできた」で計るのではなく、「どの段階までできた」 で計るべきです。
この教えの意味を考えないで表面だけを見ると、いろいろな勘違いやトラブル に巻き込まれます。
いつまでもモノが出来てこない
ウォーターフォール型開発とごく普通の開発を見比べて、「構想ばかりで肝心 のモノがいつまでたっても出来てこない」と不満に思う人がいます。例えば 同じ在庫管理ソフトをA社はウォーターフォール型開発モデルで、B社は片っ端 からプログラミングで作ったとしましょう。するとおそらくこのようになるで しょう。
| 日付 | A社 | B社 | 1日目 | はい、わかりました。ではさっそく要求仕様のヒアリングの日取りを 決めたいと思いますが…… | 在庫管理ね。以前やったことがあるから大体わかりますよ。何か特殊 な要求はありますか? | 3日目 | さて、今日は貴重なお時間をまる一日割いていただいてありがとうご ざいます。今日はじっくりとヒアリングを…… | なるほど、この帳表とこの帳表が打ち出せればいいんですね(と手書き の見本帳表をもらう) | 12日目 | 今日はシステムの動作手順を考えてきました。確認をお願いします。 | とりあえずメニュー部分だけ作ってきました。どうですか? | 20日目 | どういったデータをどう管理すればいいのか確認したいと思います。 これでいいですか? | 入力部分が完成しました。完成まであと半分といったところでしょう か。 | 30日目 | こういった仕様でソフトウェアの作成にかかりたいと思います。(と仕 様書を渡す) | 帳表の印刷部分も完成しました。まだ細かい部分の詰めが必要なので 多少の誤動作は無視して下さい……え?部品の型番がわからない事がある!? ほとんど完成したというのに、今さら設計変更ですか! | 40日目 | (社内で黙々と作成にとりかかる) | 部品の型番がわからない時は暫定的にXXXという名前で入れればなんとかなるようにしました。もう他に設計変更はないでしょうね? | 50日目 | ソフトウェアのα版が完成しました。引き続き社内で動作テストをしますが、ご参考までにお渡しします。もし万が一使い勝手に問題がありました ら連絡をお願いします。 | 入力が面倒って……パソコンてのはそういうものなんです。当たり前 でしょう。 | 65日目 | ソフトウェアのβ版が完成しました。引き続きテストやマニュアルの 作成はしますが、もうお使いいただいても結構ですよ。 | とにかく、後はそちらの使い方の問題ですから、こちらとしてはこれでテストをしてマニュアルを書いて終了にさせてもらいますよ。 | 75日目 | β版の使い勝手はどうですか?ソフトウェアの完成品とマニュアルを お渡しして今回の件は終了にさせていただきます。 | こちらは納期通りにソフトウェアとマニュアルを作りました。だか らこれで終わりにさせて下さい。
この例は完全に架空のものですが、だいたいA社が仕様書を書いている段階でB 社では完成品のプログラムができてしまいます。つまり仕様書を書くという工 程はプログラムを作るのと同じくらいの工数が必要だということです。だから、 プログラムが問題なく使えるようならウォーターフォール型開発モデルなんて まったく無駄なのです。
問題はプログラムが出来た後に起きます。B社では顧客とほとんど打ち合わせ もしないままソフトを作り、それでほとんど完成した気分でいます。「このソ フトがトラブルもなく終われば、半分の工期で仕事が終わって儲けもの」とあ りもしない期待を抱いています。だからその後のクレームがトラブルの元にな るのです。本当は「完成してからクレームをつけられた」のではなく「完成す るまでクレームをつける機会を与えなかった」のです。
非現実的な期待をするのはやめましょう。ソフトウェアの製作というのは時間 がかかるものなのです。そして、ウォーターフォール型開発モデルを取ればモ ノが出来てからは早いのです。
工程の後戻りをしていいか?
よく「ウォーターフォール型開発では工程の後戻りができないからダメだ」と いう人を見かけます。こういう人はこれにこう付け加えます。「だって、途中 で仕様変更とか設計変更があったらどうするんだ?」と。
これは間違いです。何でも「できない」より「できる」方がいいという考え方 で設計の後戻りを肯定してはいけません。ウォーターフォール型開発は「後戻 りができない」のではなく、「後戻りをしなくていいようにしっかりやれ」と いう教えだからです。「途中で仕様変更とか設計変更があったらどうするんだ?」 という質問には「そんな事はないようにしましょう」というのが答えです。 とはいっても、実際には設計変更はゼロにできるわけではありません。その場 合には仕方なく後戻りが入ります。「仕方なく」である点に注意が必要です。 積極的にしてはいけないのです。
かと言って、後戻りをしなければいけない場面でしないのもまた問題です。ミ スが発見されても「ウォーターフォール型では後戻りは許されないから」とそ のまま突き進むのでは、それは奈落の底に向かって進んでいくことになります。 どちらも、その意味する所を考えずに形式だけ真似るからこうなるのです。
ウォーターフォール型開発の教えは「後戻りをしなくていいようにそれぞれの 工程をしっかりやれ」というものです。そしてしっかりやったにも関らずミス が発覚してしまったら、それは仕方なく後戻りすべきです。
ドキュメントを書くのが大変
現場のプログラマにはこういう感想を持つ人もいます。彼らの多くは文章を書 くよりはプログラムを書く方が得意な人達です。そして、いつも報告書やプレ ゼンを作っているマネージャークラスの人はこういう人を「このパソコンオタ クが」と見下した目で見ています。この構図が問題なのです。
現場のプログラマはまず「ドキュメントの重要性」を認識して下さい。「ドキュ メントの重要性」とはすなわち「仕様検討の重要性」であり「構造設計の重要 性」です。プログラマの仕事のアウトプットはプログラムだけではないのです。 ただ、「仕様検討の結果をちゃんと形にして残せ」と言っているだけなのです。 逆に結果が形になっていればドキュメントは文書としての体裁にこだわる必要 はありません。UML図(後述します)やメモ、ホワイトボードのコピーでかまわ ないのです。他の人がそれを読んで理解できさえすれば。
残念なことに、「ドキュメント作成が大変」という問題を引き起こす原因の多 くはプログラマ側ではなくマネージャ側にあります。現場を知らない「開発工 程推進派」マネージャが「仕様書や設計書は大事だからちゃんと書け」と強制 するのです。プログラマ側はそれらの文書が何のためにあるのかを理解しない まま、単に上からの強制で文書を書かされます。目的もわからないままただマ ネージャの満足のために文書を書かされる方はたまったものじゃありません。
教条主義に陥らないようにしましょう。「何のためにドキュメントを書くのか」 を考え、それに必要十分なものを作ればいいのです。
まとめ
ウォーターフォール型開発とは要するに「ソフト開発を工程に区分して、それ ぞれをしっかりやりなさい」という事です。それぞれの工程の意味をよく理解 して、それをきちんと達成すればいいのです。それ以上の事は何もありません。