第82回 バッチ処理をどのように理解するか

ようこそバッチ処理担当者諸君

あなたは、バッチ処理を担当することになるかもしれない。

バッチ処理とは何か

バッチ処理では大量のデータを扱う。
得てしてあなたが扱うデータはファイルに何千行という形で、
CSV形式やTSV形式、固定幅バイトという形で送られて来る。
あなたは、この大量のデータを加工して次の処理にデータを渡したり、
データベースに取り込んだりするだろう。


1つや2つのプログラムであなたが扱うデータを処理しきれると思っては大間違いだ。
いくつものプログラムが有機的に結びついてひとつのデータをあらゆる形に加工するだろう。

ステータス

A社からB社へデータを渡しさらにB社からC社へそのデータは渡るだろう。
C社からのデータは何らかの加工をされてA社に戻ってくるかもしれない。
このようにひとつのプログラムが終わったからといってそのデータへの処理が終わったとは限らない。
いま、どこまでの処理が済んだのかデータが覚えておかないといけないだろう。
つまり、いまどの状態にあるのかを示すものをデータ自体が持っている(持たせる)。
これをここではステータスと呼ぶ事にする。
ステータスを見れば、いまB社まで渡っているデータなのか、
C社まで渡っているデータなのかわかるといった寸法である。

データに着目する

我々、プログラマはどちらかというと処理に着目したがる傾向があるように思える。
しかし、このようにデータが次の処理へ次の処理へと加工されていき、あるデータは、あるテーブルに蓄えられ、また違うデータは別のテーブルに蓄えられといったシステムを理解しようとするならば、処理はひとまず置いておいてデータに着目するのもひとつの手である。
このデータに着目する手法を「データ駆動」という。

時間が大切

バッチ処理と言うのは、決まった処理が、決まった時間に流れるというシステムである。
だから「時間駆動」という言い方もできるかもしれない(ただこういった言い方を聞いた事はないが)。

さらに、ある処理は1時間以内に処理を終了しなければ、後続の処理の影響がでてしまうので、
なんとしても1時間以内に押さえないといけないということも考えないといけないだろう。

ソースコードをどのように読むか

普通は、1からシステムをつくることはまずないだろう。
すでにできあがったシステムの保守などから仕事がはじまるのではないだろうか。

ここで、すでにあるソースがif文だらけで、if文の中にまたif-else文があったりして、とても長いソースだった場合は、
「あれ?このelseはどこに対応していたっけ?」などということになってしまう。
しかし、あなたはそのソースを理解しなければならないだろう。


こういうときは、なんでこんな長いソース書いてんだよ。ifの中が長過ぎる!
と憤慨するのは置いておいて、データに着目するのだ。


デシジョンテーブルや、デシジョンツリーといったものを使って、
ifの条件にあたるところだけに注目するのだ。


ひとつのソースの中でいろいろなデータを扱っている場合がある。
そういった場合は、いま考えたいデータとは関係ない処理もソースに書いてある。
そこを上から順に読み下しているとソースを読むのは大変な労力を費やす。
さらにifの中の処理を読んでいて、「あ、この変数にこのデータが入った」などと、
逐一追っていては、とてもしんどい。


状態遷移図も使いこなせ

A社からB社へ
B社からC社へ
データの状態は変化するのだ。


この変化した状態は、どこかに記憶されているはずだ。

どの状態がなにを表しているのか。
どの状態からなにに移るのか。

これをビジュアルに表現してくれるものこそが、状態遷移図だ。


まとめ

オブジェクト指向
フローチャート図で処理の流れを見る。

ああ、たしかにこういった事も大切である。
だが、あなたがもしバッチ処理のような大量のデータを
扱わなければならなかったとき「データ駆動」という考え方をとると少し楽になるかもしれない。



参考図書:

構造化分析とシステム仕様<新装版>

構造化分析とシステム仕様<新装版>