ウォーターフォールに当てはめてみる

昨日の続き

設計には、「仕様設計」と「詳細設計」がある。「詳細設計」の設計書はソースコード+α程度で良いが、「仕様設計」の設計書=仕様書は、先にかなりの完成度で作っておかなければならない。

さて、ウォーターフォールの工程は、大きく「設計」「製造」「テスト」になる。ここで、各工程の内容を定義してみる。

  • 設計
    • 入力:要件
    • 作業:仕様設計・システム設計
    • 出力:仕様書、システム構成図、システムテスト仕様書
  • 製造
    • 入力:設計フェーズの出力
    • 作業:プログラミング(=詳細設計+コーディング+ユニットテスト
    • 出力:バイナリ、ソースコード+α(UML等の付属資料)
  • テスト
    • 入力:設計フェーズの出力+バイナリ
    • 作業:システムテスト
    • 出力:システムテスト成績書

こうすれば、プログラマは「製造」工程でかなりの自由度を得る事が出来る。
ユニットテストも「製造」の一部なので、テストファーストが「製造」⇒「テスト」の流れに反する事も無い。
コードになったらゴミ箱行きでいい筈のメモ・スケッチを、誰が読んでも判るようなWord文書に整形する必要も無い。

ウォーターフォールでは、各工程の間のinput/outputは明文化されたドキュメント(はんこ付き)で区切られるべきであり、そこに暗黙知が入り込んではいけない。逆に言えば、詳細設計+コーディング+ユニットテストはお互いに密接に結びついた作業であり、ウォーターフォールのフェーズとして切り離す事は間違いである。

このブログに乗せているコードは引用を除き CC0 1.0 で提供します。