ソフトウェア技術者のためのバグ百科事典(2)まだあるぞ、うるう年バグ:山浦恒央の“くみこみ”な話(123)(3/3 ページ)
ソフトウェア技術者に向けて、バグに関する基礎知識をまとめていく新シリーズ「バグ百科事典」が始まります。第2回は、前回に続き「うるう年バグ」について解説します。
5.うるう年の誤認識によるバグの実例
うるう年の誤認識によるバグ(平年をうるう年と誤認した、うるう年を平年にした)は、意外に多く、Webサイトに載っている主なものでも、以下のバグがあります。発生年月日に注目して、ご覧ください。
2019年10月12日発表(上記で解説済み)
Excelが1900年をうるう年として誤設定していた(マイクロソフトのサポートWebサイト)。
2012年2月29日発生
Microsoft WindowsのAzureが、うるう年の誤認識で、2012年2月29日から3月1日朝まで24時間以上、サービスが中断した。
2010年3月1日発表
ソニーのゲーム機「プレイステーション 3」で、2010年をうるう年と誤認識したことで、今までプレイして集めた「トロフィーが消える」現象が発生した。
2008年2月18日発表
シチズンの電波時計が、うるう年の誤認のため、「2010年1月1日以降に電波を受信すると、カレンダー部分が正常に表示されないなどの現象が発生する」と発表(インターネットアーカイブより)。
2008年12月31日
マイクロソフトの音楽プレーヤー「Zune 30GB」が、うるう年のバグにより12月31日に動作停止した。2009年1月1日の正午(GMT)に自然治癒した。
2008年12月31日
東芝の音楽プレーヤー「gigabeat Tシリーズ」で、うるう年の誤認識により、約24時間使用できなかった(日付が替わり、自動復旧した)。
2012年2月29日
シャープ製Blu-rayレコーダーで、うるう年の誤認識のため、2012年2月29日、番組予約で「この予約は最後まで実行できません」との誤メッセージを表示(実際には、予約は可能だった)。
6.まとめ
うるう年バグをまとめます。
- うるう年バグが発生すると、プログラムが存在しない日に基づいて動作するため、想定通りの動作をしない可能性がある
- 機器の主機能に影響を与える可能性があり、バグの影響度は高い
- バグは、一定期間(通常、24時間)が経過すると元に戻る可能性がある
- バグを防ぐには、成果物(仕様、設計書、プログラム)でうるう年を考慮しているか確認する。また、「2月29日」と「12月31日」のテストを実施する
- バグは2月29日、12月31日に多く発生することが多く、この日に突然バグが発生し、一定時間(通常24時間)で自然治癒する場合は、うるう年バグを疑う必要あり
7.終わりに
前回に引き続き、うるう年のバグを紹介しました。過去、組み込み系製品でも、うるう年のバグはさまざまな製品で発生してきました。うるう年バグは、時限爆弾のように発生するので事前にしっかり対策し、バグを作らないよう注意しましょう。
参考文献
[1]なぜシステムがダウンするのか 知っておきたいシステム障害、信頼性の基礎知識((著)大和田尚孝、(監)日経コンピュータ、2009年、日経BP)
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- ≫連載「山浦恒央の“くみこみ”な話」バックナンバー
- ソフトウェア技術者のためのバグ百科事典(1)うるう年
ソフトウェア技術者に向けて、バグに関する基礎知識をまとめていく新シリーズ「バグ百科事典」が始まります。記念すべき第1回は、超常連バグである「うるう年バグ」を取り上げます。 - バグ検出ドリル(21)「三角形判定」のテスト項目を設計できますか【解答編】
バグは至るところに、しかも堂々と潜んでおり、自信満々なプログラマーほど、目の前のバグに気付かないものです。「バグ検出ドリル」の第20回と第21回は、「三角形を判定」するプログラムのテスト項目設計がテーマです。前回の出題編から、今回は解答編になります。 - バグ検出ドリル(20)「三角形判定」のテスト項目を設計できますか【出題編】
バグは至るところに、しかも堂々と潜んでおり、自信満々なプログラマーほど、目の前のバグに気付かないものです。「バグ検出ドリル」の第20回と第21回は、「三角形を判定」するプログラムのテスト項目設計がテーマです。まずは今回の出題編を読んで、じっくり問題に取り組んでみてください。 - バグ検出ドリル(19)たかが1円されど1円……1円足りないバグの恐怖
バグは至るところに、しかも堂々と潜んでおり、自信満々なプログラマーほど、目の前のバグに気付かないものです。「バグ検出ドリル」の第19回の問題は、商品と個数から合計金額を求めるプログラムのバグです。なぜか1円だけ合わない、このバグの原因を突き止めよう! - バグ検出ドリル(18)IoT時代だからこそ重要、単純でも検出が難しい通信系バグ
バグは至るところに、しかも堂々と潜んでおり、自信満々なプログラマーほど、目の前のバグに気付かないものです。「バグ検出ドリル」の第18回の問題は、相互に通信する機器のソフトウェアのバグです。IoT時代を迎えて利用場面が増えている、通信系のバグを見つけ出しましょう!