バグ
通常、ソフトウェアが仕様通り正常に動作するかどうかを確認するソフトウェアテスト(プログラムテスト)を実施し、その過程でバグが発見されればソフトウェアを修正した上で再びテストを実施、仕様通りに正常に動作するよう仕上げていくことになる。
しかし、ソフトウェアに『バグが存在すること』を立証するには、何かひとつの手順によって再現させるだけでよいが、「ソフトウェアに『バグが絶対に存在しないこと』を立証する方法」は数学的に存在し得ないので、ある程度の複雑さを持つプログラムにおいて、バグの数を 0 に近付ける以上のことはできない。仮にソフトウェアテストで存在を証明された既知のバグをすべて除去したとしても、そのソフトウェアに他のバグが一切存在しない、ということにはならない。
エドガー・ダイクストラは以下のような格言を残している。
実際に、近年のOSなど膨大なプログラミングを必要とするものには、「バグのないソフトウェアは無い」と言われている。
もしすべてのバグを完全除去したソフトウェアを作成しようとした場合、製品の開発・デバッグ・テストからリリースまでに膨大な時間とコストがかかってしまい、開発費用を回収できなくなってしまう。このため、ソフトウェアメーカーの多くは、ある程度のバグが残っていても、致命的な不具合や主要機能への影響がなく、また別の回避策があるなどの想定範囲内のバグであれば、既知の問題点としてユーザーに告知した上でリリースしたりしている。
例えば銀行のオンラインシステム(勘定系システム)などは、社会基盤を支える重要度の高いシステムであるが、年に数度ダウンする程度が目安となる。
「バグ」は英語からの外来語であるが、この言葉はコンピュータの登場以前から、機械装置の原因不明な不具合をあらわす符牒として技術者の間で使われていた。たとえば1878年にエジソンが同僚に宛てた手紙のなかで、彼は機械の不具合のことを「バグ」と呼んでいる。また、第二次世界大戦中には、レーダーの故障をバグと呼んでいたという記録が残っている。現在の米口語では、バグはコンピュータのバグや虫の意味のほかにも、動詞として「人を悩ませる、いらいらさせる」という意味でよく使われる。
コンピュータのソフトウェアに間違いが入るという概念自体は古く、その起源はチャールズ・バベッジによる解析機関にまでさかのぼる。解析機関のプログラミングを担当したエイダ・ラブレスはすでに1842年に残したメモの中で、計算手順を示したカードの入れ間違いにより誤った計算結果が得られる危険性を示唆していた。
コンピュータに関しては、グレース・ホッパーが、Harvard Mark II(英語版)のプロジェクトで働いていた時に、バグとして本物の虫を発見したという話がある。不調になったMark IIを調べたところ、リレーの間に虫(蛾)が挟まっていたのを別の技術者が発見した。彼女はこれを、作業日誌にテープで貼りつけて「本物の虫が『バグ』として発見された最初の例」と書き残した。この日誌は米海軍歴史博物館に保管されている。
他にも、シェイクスピアの『ヘンリー四世』で忌まわしきものという意味で使われていた「バグ」という単語に由来するという説もある。プログラム上の欠陥を虫に見立てて呼ぶようになったという説もあるが、これは誤りとされている。