がるの健忘録

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

ナニカガチガウヨウナ…

元ネタ
よいプログラムほどクラッシュしやすい??
http://oibore-se.blogspot.com/2009/04/blog-post.html

上司から私が作ったプログラムが、
動かなくなった至急対応してくれといわれ、現場に向かいました。


調べたところ、私を引き継いだ後輩のプログラマーが、条件式一箇所修正したのが、
原因とわかりました。


また以前参加したプロジェクトでは、問題が発生したのでコードを調べたら、
!!という条件文がありました。言語はJavaでしたが、!はNOT否定を示す式で、
!!は二重に否定していて、意味がありません。!の間違いではと修正したら、
問題は解決しました。このコードを書いたのは大変優秀な大学の学生でしたが、
QAを実施せず、コードレビューだけでプログラムを収めていました。
コードレビューで、この条件文部分は見逃していたようでした。


また、以前私が修正したSQLのストアドプロシージャでは、SQL文であるフィールドの値を
別のフィールドに設定するUPDATE文を誤ってフィールドの頭に変数を示す記号@
をつけてしまったことで、大量の注文データに誤ったデータが設定されることなり、
それがWebサイトのライセンス認証に影響してしまったことがあります。
この誤りは、単純なテストケースでは発見できず、それ以降ストアドプロシージャについては、
コードレビューも行うようにしたものです。

えと…とりあえず「テストくらいしようよ」とかいうのはおいといて。

しかしながら、こうした技法は一方で、1つのステップに絶対的な意味を持つことになり、一箇所一文字の修正が命取りとなりえます。私がプロジェクトを抜けたり、会社を辞めた後に、「大変だ!動かなくなった!至急対応してくれ!!」を携帯電話を受けて対応を求められるのはそのせいかと最近思い始めているほどです。
使う側から見ると、私がいる間はシステムは安定していたのに、いなくなった途端大トラブルというわけです。


その点、D.R.Yを実践していないプログラムは、品質はよくありませんが、それなりに動いて、不満は残るが大トラブルにもならないような気もします。ただしメンテナンスにかかるコストは大きくなりますが。。

おいら的には完全にNG。
1ステップ(1コード)が重要かつ絶対的な意味を持つのは当然で。
「D.R.Yを実践していないためにそれなりに動いている」っていうのは、言い方を変えると「どこがバグってるかがよくわからないから微妙にバグってるままのプログラムを動かしている」のと同意だと思うです。


ミスったら「ミスった」とはっきりわかるほうがよいと思うのですが、どうなんですかねぇ?


…で、思い出したURI。おいら的にはこっちのほうがコレクト。
間違ったコードは間違って見えるようにする
http://local.joelonsoftware.com/mediawiki/index.php/%E9%96%93%E9%81%95%E3%81%A3%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AF%E9%96%93%E9%81%95%E3%81%A3%E3%81%A6%E8%A6%8B%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B