先日、某プロジェクトの某障害対応において、デグレ発生していました。
よくよく聞いてみると、今回の障害対応をしている中で、全く関係のない部分に設計書と異なるコードがあったため、設計書に合わせて修正したが、その設計に設計バグがあったので発生してしまったと。
良かれと思ってしたことでしょうけど、かなりまずいです。ちょみっとしかいじってないから大丈夫とか思ったんでしょうけど、だめよ。
テストしたモジュールとは別物になっているので、本来は全体再テストですよ。ちょっとだけだからバグるわけない、と思ったのでしょうが、事実バグってるし。
昔こんな事がありました。
後輩の作ったソース(C言語)をレビューしているとき、
i++;
という意味不明な行がありました。後輩にこれ何?と聞くと、この行を削除するとコアダンプするんですと。。。入れておくと落ちないんです、と訴えられました。なんでかわかります?
多分、コンパイル(ビルド)してマシン語に変換されたときのメモリ配置で、i++;が入っているとレジスタ一つ使いますね。どこかでメモリを壊す処理があってたまたまi++;のレジスタ位置を壊しているのでしょうね。だけど、i++;がなくなると、有用な処理のメモリを壊しているので、落ちてしまう、と言ったからくりがあるのではないかと思います。
これから得られる教訓としては、一度正常動作したプログラムは、仮に簡易な修正であったとしても再び正常に動作するかはテストしてみないとわからない、ということです。
テストが終わったプログラムは気軽に修正してはいけません。これ、肝に命じておいてほしい。