バグ
【 bug 】バグとは、「虫」という意味の英単語で、コンピュータの分野ではプログラムに含まれる誤りのことを指す。プログラム中の誤りを発見し取り除く作業・工程を「デバッグ」(debug:除虫する)という。俗に、ソフトウェアが正常に動作しなくなることを「バグる」ということがある。
原因と影響
ソフトウェアの誤作動を引き起こすコンピュータプログラム中の欠陥を指し、人間がプログラムを書き記す際に起きる単純な誤記や勘違いなどによるものから、想定や設計の段階で誤りや矛盾が含まれていたことに起因するものなど、様々な原因によって発生する。
バグによる不具合の様態は様々だが、典型的なものとしては、利用者の操作に応答しなくなったり、設計意図と異なる挙動を示したり、誤ったデータを出力したり、記録されたデータを破壊したりといった振る舞いが挙げられる。ビデオゲームの分野では、通常は不可能なはずの挙動や展開が可能になるバグが注目されることが多い。
潜在的なバグ
バグはいつどこで実行しても必ず不具合を引き起こすとは限らず(そのようなバグは発見や修正が容易である)、特定の入力データや操作、使用環境など(およびそれらの特定の組み合わせ)によって発現し、それ以外の状況では誤作動を引き起こさない場合がある。
極端な例として、1980年代までは日付データの年号部分を西暦の下二桁で記録・管理することは記憶容量の節約や処理速度の向上に寄与するとして推奨されることが多かったが、西暦2000年が間近になるとそれらが深刻なバグとみなされるようになった事例が挙げられる。
バグの発見と修正
コンピュータプログラムの設計・記述の多くは人間が行うため、バグの発生・混入を未然に完全に防ぐ方法はなく、いかに効率よく早期に発見し取り除くかが重要となる。そのためには、ソフトウェア開発の各段階で繰り返し入念にテストを行い、発見された不具合や誤作動についてプログラム上の発生箇所や原因を特定し、対処方法を決定して修正などを行う。
発見されたほとんどのバグは正しい動作を行うプログラムコードに差し替えられるが、OSなど基盤的なソフトウェアの場合には修正によってプログラムの振る舞いが変わり、従前の振る舞いを前提に動作していた他のプログラムなどに思わぬ影響を及ぼすことがあるため、誤っている箇所をあえて放置して別の箇所や方法で悪影響を抑えるというアプローチが取られる場合もある。
歴史
すでに19世紀には機械の設計・製造上の誤りや不良が “bug” と呼ばれていた事例がいくつか知られており、初出がいつに遡るのかは判然としない。現代のコンピュータのソフトウェアにおける用例に近い初期のエピソードとして最も有名なものは1947年にグレース・ホッパー(Grace Hopper)氏が米ハーバード大学で遭遇した事例である。
初期の電気機械式のコンピュータ「Harvard Mark II」の不具合を調査する過程で、あるスタッフがリレー(スイッチ)に蛾が挟まって接触不良を起こしているのを発見した。彼女は日誌に蛾をテープで留め、“First actual case of bug being found”(実際にバグが見つかった最初の事例) と書き残した。
関連用語
- バグトラッキングシステム (BTS)
- デバッグ (debug)
- フリーズ (ストール)
- 定数 (constant)
- プログラム (program)
- コンピュータプログラム (computer program)
- 構造化プログラミング (structured programming)
- スタックトレース (stack trace)
- ソースコード (source code)
- 例外処理 (exception handling)
- 工数 (workload)
- ステップ数 (プログラムステップ数)
- プログラミング (programming)
- 辞書 (ディクショナリー)
他の辞典の解説 (外部サイト)
関連リンク (外部サイト)
- Log Book With Computer Bug | National Museum of American History -
“In 1947, engineers working on the Mark II computer at Harvard University found a moth stuck in one of the components. They taped the insect in their logbook and labeled it "first actual case of bug being found." The words "bug" and "debug" soon became a standard part of the language of computer programmers.
”