クイズ!! バグはどこだ? 〜ちょっと休憩して、バグ探しに挑戦〜:山浦恒央の“くみこみ”な話(64)(2/2 ページ)
あれは米国ボストンに駐在していたときのこと――。ある日、私が管理していたオフィスの入退室セキュリティシステムが動作しなくなった。その当時、大流行がウワサされていたあるウイルスの存在のせいなのか、あるいは……。
答え:バグはここにあった!
答えは、
「セキュリティシステムの“閏(うるう)年”計算に不良があった」
ことが原因です!! ※「」内をクリックしてください。
1992年は閏年であるにもかかわらず、入退室セキュリティシステムは、2月28日の次は3月1日としていたため、曜日がずれてしまいました。このため、3月6日を金曜日ではなく、土曜日と認識し「休日モード」にしてドアをロックしてしまったのです。同セキュリティシステムにとって、3月6日は、ミケランジェロウイルスの発生日ではなく、2月29日以降の“最初の金曜日”として意味があったのです。
ボストンのオフィスで働く50人以上の「最強プログラマー軍団」が、この原因を解明しようと挑戦したのですが、誰にも分からず、セキュリティシステムの入れ替えが必要かと諦めかけていました。そんな折、真夜中の3時、突如、夢の中で「ひょっとして、閏年の計算ミスではないか?」と思い至り、興奮のあまり、夜中にオフィスまで車を飛ばして、確かめに行きました。分かってみれば簡単な原因ですが、ミスリードする要素が多かったため、極めて不可解な事件でした。
なお、閏年の計算法は以下の通りです。
- 4で割り切れる年は閏年
- ただし、100で割り切れる年は平年
- 400で割り切れる年は閏年
閏年が面倒なのは、年の真ん中で余計な1日が増えることにあります。そこで、発想を転換し、1年の始まりを1月1日ではなく、3月1日にすれば、最後の1日が「増える・増えない」という単純な問題になります。
皆さんは答えが分かりましたか? また次回お会いしましょう!
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- あなたは「バグ」をどう数えていますか? 組み込みソフトウェアの品質管理を考える
あなたの現場では、ソフトウェアの品質管理の考え方をきちんと生かし切れていますか? MONOist編集部では組み込みソフトウェアの品質管理をテーマにしたゼミナール「組み込みソフトウェア開発で問われる品質力」を開催。組織における品質管理の考え方や、実際の開発現場におけるツールの活用・導入に関する事例などが披露された。 - デスマーチ・プロジェクトでの正しい手の抜き方
高機能・多機能化に加え、「品質向上」「コスト削減」「納期短縮」が強く求められる組み込み業界。小手先の対応では太刀打ちできない。 - 連載記事「山浦恒央の“くみこみ”な話」