例外の代わりにバグという言葉を使用しないのはなぜですか?[閉まっている]


18

例外をバグと呼ぶ場合、そもそも例外ではなく単にバグと呼ぶだけではどうでしょうか?

コード内で例外と呼ばれ、発生するとすぐにバグと呼ばれます。それでは、そもそもそれをバグと呼んでみませんか?

回答やコメントをありがとうございます。


私が言及する技術的な詳細が、例外とバグの区別を明確にする助けになることを願っています。すばらしい質問BTW、+ 1
ジェレミートンプソン


1
これらは非常に異なるものであるため、実際にどのように混同できるかわかりません。例外はコードによって処理されるケースであり、何らかのエラーを示します。通常、正確には説明できないなど、あいまいな種類のエラーなど。-バグの場合...バグは、コード自体では未処理です。エラーではなく、本来あるべきではないロジックの欠如を示しています。
tvCa 14

1
@NiklasRtz:なぜ大きな恩恵があるのですか?関係なく、多くの人が答えたでしょう。
ThePopMachine 14

@ThePopMachine私は他の人が面白いと思うかもしれない質問に対する莫大な賞金が好きだからです。私は「人気のある」質問を求めて、できる限り回答します。質の良い楽しい質問と回答から多くの助けをもらいました。また、このプログラマ向けのエラー処理とエラーコードに関する新しい質問を準備しています。それは、コードの記述方法ではなく、限られた数のエラーコード、デフォールトの有効性、コードパーツの命名。
ニクラス14

回答:


93

まあ、それは非常に簡単です:すべての例外がバグであるわけではありません(同様に、すべてのバグが例外として現れるわけではありません)。

バグではない例外の例として、USBドライブからファイルを読み込んでいて、誰かがソケットからドライブをヤンクした場合。これにより、例外が発生します(つまり、例外をサポートするほとんどの言語で)。しかし、それはコードのバグではありません。

逆に、バグは、計算エラーなどとして現れる場合があります。あなたはまだ答えを得ます、それはちょうど正しいものではありません。

そうは言っても、スタックの最上位に到達する例外おそらくバグです。上記の私のUSBの例では、その例外をキャッチして、「接続されていないためファイルから読み取ることができませんでした」という素晴らしいエラーをユーザーに表示できるはずです。か何か。あなただけでそれらを提示した場合IOException、いくつかのファンキーなエラーコード、そして、それはだバグ。しかし、例外自体はそうではありません。


1
私はそれをどのように見ても正しいです:メソッドが最も近い都市(ロサンゼルス)の名前の取得に失敗した場合、例外をキャッチし、より大きな管理エリア(たとえばカリフォルニア)の名前を返しますが、どんな座標にとっても、近い都市のない場所はバグではありません。それは例外です。同意しますか?
ニクラス

1
@ニッケ:うん、私はそれに同意するでしょう。
ディーンハーディング

1
IOExceptionとエラーコードを表示することは、必ずしもバグではありません。それは診断です。私はよく個人的なスクリプトに対してそれを行います。失敗すると、間違った引数を入力するだけになります。
トーマスエディング14

23

単純明快な例外は、(常に)バグではありません!

例外が発生すると例外がスローされます(またはスローされるはずです)。ハードドライブに問題があり、ファイルを書き込めない場合、それはバグではありません。それはハードウェアの故障です。

バグは一般に、不適切なプログラミングの結果です。アプリケーションがプログラミングエラーの結果として予期されないことを行う場合、それはバグです。


1
へえ、私たちはほぼ同時に答え、そして基本的に同じ例で:
ディーンハーディング

5
@DeanHarding偉大な人は同じように考えますか?:D

1
私はあなたの最初の文には同意しますが、あなたの最後の文には同意しません。第1のコンピュータバグ(作り話かかわらず)は、実際には、中継点との間に捕捉蛾ました。故障したハードドライブはどのように違いますか?
スコットホイットロック

1
@ScottWhitlock「バグ」には複数の定義があると思います。人間によって引き起こされるように私はいつも平均エラーにそれを仮定:en.wikipedia.org/wiki/Software_bugを

1
@ScottWhitlock:おそらくプログラマーは「私のせいではなく、バグでなければならない」と言うでしょう。これは、「バグ」がソフトウェアの障害を意味するようになったために裏目に出ました。今日、ハードウェア障害はバグと呼ばれませんが、バグはハードウェア障害を引き起こす可能性があります。
jmoreno 14

20

それらは同じものではありません。

バグは、ソフトウェアの一部の意図しない動作です:ソフトウェアは、行うことになっている何をしません。バグは、単純な古いタイプミスから論理エラー、不適切な機能仕様に至るまで、ソフトウェア開発のすべてのレベルで存続できます。

例外は、対照的に、信号とそのような条件を処理するために使用される言語構造に、より具体的には、正常な動作から逸脱、プログラムの異常な状態のいずれかを指す、またはすることができます。

例外が発生するという事実はバグの兆候である可能性がありますが、多くの場合そうではありません。たとえば、URLからドキュメントをダウンロードしてローカルで処理することになっているアプリケーションは、リモートサーバーがダウンしているときに例外をスローする場合があります。アプリケーションは通常の動作から外れています例外を適切に処理して回復すると、バグはありません。

逆に、バグの存在は必ずしも例外として現れるとは限りません。アプリケーションは、入力したデータをデータベースに保存する代わりに、静かに破棄する場合があります。例外はスローされませんが、それでもバグです。


条件を定義するための+1。一般に、人々はそれをもっと頻繁に行うべきです!
イフェルドブルム

これは間違いなく最も明確な答えです。非常に明確で簡潔。よくやった!
ロック14

5

例外とバグはまったく関連していません。確かに、例外をスローすることもありますが、これはバグを意味します。ただし、例外的な異常な状況を意味する場合もありますが、これは必ずしもプログラムのバグではありません。特に、Javaのような例外対応言語では、すべての標準操作とその犬が約5つの異なる例外をスローします。たとえば、ファイルのオープンに失敗した、ファイルの読み取りに失敗したなどです。


3

例外は必ずしもバグ関連ではありません。あなたがしていることでうまくいかないものと考えてください。

思い浮かぶ例は、ドメイン名を解決するために使用されるInetAddress.getByName()です。何かが発生してUnknownHostExceptionがスローされた場合、実際にはコードの問題ではありません。


2

ソフトウェアバグは、コンピュータプログラムまたはシステムのエラー、欠陥、間違い、失敗、または障害を説明するために使用される一般的な用語であり、不正確または予期しない結果を生成したり、意図しない動作をさせたりします。ラベルのスペルミスである場合もあります。

例外はバグとは異なります。各種類の例外(アクセス違反、スタックオーバーフローなど)は、「最初のチャンス」または「2回目のチャンス」の例外としてデバッガに発生する可能性があります。定義上、エラーハンドラーで適切に処理されない限り、最初のチャンスの例外は致命的ではありません。

セカンドチャンス例外を処理するデバッガーがない場合、アプリケーションはシャットダウンされます。


2

自分で合法的に例外を発生させる可能性がありますが、意図的にバグを導入することはできません。


これは、より多くのコメントのように読み、見回答する方法
ブヨ

1
簡潔さは、2つのことの違いを強調する答えではないという意味ではありません。
アランB 14

1

すべての例外はバグではありません。すべてのバグが例外であるかどうかという議論のトピックになります。

例外は、アプリケーションの通常のフローまたは予想されるフローの一部ではないイベントであると言えます。これらのイベントは、バグが本質的に悪いコード(間違った計算など)の結果である場合に、コードがどのように記述されているかには依存しません。

例外を処理しないことがバグになる可能性がある例を次に示します。

外部ストレージデバイスにデータを書き込むプログラムがあると仮定しましょう。外部ストレージデバイスへの書き込み中に、プラグが抜かれたり、クラッシュしたり、破壊されたりする可能性があります(何らかの理由で)。これは例外的なケースであり、プログラミング言語が例外的な処理をサポートしているかどうかに関係なく、プログラムがこのイベントのためにクラッシュまたは誤動作する場合、それはバグです(エンドユーザーは何が起こったのか分からないかもしれません。 。ただし、プログラムがプロセスを正常に中止した場合、ユーザーに通知する(つまり例外を処理する)ことは明らかにバグではありません。

プログラミングプログラミング言語が提供するtry catchメカニズムは、本質的に、予期しないイベントを処理する方法を容易にするツールです。


1

概要:例外は悪い結果の証拠であり、バグは悪い結果の原因の一部です。(解決される)問題は例外ではなく、問題が例外の原因です。

Resoning:バグ、製品の設計や実装の欠陥である(ソフトウェアに限定されません)。たとえば、仕様の誤りまたは単純なビルドエラーのために、適切な定格のリレー(時間/感度/信頼性/容量)を使用していません。例外は(私はあえて言う「期待」?)行動を、例えば、車両の制御の損失を運転しながら、予測から現実の世界/実行時間偏差です。

1)の例が2)の例につながる可能性があるため、明らかにバグが例外を引き起こす可能性があります。しかし、すべての例外がバグによって引き起こされるわけではありません。たとえば、オペレーターが脳卒中を起こしたために車両の制御が失われるなどです。


0

この質問は賞金のために再開されたので、2003年の「例外かバグか?」というCUJの記事に言及しましょう。これはOPの質問に正確に対処しているようです。

基本的に、この記事では「バグ」と「例外」という用語を定義し(例を挙げて)、それぞれに対処するための戦略を提案しています。

この記事では、バグを「処理」するのではなく、アサーションでフラグを立てることを提案しています。対照的に、真の例外はコードを介して処理する必要があります(例外をスロー/キャッチする可能性があります)。

主なポイントは、バグが正反対を必要とすることです例外戦略を。

前述の記事は、Dr.Dobb'sから入手できます。http://www.drdobbs.com/an-exception-or-a-bug/184401686

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.