それはインターフェイス? - ファイル編 |
||
|
間違った作業分担 |
||
|
2つのサブシステムがあって、その間でのデータのやりとりをファイル経由で行うというのはよくある話です。たとえば何らかのデータを収集して画面に表示したいとき、データ収集プログラムが出力したファイルを表示プログラムに引き渡すというようなことがあるでしょう。 |
||
|
これを二人で作るとしたら、どのような作業分担になるでしょうか?単純にサブシステムごとに一人ずつ割り振るのが良いでしょうか?実際は、そのようにすることが多いでしょう。つまり、ファイルのフォーマットを決めて、それをサブシステム間のインターフェイスとするわけです。しかし、この実際によく行われているやり方は、まったく正しいとは言えません! |
||
|
何がまずいのか説明しましょう。仮に、ファイルを出力する側を「サブシステムA」、受け取る側を「サブシステムB」とします。またそれぞれの制作者を「Aさん」「Bさん」とします。まず設計の段階で、両者間のインターフェイスを決めなければなりません。ファイルフォーマットをインターフェイスにしようというのですから、まずどちらかが原案を作らなければなりません。これをどちらがやるべきかは状況によりますが、さきほどの例のデータ収集&表示プログラムなら、データ収集側のAさんがおおよそのフォーマットを決定することになるでしょう。Bさんにしてみればファイルからデータを取り出すだけなので、必要な情報さえ格納されていればAさんの決定に文句は言わないでしょう。 |
||
|
このようにしてファイルフォーマットが決まります。両者がコーディングを行うためには、このフォーマットが厳密に決まっている必要があります。そのためファイル中のどの位置にどのデータが何バイトの大きさで格納されているかというようなこまごまとした部分まで決定され、正確な設計資料が作られます。そうでないと、Bさんは必要なデータを取り出すプログラムを書くことができません。 |
||
|
さて、職業プログラマの皆さんなら、この方法がうまくいかない理由はわかりますね。その通り、このやり方は仕様変更に非常に弱いのです。表示する項目が増えた場合を想像してみてください。ファイルに新しい項目を増やすには、せっかく厳密に決定したファイルフォーマットを修正する必要があります。追加する項目が全くの新規項目ならファイルの最後に追加すれば済みますが、メンテナンス上の理由でファイルの途中に挿入した方が良い場合は面倒です。その影響はサブシステムAにもサブシステムBにもおよびます。いや、追加ならまだマシです。既存のデータが変わったらどうでしょう。例えば今まで int だったデータが double になったら?リトルエンディアンからビッグエンディアンに変わったら?16文字固定のはずだった文字列データが長さ情報付きの可変長になったら?こういう変更があるたびに、その影響はいちいち両方のサブシステムに波及します。AさんとBさんは細かい変更の度にミーティングをしなければなりません(それはもう、気が滅入ることこの上ないミーティングです)。そうやって何度もフォーマットが書き直され、そのたびにAさんもBさんも自分のプログラムが新しいフォーマットに適合するように手直しをすることになります。 |
||
問題は何か? |
||
|
実際、このような仕様変更はしょっちゅう起こることなので、「上流工程の詰めが甘い」だの「いまさら変更はできない」だの言っている場合ではないのが普通です(ですよね!?)。だからといって、こんなお世辞にも生産的とは言えないような作業に時間をとられている暇はないというのも実状です。AさんとBさんが同じ会社の同僚で、デスクも隣同士というなら話し合いも苦にならないかもしれませんが、二人が別の会社の社員ということもあります。それでも担当者同士で直接メールや電話のやりとりができればまだマシですが、それすらできない場合もあります。こういう場合は最悪で、10分でできるはずの決断に、3日かかることになります。 |
||
|
問題の原因は何かというと、ファイルフォーマットはインターフェイスにするにはこまごましすぎているということです。それに、あとで変更される可能性が高い部分をインターフェイスにするというのも間違いです。そういうわけで、ファイルフォーマットをインターフェイスにするのは損な場合が多いのです。 |
||
|
|
|
|
(「コーディングの向こう側」は2000年4月から2001年5月にかけて作成されたコンテンツです。)