バグ
ソフトウェア・バグとは、コンピュータ・プログラムのコードに問題があり、正常に動作しないことを言います。バグはユーザーに不便をもたらし、コンピューターがクラッシュしたりフリーズしたりすることもあります。ほとんどのコンピュータープログラムにはバグがあります。多数のバグ(場合によっては1つまたは数個の深刻なバグ)があるプログラムは、バグだらけであると言われます。
ほとんどのバグは、開発者のプログラミングミスによって発生しますが、時にはコンパイラの問題で発生することもあります。バグが発見された場合、人々は開発者にバグレポートを送り、そのバグについて伝え、修正してもらいます。
コンピュータに何か問題があると、「コンピュータにバグがある」と言われることがあります。この問題は通常、コンピューターに感染したコンピューターウイルスが原因で、コンピューターの動作が遅くなったり、異なる動作をするようになったりしています。
例えば、多くのビデオゲームでは、オブジェクトが壁を通り抜けることができないというように、無害なバグもあります。また、ナビゲーションシステムのバグで飛行機が爆発してしまうなど、深刻なバグもあります。
バグの種類
バッファオーバーフロー
バッファオーバーフローは、プログラムが本来アクセスしてはいけないメモリ領域に書き込んだり、そこから読み込んだりすることで発生します。
算術オーバーフロー
算術オーバーフローとは、変数に格納されている数値が、その変数が許容する最大の数値を超えて増加した場合に起こる現象です。この場合、通常、数値はゼロにリセットされます。
無限ループ
無限ループは、プログラムがループ(一連の命令を何度も繰り返すこと)に入り、ループから抜け出す方法がない場合に起こります。これにより、プログラムがフリーズすることがあります。
ラウンドオフエラー
浮動小数点変数の精度が十分でないと、そこに格納されている数値が不正確になることがあります。例えば、ナビゲーションプログラムでは意図しない場所に移動してしまったり、音声録音プログラムでは音が歪んでしまったりと、プログラムの種類によって様々な問題が発生します。
ゼロによる分割
ゼロによる除算は、無効な数学演算です。プログラムが整数をゼロで除算すると、クラッシュします。Linuxでは、このバグが発生したときに表示されるメッセージは、浮動小数点数が関与していないにもかかわらず、「浮動小数点例外」となります。浮動小数点演算では、ゼロでの除算が可能な場合があります。この場合、通常は「not a number」という特別な値が表示されます。
クリッピングの問題
ビデオゲームにおいて、クリッピング問題は、衝突検出問題とも呼ばれ、オブジェクトが意図しない壁、床、天井などの障害物を通過する際に発生します。これは、多くのビデオゲームで見られる非常に一般的なバグです。例えば、「Doom 2」では、潰されたモンスターがアーチバイルによって復活してしまうという現象が発生します。例えば、『スーパーマリオ64』では、お城の螺旋階段を上るときに天井を飛び越えてスキップすることができますが、クリッピング問題はスピードランの時間短縮戦術としてよく使われます。
セキュリティバグ
セキュリティバグとは、侵入者がコンピュータにアクセスしたり、コンピュータをクラッシュさせたりするためのバグのことです。コンピュータをクラッシュさせることをサービス妨害攻撃といいます。セキュリティバグは、クレジットカード番号やパスワードなどの重要な情報を盗むことができる可能性があるため、修正することが特に重要とされています。セキュリティバグの例としては、HeartbleedやShellshockなどがあります。
Misbugs
ミスバグとは、機能として利用されてしまったバグのことです。例えば、Android携帯のバグを利用して、ユーザーがroot権限を取得できるようにした場合などが挙げられます。
ハードウェアのバグ
バグの中には、ソフトウェアではなくハードウェア(コンピュータの物理的な部分)に影響を与えるものがあります。例えば、古いPentiumプロセッサでcmpxchg8b eax
という
命令を実行すると、再起動するまでプロセッサが動作しなくなるというものです。ハードウェアのバグは物理的な設計上の欠陥であるため、ソフトウェアのアップデートで修正することはできません。ただし、ソフトウェアのアップデートでバグを回避(隠蔽)することは可能です。
質問と回答
Q:ソフトウェアのバグとは何ですか?
A:ソフトウェアのバグとは、コンピュータプログラムのコードに問題があり、正しく動作しないことです。
Q: ソフトウェアバグがもたらす結果とは何ですか?
A: ソフトウェアのバグは、ユーザに不便をもたらし、コンピュータをクラッシュさせたり、フリーズさせたりする可能性があります。
Q: すべてのコンピュータ・プログラムにバグがあるのですか?
A: はい、ほとんどのコンピュータ・プログラムにはバグがあります。
Q: バグのあるプログラムとは何ですか?
A: バグの多いプログラムとは、多数のバグを持つプログラムのことです。
Q: コンピュータ・プログラムのバグの多くは誰のせいですか?
A: たいていのバグは、開発者の誤ったプログラミングによって引き起こされますが、コンパイラの問題によって引き起こされることもあります。
Q: コンピュータ・プログラムにバグを見つけたら、人々はどうしますか?
A: バグが見つかったら、バグレポートを開発者に送り、バグについて伝え、修正させます。
Q: 自分のコンピュータにバグがあると言うとき、人々はどういう意味ですか?
A: 人々が自分のコンピュータにバグがあると言うとき、それはたいてい何かがおかしいという意味です。