かなり前に終わったプロジェクトの担当者から緊急連絡が来た。
どうもうちらが作ったプログラムに障害が発生したらしい。
今月に入ってからいきなり発生したとのことで、すぐに直してくれとのこと。
原因を調べよう。
なんと情けないバグだった…。
入力した日付から日数を出す計算を JavaScript でやっているんだけど、そのコードがおかしい。
月が「01」~「07」までは数値にしても 1 ~ 7 になるので問題ない。
ところが「08」と「09」のときは、数値にするとどちらも 0 になってしまうのだ。
なぜか。
JavaScript では先頭「0」で始まる数値は「8 進数」と見なされてしまうから。
8 進数とは一桁を 0 ~ 7 で表す方式の数のこと。
通常使っている 10 進数は、一桁を 0 ~ 9 で表し、その次は上の位がカウントアップされるよね。
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …という具合に。
8 進数は 7 の次で上の位がカウントアップされる。
つまり、0, 1, 2, 3, 4, 5, 6, 7, 10, 11, …となる。
余談だけど、コンピュータで良く使われる 16 進数は一桁を 0 ~ F で表す方式。
10 ~ 15 は表記が二桁になってしまうので、それをアルファベット A ~ F で表す。
そして、F(15) の次に上の位がカウントアップされる。
ということで、修正はカンタンなんだけど、原因報告が難しい。
なぜこのバグが残ったまま出荷してしまったのか、テストの結果はどうなっていたのか、など報告することが山のようにできてしまった。
う~ん。まいったな。