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 件のコメント:
コメントを投稿