そもそも、プログラムの不具合をなぜバグと呼ぶのかご存じでしょうか。「バグ」とは英語の「bug(虫)」のことであるのは、みなさんご存じのことと思いますが、実は、バグという用語自体にも、歴史上最初のバグストーリーが存在しているのです。
「バグ」という用語は、1940年代にアメリカで開発された初期のコンピュータであるHarvard MarkⅡ(ハーバードマークツー)が故障した際の修理で、パソコン内部に入り込んだ虫が原因であったことから命名されました。
また、故障したHarvard MarkⅡから虫を取りぞくと改善したことから、不具合を改善する作業のことをdebug(デバッグ)と呼ぶようになったと言われています。 debugの「de」は英語で除去するという意味であることから、「デバッグ」はバグを取り除くという意味の用語として使われるようになりました。
なお、このときに見つかった虫は、今でもアメリカのスミソニアン博物館に展示されています。
ではここから、歴史に残るバグストーリーを5つ紹介していきましょう。「バグ」の名前の由来となった世界最古のバグストーリーから80年あまり。これまでどんなトラブルが世界を騒がせてきたのでしょうか。
アメリカ航空宇宙局(NASA)が打ち上げた火星探査機マリナー1号は、飛行ソフトウェアのバグが原因で飛行ルートを誤り、打ち上げから294秒後、安全のために大西洋上で爆破されました。
バグの要因は、制御プログラムの数式に含まれていたオーバーライン(平均値を取ることを意味する記号)が抜けていたことにありました。さらに、オーバーラインは仕様書の時点ですでに抜け落ちていたことも判明しています。つまり、このバグはプログラムのコーディング時ではなく、仕様書の作成時点に作りこまれたものだったのです。
プログラムの品質だけでなく、設計書や仕様書の品質も重要であるということがわかる例だといえるでしょう。
1985年にカナダのALEC社とフランスのCGR-MeV社が開発した「セラック25」は、放射線を照射することで腫瘍を治療する放射線療法装置でした。しかし、装置のOSのバグが要因で、複数の医療施設で放射線治療装置が誤作動し、少なくとも5人が死亡し、他にも怪我人が出る大事故となりました。
この事故の原因は、装置のOSに存在する並行プログラミングの誤りによって、競合状態が発生してしまうことにありました。その後、この事故は、生命にかかわるソフトウェア開発の安全性について研究されるきっかけとなったのです。
ワーム(worm)と聞くとドキッとする方は多いことでしょう。ワームはマルウェアの一種で、ネットワークを介して他のPCに感染し、PCの乗っ取りやPC内の情報を盗む悪意のあるソフトウェアです。「Morris Worm(モリスワーム)」は、インターネット黎明期に初めて大規模に拡散したワームで、数千台のコンピュータを機能停止に追い込みました。
実は、モリスワームの作成者は、当時のインターネットの規模を測る目的でこのプログラムを作成しており、コンピュータに損害を与えるつもりはありませんでした。しかし、プログラムの仕組みに致命的なミスがあり、結果的に大問題に発展してしまったのです。
この事件は、インターネットのセキュリティ問題を浮き彫りにし、セキュリティ対策の重要性を世間に認識させるきっかけになったとして、「Great Worm」とも呼ばれています。
世界的な半導体メーカーのインテル社が1993年に開発したPentiumプロセッサに、浮動小数点数の除算で誤りを引き起こすバグが発見されました。内容としては、特定の条件下の除算で、結果にわずかな誤差が生じる、というものであったため、影響を受けるユーザはごくわずかでした。
このバグの原因は、新たに実装されたPentiumの除算の回路設計を誤ったことに起因していることが明らかになっています。
当初、インテル社はバグの影響があると確認できたユーザのみプロセッサの交換を行うと発表しましたが、その対応がユーザの抗議を引き起こしてしまいました。結果的に、この問題は注目を集め、最終的にインテル社は大規模なリコール対応を余儀なくされました。
ソフトウェアだけでなく、ハードウェアにもバグを作りこまないよう細心の注意が必要である、という教訓もさることながら、バグ発覚時には企業の対応力も問われる、ということがわかる事件だといえるでしょう。
最後に比較的新しい事件を紹介します。アメリカの投資会社ナイト・キャピタル・グループは、自動取引システムのバグが原因で巨額の損失を出し、企業の経営に深刻な影響を与えました。
トラブルを引き起こした直接の原因は、新しいプログラムを8台のサーバーに入れようとしたところ、1台のみコピーし忘れ、古いプログラムのまま動作させてしまったことでした。この古いプログラムに残されていたデッドコードがバグの原因となり、システムは意図せず大量の注文を送信してしまったのです。
この誤発注によって、同社は4億を超える損失を計上し、最終的にGetco LLCに買収される結果となりました。
プログラムのリリースなどの作業時にもミスは許されない、という学びになる事例です。
ここまで、実際に社会に大きな影響を与えたバグストーリーについて紹介してきましたが、最後に番外編を紹介します。2000年問題、またはY2K問題、という言葉を聞いたことがあるでしょうか。
2000年問題とは、西暦が1999年から2000年に代わる際に世間を騒がせた問題です。当時、多くのコンピュータシステムでは、プログラム内で日付を扱う際、西暦を下2桁で記述しており、2000年には下2桁が「00」になることが原因で様々な問題が起きると指摘されていました。当時、すでに多くの分野で情報システムが使われていたため、金融、物流、医療などの社会インフラに深刻な混乱が起きるのではないかと懸念されたのです。
しかし、実際には、この問題に対して各所で事前に対策が行われたため、予想されたような混乱は起きずに済みました。
2000年問題は、将来に起こりえる問題や影響を予見しておくことの重要性を示す教訓になったといえるでしょう。
この記事では、「バグ」という言葉の由来から、歴史に残るバグストーリーを紹介してきました。
これまでの業務のヒヤッとした経験を思い出した方や、少なからず日々の業務で意識している事例などがあった方もいらっしゃるかもしれませんね。
情報システムの歴史を辿ると、過去の事例から得た教訓を、今後に活かしていくことがいかに重要か、ということを実感するのではないでしょうか。「バグのないプログラムは存在しない」と言われることもありますが、常に品質を意識しながらシステムの開発を行い、影響を最小限に抑える努力を続けていくことが重要であるといえるでしょう。
木曜日の夕方に仕事で疲れた脳みそをリフレッシュしたいとき、一人でゆっくりしたい夜、ちょっとした空き時間に、気軽に「つまめる」ソースコードの話題をお届けします。
まるで隠れ家バーでマスターが語るウンチクのように、普段は見過ごしがちなコードの奥深さや、思わず「へぇ〜!」と唸るようなユニークなアイデア、クスッと笑える小ネタを、ソースコードの世界を熟知した「情シスのじかん」がご紹介します。
コードを書くのが大好きなエンジニアさんも、ソースコードはちょっと苦手…という情シス部門の方も、この特集を読めば、きっとソースコードの新たな一面を発見できるはず。
業務効率化のヒントになるTipsや、セキュリティ対策に役立つ情報も盛りだくさん。
さあ、あなたも「おつまみとしてのソースコード」で、技術の世界をもっと身近に、もっと楽しく感じてみませんか?
本特集はこちら30秒で理解!フォローして『1日1記事』インプットしよう!