2010/09/03

エラーを握りつしちゃダメ

VB6システムは、まだまだ現役で、新規開発もあったりします。開発者の思いとは裏腹に。
当然なから、改修の仕事も時折発生するわけです。とあるシステム改修現場でのこと。

「納得できない妙な動作をしています」との訴え。

確かに、業務仕様とは異なる動作をしている。いままで動作していて、急におかしくなるときは、データに起因することが多い。
データを閲覧すると、想定外の規約コードや、桁オーバーの値がチラホラ。

エラーログにもエラー状況は書かれていない。異常データだから、落ちてもよさそうなのに落ちない。

内部仕様書をみても埒が明かないので、ソースを見ることにした。

   Public Property Let xxx(ByVal yyy As 区分)
   On Error GoTo ErrHandler
    xx区分 = 区分
     Exit Property
   ErrHandler:
   End Property
関数やプロパティのすべてに on Error goto ErrHandlerが入っている。これはいい。でも

   ErrHandler:
   End Property
で握りつぶしている。そりゃないよ。半分ほどは、Logに書いているけど。
   ErrHandler:
       Log出力
   End Property

これじゃ、正常終了したのかどうか、いちいちログをみなきゃだめだし、ログにもかかれず葬られた処理があるかもしれない。
とりあえず、全部のErrHandler: のあとに、Log出力を咬ませた。
不具合が出る出る......いままで正常とされていたのも、実はおかしかった...というのも発覚。


開発元を捕まえて、文句をいうと、「当時の開発指針に則っています。」との返事。
開発指針には、「各関数には on Error goto ErrHandler を咬ますこと。」と明記はされているが、握りつぶせとは書かれてない!!!
「サラリーマン開発者はプロではないのか」と愚痴りたくもなった。

落ちないシステムは大事だか、不正データの対策は、安全に回避ルーチンに陥るのが望ましいが、結構考慮点が多岐にわたるので、工数増になります。
予算と工期がないとき、素直に落とすほうが、よほど後々のデバッグが楽になります。
どこで落ちたか、解る仕組みの実装するのがプロです。
不確か状態で継続動作するより、落ちたほうがマシと思うのだが。
(*)もちろん、Try catch処理の時も握り潰しちゃだめですよ。

0 件のコメント:

コメントを投稿