バグ
出典: フリー百科事典『ウィキペディア(Wikipedia)』
バグ (bug) とは英語で虫の意であり、転じてコンピュータプログラムの製造(コーディング)上の誤り・欠陥を表す。また、発生したバグを探して取り除く作業をデバッグ (debug=虫取り) と呼ぶ。
ソフトウエア・ハードウエア開発における契約文書など、法的な文書ではバグのことを「瑕疵」と記述する。 原因や責任の所在などが不明なものを特定性の低い表現の不具合と呼ぶことがある。また、セキュリティ上に関わるバグや欠陥はセキュリティホールなどと呼ばれることもある。
目次 |
[編集] 原因と影響
プログラミング上の主なバグには、論理的なバグと、誤記によるバグがある。
論理的なバグは、プログラムの設計過程において発生する。無限ループや計算間違いなどを引き起こし、時には、コンピュータを暴走させたり、逆に停止させたりすることもある。
誤記によるバグは、プログラムの製造過程において発生する。存在しないプログラムの参照、意図した範囲を超えた計算結果、数値計算の誤りなどを引き起こす。論理的なバグと同様に、コンピュータを暴走させたり停止させたりすることもある。
他に、OSや開発環境などの問題(それそのものがバグである場合がある)によりバグが発生することがある。2000年問題のように、ソフトウェアが本来予測された耐用年数を超えて運用された結果、仕様がバグになってしまったものも環境依存のバグといえるだろう。
安易なバグフィックス(修正)は、避けられる傾向にある。修正内容にバグを含んでいる場合や、関連するプログラムがバグの存在によって正常に動作していた可能性があるためである。「正常に動作しているものは触らない」「寝ているバグは起こさない」と言われる。
[編集] 語源
コンピュータの部品として真空管とリレーが主に使われていた時代には、虫が原因でコンピュータがうまく動かなくなることがしばしばあった。真空管が発する光と熱に誘われて内部に入り込んだ小さな虫が、リレーに挟まれて焼死し、その炭化した死骸が原因で、電流の異常な伝導が発生し、装置の誤動作を招いた。ここから転じて、プログラムの間違いを指すようになったという説が有力である。
一方、虫が直接「バグ」という語に繋がったのではなく、真空管の虫取り作業を指していた「デバッグ」がコンピュータの不具合を直す作業全般に広がって使われるようになり、コードの不具合を取る作業をデバッグと呼ぶようになったのが先であり、そこから「バグ」という語が再派生したとする説もある。すなわち、 バグ(真空管の虫) → デバッグ(虫取り) → デバッグ(不具合の修正) → バグ(コードの不備) の順である。
他にも、20世紀初頭の時点で、電気通信関係で不具合のことをバグと呼んでいたという説、シェイクスピアの『ヘンリー四世』で忌まわしきものという意味で使われていた「バグ」という単語に由来するという説もある。プログラム上の欠陥を虫に見立てて呼ぶようになったという説もあるが、これは誤りとされている。
[編集] 外観形状
正体はプログラムの欠陥であるため、「虫」としての外観は持たないが、もし「虫」として姿を現すとすれば、テントウムシのような甲虫ではないかと考えられており(英語のbugから)、甲虫のイメージで表される。例として、デバッガのアイコンやボタンにこのような虫があしらわれることがある。
[編集] 対策
プログラマーの格言には、「バグは出ない事しか分からない」というのがある。ソフトウェアにバグが絶対に存在しないことを立証する方法はないので、ある程度の複雑さを持つプログラムでは、発見したバグを解消し続けることでバグの数を0に向かって漸近する以上の事はできない。
実際に、近年のOSなど膨大なプログラミングを必要とするものには、「バグのないソフトウェアは無い」と言われている。もしバグを完全除去したものを作成しようとした場合、膨大な時間とコストがかかり、製品の開発から出荷まで膨大な時間を要してしまう。このため、多くのメーカーではある程度のバグが残っていたりその可能性があってもその範囲で正常に動作する時点で出荷したりしている。例えば銀行のオンラインシステムなどは社会基盤を支える重要度の高いシステムであるが、年に数度ダウンする程度が目安となる。それ以上の品質を確保しようとすると、問題が顕在化した時点で対処した方が費用対効果の点で有益であると判断されるからである。
出荷後は、想定外の操作を行った際にバグが発見されることが多い。メーカーのプログラマやテスト担当者はある程度の知識があり、想定外の操作により発生するバグの発見は比較的困難である。このようなバグは、専門知識の無い一般利用者が使用することで、発見されることも少なくない。
近年では、バグが残っていることを前提にした上で、最新の機能や修正した機能を搭載したソフトウェアをアルファバージョンやベータバージョンとして一般利用者に試用してもらい、報告されたバグを正式版までに修正するという手法もよくとられる。また、ゲーム製品などでは、素人の一般人に試用してもらいバグを発見する専門の仕事もある。
[編集] バグ管理
[編集] バージョン管理システム
コンシューマ向けアプリケーションソフトの場合、一般的にはバージョン管理システムと呼ばれる数値で行うことが多い。バージョンの数値が大きいほど、バグの修正や機能の追加が行われていることを表す。コンシューマ向けOSなどの場合、メーカーではこれらを定期的に修正した修正プログラムを提供している。既知の問題の修正箇所を、個別に修正の実施と未実施を調べる。近年ではバグ管理システムなどに移行している。
Microsoftでは毎月第2火曜日(日本ではその翌日で、単なる第2水曜日ではないことに注意)に自社製品のバグの対策プログラムを発表するようになった。以前は修正プログラムが完成した都度に発表していたが、ユーザーが頻繁に修正プログラムの発表を調べなくてはならず、修正が行われずに放置されてしまう場合が逆に増えてしまっていた反省によるものである。ただし既に実害が発生している場合などは即時の発表が行われている。他社もMicrosoftに倣って第2火曜日近辺に発表することが多くなった。
[編集] バグ管理システム
近年、ソフトウェアの開発においてはバグの修正が重要な作業と考えられている。バグを漏らさず修正し、再発を防ぐには、バグの発見日時や発見者、再現方法、修正担当者、修正履歴、修正方法、重要度、テスト状況などの多くの情報を残し管理する必要がある。開発によっては数千という数のバグが発生し、また多数のテスト担当者や修正担当者が関わっていることを考慮すると、従来のファイルレベルの管理では追いつかなくなっている。このような背景から、バグを管理するソフトウェアであるバグ管理システムが生まれた。バグトラッキングシステム(Bug Tracking System、略してBTS)とも呼ぶ。
バグ管理システムは、Webサーバ上で動作し、Webブラウザ経由でアクセスできるようになっている。また電子メールとも連動し、修正時にテスト担当者やバグ報告者にメールが送信されるものもある。 主なバグ管理システムには、Bugzilla、影舞などがある。また、最近ではWebサーバを必要としないP2Pアーキテクチャによるバグ管理システムのPapilioといったものも登場した。
バグ管理システムは、バージョン管理システムと同様、ソフトウェアを開発する上での必須アイテムになりつつある。
[編集] バグとソフトウェア工学
ソフトウェアでバグを出さない最も良い方法は、そもそもバグが起こりにくい開発を心がけることだといえる。バグが起こりにくい環境では、その分工数に余裕が持てる上、ソフトウェア自体の性能も良好になりやすいという、正の相関性が見られる。正しい環境の追及は非常に重要な問題なのである。
どのような方法論をとれば開発過程にひずみを産まないか、安全なプログラムを書くにはどのような言語を用いるべきか、適切な人員配置とコミュニケーションはどのように行われるべきか、等々、そのような知見を扱う分野はソフトウェア工学と呼ばれる。
[編集] コンピュータゲームにおけるバグ
コンピュータゲームにおいても当然バグは生じうる。進行やセーブデータ保全に影響するようなものの場合はゲーム雑誌などで告知されたり、影響力が大きい人気ゲームの場合は新聞でも取り上げられる。重大なバグだとメーカーが判断した場合、パソコンソフトならば公式ホームページ上で修正パッチを配布する事でも充分対応できるが、家庭用ゲームソフトのバグはアップデートが困難あるいは不可能であるために、無償で修正版との交換が行われることもある。しかし、大部分のゲームでは発売後に発覚したバグは放置され、ユーザー同士の情報交換が唯一の対処手段となる。
また、逆にユーザーがバグを裏技や小技として利用することがある。中には『スペースインベーダー』の「名古屋撃ち」などのように、元々はバグにより発生した作成者の意図しない現象であったものが、後に正式な仕様の「裏技」として認知されるケースもある。
さらに、ゲームでは画面表示が異常になった状態を俗に「バグった」と呼ぶことがあるが、本来はバグ(もしくは他の要因)の結果、表示が異常になるものであり、用語の使い方としては誤りである。ほかにも、意図的に動作不良を起こさせた状態すらバグと呼んだり、異常な形で現れた要素を「バグキャラ」「バグアイテム」等ということもある。もちろんこれらをバグと表現するのは適切ではない。英語ではこのような現象を指す場合、bugではなくglitchという用語を用いる。
バグによって引き起こされた裏技(バグ技)についてはバグ技も参照。

