MacBSの日常生活的日記

無限ループは使わない

クマデジタルさんによれば、昨日の自動改札機の問題の原因が
ある程度、判明したようで。
http://www.itmedia.co.jp/news/articles/0710/12/news117.html

私は夜のバッチ処理あたりで不具合が起きたのかなぁと思って
いたのですが、どうやら違ったみたいですね。

毎朝、サーバから受信する「ネガデータ」というデータの受信に
失敗したせいみたい。
不正カードなどを排除する仕組みは、こうやってるんですね。

「ある長さ、ある件数」といった特定条件でエラーになるんだとか。
まぁ、この手のバグはありがちですよね。
0バイトだったとか、サイズがunsigned intなのに受信側がsigned intで
受け取ってるとかね。(^^;

ただ、この判定部にバグがあるのは仕方ないにしても、リトライを
無限ループで繰り返すのは、処理として、いかんですねぇ。

こういう起動シーケンスでは異常系(サーバーが死んでるとか)を
考慮して、無限ループは書かないってのがコーディング上のルール
みたいなものかと。

まぁ、大体、無限ループってのは極力使わないのに限ります。
for(;;)とかwhile()なんて、簡単に書いちゃうのが一番危険。(^^;

もし書いたとしても、breakの条件を正常系だけでなく、異常系にも
ちゃんと入れてあげるのが賢明ですね。

言われてみれば、この(プログラミング)業界って、他の製造業
みたいな「ヒヤリハット」のような活動が、あまりされてないですよね。

単体であれ、バグが発生したら、それは「ヒヤリハット」集に追加して
チェックリストにしていけば、ソフトウェア品質も、少しは他の製品に
近づけるのかも。

それにしても、サーバから切り離して単体起動させた人は、
なかなか良いセンスを持ってらっしゃいますよね。
エラーログでも見られるようになってるのかなぁ?

まぁ、今回の件で自動改札機も立派な「コンピュータ」なんだって
ことが判った次第であります。

モバイルバージョンを終了