ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

コピペしたために発生したバグ

発端

お客さんから、ドロップダウンリストで2014年3月が2個あるが、2014年2月がなく、次は2014年1月があると連絡がありました。
お客さんが見ている画面を、こちらかも見てみると、確かに同じ現象が発生しています。
過去3年分のドロップダウンリストがありますが、同じように無い月と2個ある月がありました。

調査

該当の画面のソースコードを見てみると、管理者用と一般ユーザー用を兼用していて、一部ソースコードをそのままコピーして作ってありました。
一般ユーザーで現象が発生しているので、一般ユーザー用のソースコードを見てみると、今日の日付を基準に、過去3年分のドロップダウンリストを生成していました。
連絡があったのは3/31で、31日はそのまま年月を求める際の日として使われていて、31日が存在しない月が表示されなくなっていました。

対処

必ず存在する日付であれば正しく計算されるので、何日に処理されても1日を利用して求めるように修正したら、正しく表示されるようになりました。

管理者用は大丈夫か?

一般ユーザーと同様に、管理者ユーザーにもドロップダウンリストが表示されるので確認すると、管理者用のソースコード部分にドロップダウンリストのコードも含まれていて、そちらは今回修正した内容と同様に、1日を利用して求めるようになっていました。

原因

ソースコード履歴を見ると、当初一般ユーザー用と管理者ユーザー用のドロップダウンリストのソースコードは同じになっていましたが、途中でバグに気がついて、管理者用だけ修正がされていました。
一般ユーザー用の修正が漏れていたために、今回のバグ発覚となりました。

まとめ

バグを修正できる機会があったのに、コードが分かれていることに気づかず、修正漏れが発生しました。
共通化できるコードは、例え短くて煩雑でも共通化するべきです。