要件定義の進め方

システム開発の大炎上を防ぐために、上流工程(前工程)に位置する「要件定義」について、考えていくブログです。

要件定義書の作り方
PDCAサイクルではなく、PDCサイクルを回そう
あるべきV字モデルについて整理した
スコープを決めてから、QCDの議論をしよう

バッチ処理とオンライン処理の違い

プログラマの仕事を始めたころ、バッチ処理プログラムを作ってくれと言われたことがある。その当時は、なんとなく一連の処理をするプログラムのことなのかなと思っていたが、バッチじゃない処理って何だろうって思ったものだ。バッチ処理の対局に位置する処理で、オンライン処理というものがある。今回は、バッチ処理とオンライン処理の違いについて整理する。

対象のシステムがバッチ処理なのかオンライン処理なのかというのは、非機能要件における「継続性」のレベルを決めるうえでも大切な概念だ。しっかり理解しておく必要がある。

req-definer.com

f:id:req-definer:20220129112250j:plain

バッチ処理とオンライン処理

バッチ処理

バッチ(batch)とは、一束(ひとたば)を意味する単語である。元の歴史をたどれば、紙に書かれたプログラム(パンチカード)の束を持ってって、コンピュータに読み込ませることから、まとめて行う処理をバッチ処理と呼んでいた。今の時代は、そのようなことが行われることはめったにないが、データをまとめてコンピュータに読み込ませて処理するような類の処理をバッチ処理という。CPUの台数や処理能力が限られていた時代は、空きリソースを活用して夜にバッチを行うということがあった。アーキテクチャや処理フローを工夫すれば、バッチじゃなくてもよいのではないかと思う。

オンライン処理

コンピュータ同士がネットワークでつながり、パソコンも一人一台与えられるようになってきて、即時処理が求められるようになってきた。その即時処理を実現するのが、オンライン処理だ。オンラインとは、文字通り、On+Lineということで、線がつながっていることを意味する。何と何が線でつながっているかというと、データを入力する側(キーボードなど)が、データを処理するマシン側と線でつながっているということだ。線でつながっているので、入力したデータはすぐにマシン(処理を実行するマシン)に送られる。そのため、オンライン処理というのは、即時処理を意味している。

バッチ処理とオンライン処理の使い分け

個人的にはバッチ処理というのは好きではない。バッチ処理というのは、たいてい、オンライン処理をサポートする形で存在する。もともとはバッチ処理しかできなかったことが、オンライン処理(即時処理)でできるようになってきたという歴史があるため、どうしてもオンライン処理(即時処理)できないことはバッチ処理をすることとなる。

そして、このバッチ処理というのは、定期的/非定期的にまとまった単位で実行される機能なので、使用場面の少なさのわりに考えなければならないことがたくさんあるのだ。例えば、バッチはちゃんと実行されるか?バッチは最後まで実行されるか?バッチは要求時間内に終わるか?バッチ実行の開始/終了や要求時間内に終わったかどうかを誰がどうやって監視していくのか?バッチが失敗したときはどうするのか?バッチの失敗は許されるのか?などなど。オンライン処理の運用に加えて、バッチ処理の運用も考えないといけないので、検討コストもかさむ。

データは即時入力即時処理ということもできる世の中になってきているので、何も考えずにバッチにしてしまおうというよりは、なるべくバッチを使わずに実現する方法は何か?を考えるようにしたい。

結論:バッチ処理の必要性を吟味しよう